diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/cypress.json @@ -0,0 +1 @@ +{} diff --git a/cypress/integration/login.js b/cypress/integration/login.js new file mode 100644 index 0000000..78cd135 --- /dev/null +++ b/cypress/integration/login.js @@ -0,0 +1,26 @@ +beforeEach(() => { + cy.visit("http://localhost:8080/admin") +}) +it("На странице есть кнопка “Отправить”", () => { + cy.get('.login__btn').then($el => { + const text = $el.text() + cy.wrap(text).should("not.be.empty") + cy.wrap(text).should("not.contain", null) + cy.wrap(text).should("not.contain", undefined) + cy.wrap(text).should("contain", 'Отправить') + }) +}); + +it("Форма имеет все необходимые поля", () => { + cy.get('input[name="login"]') + cy.get('input[name="password"]') + cy.get('.login__btn') +}); + +it("Кнопка “Отправить” заблокирована", () => { + cy.get('.login__btn').should('have.class', 'blocked') + cy.get('input[name="login"]').type('login') + + cy.get('input[name="password"]').type('password') + cy.get('.login__btn').should('not.have.class', 'blocked') +}); \ No newline at end of file diff --git a/package.json b/package.json index 6732083..469af49 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "scripts": { "dev": "webpack-dev-server --mode=development --hot", "build": "rm -rf dist && webpack --mode=production --progress", - "reg": "node reg-util.js" + "reg": "node reg-util.js", + "cypress": "cypress open" }, "keywords": [], "author": "Maxim Stogniy ", @@ -47,8 +48,8 @@ "svg-transform-loader": "^2.0.7", "svgo-loader": "^2.2.0", "terser-webpack-plugin": "^1.2.3", - "vue-loader": "^15.6.4", - "vue-template-compiler": "^2.6.7", + "vue-loader": "^15.9.2", + "vue-template-compiler": "^2.6.11", "webpack": "^4.29.5", "webpack-cli": "^3.2.3", "webpack-dev-server": "^3.2.0" @@ -57,14 +58,18 @@ "last 2 versions" ], "dependencies": { + "axios": "^0.19.2", + "babel-polyfill": "^6.26.0", + "cypress": "^4.6.0", "normalize.css": "^8.0.1", "promptly": "^3.0.3", "pug": "^2.0.3", "request": "^2.88.0", "signale": "^1.4.0", - "vue": "^2.6.7", + "vue": "^2.6.11", "vue-carousel": "^0.18.0", - "vue-router": "^3.0.2", - "vuelidate": "^0.7.5" + "vue-router": "^3.2.0", + "vuelidate": "^0.7.5", + "vuex": "^3.4.0" } } diff --git a/src/admin/App.vue b/src/admin/App.vue index c011c82..efc1637 100644 --- a/src/admin/App.vue +++ b/src/admin/App.vue @@ -1,35 +1,24 @@ \ No newline at end of file diff --git a/src/admin/components/Header.vue b/src/admin/components/Header.vue index cc03bd5..8049651 100644 --- a/src/admin/components/Header.vue +++ b/src/admin/components/Header.vue @@ -1,25 +1,40 @@ \ No newline at end of file diff --git a/src/admin/customAxios.js b/src/admin/customAxios.js new file mode 100644 index 0000000..fb2226c --- /dev/null +++ b/src/admin/customAxios.js @@ -0,0 +1,31 @@ +import axios from 'axios' + +axios.defaults.baseURL = 'https://webdev-api.loftschool.com/' +const token = localStorage.getItem('user-token') +if (token) { + axios.defaults.headers.common['Authorization'] = `Bearer ${token}` +} + +axios.interceptors.response.use( + response => (response), + error => { + const originRequest = error.config + + if (error.response.status === 401) { + return axios.post("/refreshToken") + .then(response => { + const token = response.data.token + + localStorage.setItem('user-token', token) + axios.defaults.headers["Authorization"] = `Bearer ${token}` + originRequest.headers["Authorization"] = `Bearer ${token}` + + return axios(originRequest) + }) + } + + return Promise.reject(error) + } +) + +export default axios \ No newline at end of file diff --git a/src/admin/main.js b/src/admin/main.js index f4abce2..c43c75c 100644 --- a/src/admin/main.js +++ b/src/admin/main.js @@ -1,15 +1,16 @@ -import Vue from 'vue'; +import Vue from 'vue' import App from './App.vue' -import VueRouter from 'vue-router' -import router from './routes' +import router from './router' import Vuelidate from 'vuelidate' +import axios from './customAxios' +import store from "./store" Vue.use(Vuelidate) -Vue.use(VueRouter) -Vue.router = router +Vue.axios = axios new Vue({ el: "#app-root", render: h => h(App), + store, router -}); \ No newline at end of file +}) \ No newline at end of file diff --git a/src/admin/router/index.js b/src/admin/router/index.js new file mode 100644 index 0000000..c6b59bb --- /dev/null +++ b/src/admin/router/index.js @@ -0,0 +1,46 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import routes from './routes' +import axios from '../customAxios' +import store from '../store' + +Vue.use(VueRouter) + +const router = new VueRouter({ + routes +}) + +router.beforeEach(async (to, from, next) => { + const isAuthRequired = to.matched.some(record => record.meta.auth) + const isUserLogged = store.getters["auth/isLogged"] + + if (!isUserLogged) { + const token = localStorage.getItem('user-token'); + if (!token && !isAuthRequired) { + next() + } else if (token) { + axios.defaults.headers['Authorization'] = `Bearer ${ token }` + try { + const response = await axios.get('/user') + store.commit("auth/setUser", response.data.user) + if (from.path === "/login") { + next() + } + next({ path: from.path }) + } catch (e) { + localStorage.removeItem('user-token') + next('/login') + } + } else { + next('/login') + } + } else if (isUserLogged && !isAuthRequired) { + next({ path: from.path }) + } else { + next () + } + + document.title = to.meta.title || '' +}) + +export default router diff --git a/src/admin/router/routes.js b/src/admin/router/routes.js new file mode 100644 index 0000000..18e651a --- /dev/null +++ b/src/admin/router/routes.js @@ -0,0 +1,66 @@ +import About from '../components/About/About' +import Reviews from '../components/Reviews/Reviews' +import Works from '../components/Works/Works' +import Login from '../components/Login' +import Navigation from '../components/Navigation' +import Header from '../components/Header' + +export default [ + { + path: '/', + name: 'about', + components: { + default: About, + nav: Navigation, + header: Header + }, + meta: + { + title: "Блок «Обо мне»", + auth: true + } + }, + { + path: '/reviews', + name: 'reviews', + components: { + default: Reviews, + nav: Navigation, + header: Header + }, + meta: + { + title: "Блок «Отзывы»", + auth: true + } + }, + { + path: '/works', + name: 'works', + components: { + default: Works, + nav: Navigation, + header: Header + }, + meta: + { + title: "Блок «Работы»", + auth: true + } + }, + { + path: '/login', + name: 'login', + component: Login, + meta: { + auth: false + } + }, + { + path: '*', + redirect: '/', + meta: { + auth: true + } + } +] \ No newline at end of file diff --git a/src/admin/routes.js b/src/admin/routes.js deleted file mode 100644 index 69400fb..0000000 --- a/src/admin/routes.js +++ /dev/null @@ -1,51 +0,0 @@ -import VueRouter from 'vue-router' -import About from './components/About/About' -import Reviews from './components/Reviews/Reviews' -import Works from './components/Works/Works' -import Login from './components/Login' - -const routes = [ - { - path: '/', - name: 'about', - component: About, - meta: - { - title: "Блок «Обо мне»" - } - }, - { - path: '/reviews', - component: Reviews, - meta: - { - title: "Блок «Работы»" - } - }, - { - path: '/works', - component: Works, - meta: - { - title: "Блок «Отзывы»" - } - }, - { - path: '/login', - component: Login - }, - { - path: '*', - redirect: 'about' - } -] - -const router = new VueRouter({ - routes -}) - -router.afterEach((to, from) => { - document.title = to.meta.title || '' -}) - -export default router diff --git a/src/admin/store/index.js b/src/admin/store/index.js new file mode 100644 index 0000000..c5450a1 --- /dev/null +++ b/src/admin/store/index.js @@ -0,0 +1,18 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import auth from './modules/auth' +import works from './modules/works' +import reviews from './modules/reviews' +import categories from './modules/categories' +import toast from './modules/toast' +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + auth, + works, + toast, + reviews, + categories + } +}) \ No newline at end of file diff --git a/src/admin/store/modules/auth.js b/src/admin/store/modules/auth.js new file mode 100644 index 0000000..a10082f --- /dev/null +++ b/src/admin/store/modules/auth.js @@ -0,0 +1,29 @@ +import axios from '../../customAxios' + +export default { + namespaced: true, + + state: { + user: {} + }, + + getters: { + isLogged (state) { + return Boolean(state.user instanceof Object && Object.keys(state.user).length) + } + }, + + mutations: { + setUser (state, user) { + state.user = user + } + }, + + actions: { + async logoutUser ({ commit }) { + await axios.post('/logout') + commit('setUser', {}) + localStorage.removeItem('user-token') + } + } +} \ No newline at end of file diff --git a/src/admin/store/modules/categories.js b/src/admin/store/modules/categories.js new file mode 100644 index 0000000..7fb4659 --- /dev/null +++ b/src/admin/store/modules/categories.js @@ -0,0 +1,144 @@ +import axios from '../../customAxios' +import generateError from '../../utils/generateError' + +export default { + namespaced: true, + + state: { + categories: [] + }, + + mutations: { + setCategories (state, categories) { + state.categories = categories + }, + + addCategory (state, categories) { + state.categories = [categories, ...state.categories] + }, + + editCategory (state, category) { + state.categories = state.categories.map(item => item.id === category.id ? category : item) + }, + + removeCategory (state, categoryId) { + state.categories = state.categories.filter(category => category.id !== categoryId) + }, + + addSkill (state, skill) { + state.categories = state.categories.map(category => { + if (category.id === skill.category) { + const skills = category.skills || [] + category.skills = [...skills, skill] + } + + return category + }) + }, + + editSkill (state, skill) { + const category = state.categories.find(category => category.id === skill.category) + if (category) { + const skills = category.skills + category.skills = skills.map(el => el.id === skill.id ? skill : el) + } + }, + + removeSkill (state, skill) { + const category = state.categories.find(category => category.id === skill.category) + if (category) { + const skills = category.skills + category.skills = skills.filter(el => el.id !== skill.id) + } + } + }, + + actions: { + async loadCategories ({ commit }, userId) { + try { + const { data } = await axios.get(`/categories/${userId}`) + commit('setCategories', data) + } catch (error) { + generateError(error) + } + }, + + async saveCategory ({ commit }, title) { + try { + const { data } = await axios.post('/categories', { title }) + commit('addCategory', data) + commit('toast/showToast', + { type: 'success', message: 'Категория успешно добавлена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async updateCategory ({ commit }, category) { + try { + const { data } = await axios.post(`/categories/${category.id}`, { title: category.category }) + commit('editCategory', data.category) + commit('toast/showToast', + { type: 'success', message: 'Категория успешно обновлена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async deleteCategory ({ commit }, categoryId) { + try { + await axios.delete(`/categories/${categoryId}`) + commit('removeCategory', categoryId) + commit('toast/showToast', + { type: 'success', message: 'Категория успешно удалена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async saveSkill ({ commit }, skill) { + try { + const { data } = await axios.post('/skills', skill); + commit('addSkill', data); + commit('toast/showToast', + { type: 'success', message: 'Скилл успешно добавлен' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async updateSkill ({ commit }, skill) { + try { + const { data } = await axios.post(`/skills/${ skill.id }`, skill); + commit('editSkill', data.skill); + commit('toast/showToast', + { type: 'success', message: 'Скилл успешно обновлен' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async deleteSkill ({ commit }, skill) { + try { + await axios.delete(`/skills/${ skill.id }`); + commit('removeSkill', skill); + commit('toast/showToast', + { type: 'success', message: 'Скилл успешно удален' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + } + } +} \ No newline at end of file diff --git a/src/admin/store/modules/reviews.js b/src/admin/store/modules/reviews.js new file mode 100644 index 0000000..972aaf1 --- /dev/null +++ b/src/admin/store/modules/reviews.js @@ -0,0 +1,98 @@ +import axios from '../../customAxios' +import formData from '../../utils/formData' +import generateError from '../../utils/generateError' + +export default { + namespaced: true, + + state: { + reviews: [] + }, + + getters: { + modifiedReviews (state) { + return state.reviews.map(review => { + if (!review.photo.includes('https://webdev-api.loftschool.com/')) { + review.photo = `https://webdev-api.loftschool.com/${review.photo}` + } + return review + }) + } + }, + + mutations: { + setReviews (state, reviews) { + state.reviews = reviews + }, + + addReview (state, reviews) { + state.reviews = [...state.reviews, reviews] + }, + + editReview (state, review) { + state.reviews = state.reviews.map(item => item.id === review.id ? review : item) + }, + + removeReview (state, reviewId) { + state.reviews = state.reviews.filter(review => review.id !== reviewId) + } + }, + + actions: { + async loadReviews ({ commit }, userId) { + try { + const { data } = await axios.get(`/reviews/${userId}`) + commit('setReviews', data) + } catch (error) { + generateError(error) + } + }, + + async saveReview ({ commit }, review) { + try { + const { data } = await axios.post( + '/reivews', + formData(review), + { headers: { 'Content-Type': 'multipart/form-data' } } + ) + commit('addReview', data) + commit('toast/showToast', + { type: 'success', message: 'Отзыв успешно добавлен' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async updateReview ({ commit }, review) { + try { + const { data } = await axios.post( + `/reviews/${review.id}`, + formData(review), + { headers: { 'Content-Type': 'multipart/form-data' } } + ) + commit('editReview', data.review) + commit('toast/showToast', + { type: 'success', message: 'Отзыв успешно обновлен' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async deleteReview ({ commit }, reviewId) { + try { + await axios.delete(`/reviews/${reviewId}`) + commit('removeReview', reviewId) + commit('toast/showToast', + { type: 'success', message: 'Отзыв успешно удален' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + } + } +} \ No newline at end of file diff --git a/src/admin/store/modules/toast.js b/src/admin/store/modules/toast.js new file mode 100644 index 0000000..8a0a8e3 --- /dev/null +++ b/src/admin/store/modules/toast.js @@ -0,0 +1,24 @@ +export default { + namespaced: true, + state: { + showed: false, + message: 'Сообщение успешно отправленно', + type: 'success' + }, + mutations: { + setVisibility (state, value) { + state.showed = value + }, + setMessage (state, message) { + state.message = message + }, + setType (state, type) { + state.type = type + }, + showToast (state, { type, message }) { + state.showed = true + state.message = message + state.type = type + } + } +} \ No newline at end of file diff --git a/src/admin/store/modules/works.js b/src/admin/store/modules/works.js new file mode 100644 index 0000000..e6b1258 --- /dev/null +++ b/src/admin/store/modules/works.js @@ -0,0 +1,97 @@ +import axios from '../../customAxios' +import formData from '../../utils/formData' + +export default { + namespaced: true, + + state: { + works: [] + }, + + getters: { + modifiedWorks (state) { + return state.works.map(work => { + if (!work.photo.includes('https://webdev-api.loftschool.com/')) { + work.photo = `https://webdev-api.loftschool.com/${work.photo}` + } + return work + }) + } + }, + + mutations: { + setWorks (state, works) { + state.works = works + }, + + addWork (state, work) { + state.works = [...state.works, work] + }, + + editWork (state, work) { + state.works = state.works.map(item => item.id === work.id ? work : item) + }, + + removeWork (state, workId) { + state.works = state.works.filter(work => work.id !== workId) + } + }, + + actions: { + async loadWorks ({ commit }, userId) { + try { + const { data } = await axios.get(`/works/${userId}`) + commit('setWorks', data) + } catch (error) { + generateError(error) + } + }, + + async saveWork ({ commit }, work) { + try { + const { data } = await axios.post( + '/works', + formData(work), + { headers: { 'Content-Type': 'multipart/form-data' } } + ) + commit('addWork', data) + commit('toast/showToast', + { type: 'success', message: 'Работа успешно добавлена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async updateWork ({ commit }, work) { + try { + const { data } = await axios.post( + `/works/${work.id}`, + formData(work), + { headers: { 'Content-Type': 'multipart/form-data' } } + ) + commit('editWork', data.work) + commit('toast/showToast', + { type: 'success', message: 'Работа успешно обновлена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + }, + + async deleteWork ({ commit }, workId) { + try { + await axios.delete(`/works/${workId}`) + commit('removeWork', workId) + commit('toast/showToast', + { type: 'success', message: 'Работа успешно удалена' }, + { root: true } + ) + } catch (error) { + generateError(error) + } + } + } +} \ No newline at end of file diff --git a/src/admin/utils/formData.js b/src/admin/utils/formData.js new file mode 100644 index 0000000..f6a43f6 --- /dev/null +++ b/src/admin/utils/formData.js @@ -0,0 +1,9 @@ +export default (data) => { + const formData = new FormData() + + Object.keys(data).forEach(key => { + formData.append(key, data[key]) + }) + + return formData +} \ No newline at end of file diff --git a/src/admin/utils/generateError.js b/src/admin/utils/generateError.js new file mode 100644 index 0000000..1df9440 --- /dev/null +++ b/src/admin/utils/generateError.js @@ -0,0 +1,23 @@ +export default (error) => { + const errorResponseObject = error.response.data; + + if (errorResponseObject.message) { + switch (errorResponseObject.message) { + case "The given data was invalid.": + throw new Error("Ошибка валидации данных на сервере"); + default: + throw new Error(errorResponseObject.message); + } + } + + if (errorResponseObject.error) { + switch (errorResponseObject.error) { + case "token_not_provided": + throw new Error("Токен авторизации не предоставлен"); + case "token_expired": + throw new Error("Токен авторизации просрочен"); + default: + throw new Error(errorResponseObject.error); + } + } +}; \ No newline at end of file diff --git a/src/components/skills/skills-row.pug b/src/components/skills/skills-row.pug index 3c5eb14..2ea6d91 100644 --- a/src/components/skills/skills-row.pug +++ b/src/components/skills/skills-row.pug @@ -2,7 +2,7 @@ include ./skill script(type="text/x-template" id="skills-row") .skills-row - h3.skills-row__title {{skillGroup.title}} + h3.skills-row__title {{skillGroup.category}} ul.skills-row__list li.skills-row__item( v-for="skill in skillGroup.skills" diff --git a/src/components/works/works-slider-data.pug b/src/components/works/works-slider-data.pug index 772bb86..1c1cca8 100644 --- a/src/components/works/works-slider-data.pug +++ b/src/components/works/works-slider-data.pug @@ -7,6 +7,6 @@ script(type="text/x-template" id="slider-data") ) .works-slider__title {{currentWork.title}} .works-slider__desc - p {{currentWork.desc}} + p {{currentWork.description}} .works-slider__link a.custom-link(:href="currentWork.link") Посмотреть сайт \ No newline at end of file diff --git a/src/components/works/works-slider-images.pug b/src/components/works/works-slider-images.pug index 812bff7..5904bfa 100644 --- a/src/components/works/works-slider-images.pug +++ b/src/components/works/works-slider-images.pug @@ -4,7 +4,7 @@ include ./works-slider-btns script(type="text/x-template" id="slider-images") .works-slider__images(:data-slide="currentImageIndex") .works-slider__images-wrap - img(:src="currentWork.image").works-slider__image + img(:src="currentWork.photo").works-slider__image div sliderPreviews( :works="reversedWorks" diff --git a/src/components/works/works-slider-previews.pug b/src/components/works/works-slider-previews.pug index 3ad0cbf..72eaab4 100644 --- a/src/components/works/works-slider-previews.pug +++ b/src/components/works/works-slider-previews.pug @@ -10,4 +10,4 @@ script(type="text/x-template" id="slider-previews") button( type="button" ).works-slider__preview-btn - img(:src="work.image").works-slider__preview-img \ No newline at end of file + img(:src="work.photo").works-slider__preview-img \ No newline at end of file diff --git a/src/scripts/request.js b/src/scripts/request.js new file mode 100644 index 0000000..0a6573f --- /dev/null +++ b/src/scripts/request.js @@ -0,0 +1,11 @@ +import axios from 'axios'; + +axios.defaults.baseURL = 'https://webdev-api.loftschool.com/'; + +export default function (method, url) { + return axios({ + method: method, + url: url + }) + .then(({ data }) => data) +} \ No newline at end of file diff --git a/src/scripts/reviews.js b/src/scripts/reviews.js index 145b8cc..4d62fbd 100644 --- a/src/scripts/reviews.js +++ b/src/scripts/reviews.js @@ -1,12 +1,13 @@ -import Vue from "vue"; -import { Carousel, Slide } from 'vue-carousel'; +import Vue from 'vue' +import request from './request' +import { Carousel, Slide } from 'vue-carousel' const review = { template: "#review", props: { review: Object } -}; +} new Vue({ el: "#reviews-component", @@ -21,67 +22,29 @@ new Vue({ return { prevBtnDisable: true, nextBtnDisable: false, - reviews: [ - { - id: 1, - text: "Этот парень проходил обучение веб-разработке не где-то, а в Loftschool! 4,5 месяца только самых тяжелых испытаний и бессонных ночей!", - author: "Ковальчук Дмитрий", - occ: "Основатель Loftschool", - photo: "user.jpg" - }, - { - id: 2, - text: "Этот код выдержит любые испытания. Только пожалуйста, не загружайте сайт на слишком старых браузерах", - author: "Владимир Сабанцев", - occ: "Преподаватель Loftschool", - "photo": "user2.jpg" - }, - { - id: 3, - text: "Таким образом, постоянный количественный рост и сфера нашей активности напрямую зависит от форм воздействия.", - author: "Иванов Иван", - occ: "Заказчик сайта", - photo: "user.jpg" - }, - { - id: 4, - text: "С другой стороны рамки и место обучения кадров требует от нас системного анализа направлений прогрессивного развития.", - author: "Петров Петр", - occ: "Редактор журнала", - photo: "user2.jpg" - }, - { - id: 5, - text: "Равным образом повышение уровня гражданского сознания представляет собой интересный эксперимент проверки форм воздействия.", - author: "Карпов Василий", - occ: "Директор курорта", - photo: "user.jpg" - }, - ] + reviews: [] } }, - created() { - this.reviews = this.makeArrWithRequireImages(this.reviews) + mounted() { + request('get', 'reviews/320') + .then(reviews => { + return reviews.map(review => { + return (review.photo = 'https://webdev-api.loftschool.com/' + review.photo) && review + }) + }) + .then(reviews => this.reviews = reviews) }, methods: { slide(direction) { if (direction === 'next') { - this.$refs.carousel.goToPage(this.$refs.carousel.getNextPage()); + this.$refs.carousel.goToPage(this.$refs.carousel.getNextPage()) } else { - this.$refs.carousel.goToPage(this.$refs.carousel.getPreviousPage()); + this.$refs.carousel.goToPage(this.$refs.carousel.getPreviousPage()) } this.updateBtns() }, - - makeArrWithRequireImages(array) { - return array.map((item) => { - const requirePic = require(`../images/userfiles/${item.photo}`); - item.photo = requirePic; - return item; - }); - }, updateBtns () { this.nextBtnDisable = !this.$refs.carousel.canAdvanceForward diff --git a/src/scripts/skills.js b/src/scripts/skills.js index 474ab6c..24ab877 100644 --- a/src/scripts/skills.js +++ b/src/scripts/skills.js @@ -1,4 +1,5 @@ -import Vue from "vue"; +import Vue from 'vue' +import request from './request' const skill = { template: "#skill", @@ -43,60 +44,12 @@ new Vue({ data() { return { - skillGroups: [ - { - "id": 1, - "title": "Frontend", - "skills": [ - { - "id": 1, - "title": "HTML5", - "percent": 30 - }, - { - "id": 2, - "title": "CSS3", - "percent": 50 - }, - { - "id": 3, - "title": "JavaScript", - "percent": 25 - }, - { - "id": 4, - "title": "VueJs", - "percent": 30 - } - ] - }, - { - "id": 2, - "title": "Workflow", - "skills": [ - { - "id": 1, - "title": "GIT", - "percent": 45 - }, - { - "id": 2, - "title": "Terminal", - "percent": 60 - }, - { - "id": 3, - "title": "Gulp", - "percent": 30 - }, - { - "id": 4, - "title": "Webpack", - "percent": 75 - } - ] - } - ] + skillGroups: [] } + }, + + mounted() { + request('get', 'categories/320') + .then(skillGroups => this.skillGroups = skillGroups) } }) \ No newline at end of file diff --git a/src/scripts/works.js b/src/scripts/works.js index 8a56b6b..fd9735e 100644 --- a/src/scripts/works.js +++ b/src/scripts/works.js @@ -1,4 +1,5 @@ -import Vue from "vue"; +import Vue from "vue" +import request from './request' const sliderBtns = { template: "#slider-btns", @@ -14,7 +15,7 @@ const sliderBtns = { return (this.currentIndex + 1) === this.worksCount } } -}; +} const sliderPreviews = { template: "#slider-previews", @@ -22,7 +23,7 @@ const sliderPreviews = { works: Array, currentWork: Object } -}; +} const sliderImages = { template: "#slider-images", @@ -44,14 +45,14 @@ const sliderImages = { return this.currentIndex + 1 } } -}; +} const sliderTags = { template: "#slider-tags", props: { tags: Array } -}; +} const sliderData = { template: "#slider-data", @@ -64,10 +65,14 @@ const sliderData = { computed: { tagsArray () { - return this.currentWork.skills.split(", "); + if (this.currentWork.techs) { + return this.currentWork.techs.split(',').map(tag =>tag.trim()) + } + + return [] } } -}; +} new Vue({ el: "#works-component", @@ -80,71 +85,33 @@ new Vue({ data() { return { currentIndex: 0, - works: [ - { - "id": 1, - "title": "Сайт об экстримальном отдыхе", - "skills": "Html, Css, JavaScript", - "image": "1.jpg", - "link": "//google.com", - "desc": "Этот парень проходил обучение веб-разработке не где-то, а в LoftSchool! 2 месяца только самых тяжелых испытаний и бессонных ночей!" - }, - { - "id": 2, - "title": "Сайт небольшого города", - "skills": "Pug, PostCss, VueJS", - "image": "2.jpg", - "link": "//yandex.ru", - "desc": "Повседневная практика показывает, что постоянный количественный рост и сфера нашей активности требует от нас анализа форм воздействия. " - }, - { - "id": 3, - "title": "Сайт автомобильного журнала", - "skills": "Laravel, Saas, React", - "image": "3.jpg", - "link": "//rambler.ru", - "desc": "Дорогие друзья, повышение уровня гражданского сознания играет важную роль в формировании существующих финансовых и административных условий." - }, - { - "id": 4, - "title": "Сайт уютного дома на озере", - "skills": "Php, Less, Angular", - "image": "4.jpg", - "link": "//mail.ru", - "desc": "Равным образом повышение уровня гражданского сознания требует от нас системного анализа существующих финансовых и административных условий?" - }, - { - "id": 5, - "title": "Сайт школы онлайн образования", - "skills": "Html, Css, JQuery", - "image": "5.jpg", - "link": "//lenta.ru", - "desc": "Задача организации, в особенности же консультация с профессионалами из IT играет важную роль в формировании соответствующих условий..." - } - ] + works: [] } }, computed: { currentWork () { // return this.works[this.currentIndex] - return this.works[0] + if (this.works.length) { + return this.works[0] + } + + return {} } }, - created() { - this.works = this.makeArrWithRequireImages(this.works) + mounted() { + request('get', 'works/320') + .then(works => { + return works.map(work => { + work.photo = 'https://webdev-api.loftschool.com/' + work.photo + return work + }) + }) + .then(works => this.works = works) }, methods: { - makeArrWithRequireImages(array) { - return array.map((item) => { - const requirePic = require(`../images/content/works/${item.image}`); - item.image = requirePic; - return item; - }); - }, - changeSlide (direction) { // this.currentIndex = direction === "next" // ? this.currentIndex + 1 diff --git a/src/styles/blocks/custom-btn.pcss b/src/styles/blocks/custom-btn.pcss index 468db38..6ad8a43 100644 --- a/src/styles/blocks/custom-btn.pcss +++ b/src/styles/blocks/custom-btn.pcss @@ -6,6 +6,7 @@ font-size: 18px; font-weight: 700; padding: 30px 120px; + transition: .5s background ease-in; &:hover { background: linear-gradient(to right, #bb00ff 0%, #5900ff 100%); diff --git a/src/styles/blocks/form.pcss b/src/styles/blocks/form.pcss index 3badc59..5959877 100644 --- a/src/styles/blocks/form.pcss +++ b/src/styles/blocks/form.pcss @@ -29,6 +29,7 @@ margin-right: 90px; border-bottom: 2px solid currentColor; position: relative; + transition: .3s border-bottom ease-in; &:hover, &:focus, @@ -99,6 +100,7 @@ fill: currentColor; opacity: .3; margin-right: 15px; + transition: .3s fill ease-in; } .form__block-field { diff --git a/src/styles/blocks/ham-menu.pcss b/src/styles/blocks/ham-menu.pcss index 2bfacdd..10714a4 100644 --- a/src/styles/blocks/ham-menu.pcss +++ b/src/styles/blocks/ham-menu.pcss @@ -16,6 +16,7 @@ width: 24px; display: block; fill: $font; + transition: .3s fill ease-in; } .ham-menu__btn { @@ -62,4 +63,5 @@ fill: $font; width: 20px; height: 20px; + transition: .3s fill ease-in; } \ No newline at end of file diff --git a/src/styles/blocks/header.pcss b/src/styles/blocks/header.pcss index 4c29175..8cd9e98 100644 --- a/src/styles/blocks/header.pcss +++ b/src/styles/blocks/header.pcss @@ -20,7 +20,7 @@ top: 0; z-index: 5; width: 325px; - transition: .5s right; + transition: .5s right ease-in; @include tablets { display: block; diff --git a/src/styles/blocks/logo.pcss b/src/styles/blocks/logo.pcss index 0a1e4d3..b69ac5e 100644 --- a/src/styles/blocks/logo.pcss +++ b/src/styles/blocks/logo.pcss @@ -1,4 +1,9 @@ .logo { font-size: 36px; font-weight: 800; + + &:hover { + color: $main; + transition: all .3s ease-in; + } } \ No newline at end of file diff --git a/src/styles/blocks/nav.pcss b/src/styles/blocks/nav.pcss index f077965..f6c3e8a 100644 --- a/src/styles/blocks/nav.pcss +++ b/src/styles/blocks/nav.pcss @@ -39,6 +39,7 @@ font-size: 18px; font-weight: 600; + &:last-child { margin-bottom: 0; } @@ -60,6 +61,7 @@ justify-content: center; align-items: center; white-space: nowrap; + transition: font-weight .1s; } .nav__list { diff --git a/src/styles/blocks/scroll-down.pcss b/src/styles/blocks/scroll-down.pcss index dbab9d3..97bfa79 100644 --- a/src/styles/blocks/scroll-down.pcss +++ b/src/styles/blocks/scroll-down.pcss @@ -13,4 +13,14 @@ margin-left: 20px; display: inline-block; } + + &:hover { + font-weight: 700; + color: $main; + transition: all .3s ease-in; + &:after { + transition: background .3s ease-in; + background: svg-load('scroll.svg', fill=$main, width=100%, height=100%) center center no-repeat; + } + } } \ No newline at end of file diff --git a/src/styles/blocks/slider-btn.pcss b/src/styles/blocks/slider-btn.pcss index b07621f..293ae02 100644 --- a/src/styles/blocks/slider-btn.pcss +++ b/src/styles/blocks/slider-btn.pcss @@ -4,6 +4,7 @@ background: #353e4e; padding: 0; border: none; + transition: background .3s ease-in; &:disabled { cursor: unset; diff --git a/src/styles/blocks/slider-btns.pcss b/src/styles/blocks/slider-btns.pcss index ecbfd15..dd756cd 100644 --- a/src/styles/blocks/slider-btns.pcss +++ b/src/styles/blocks/slider-btns.pcss @@ -6,6 +6,7 @@ border-radius: 50%; background: transparent; border: 1px solid #353e4e; + transition: background .3s ease-in; &:enabled { &:hover { diff --git a/src/styles/blocks/social.pcss b/src/styles/blocks/social.pcss index 1d9090b..f8797d4 100644 --- a/src/styles/blocks/social.pcss +++ b/src/styles/blocks/social.pcss @@ -19,6 +19,7 @@ border: 1px solid #fff; border-radius: 50%; opacity: .3; + transition: border .3s ease-in; &:hover { border-color: #ff9a00; @@ -72,4 +73,5 @@ height: 25px; display: block; fill: currentColor; + transition: fill .3s ease-in; } \ No newline at end of file diff --git a/src/styles/blocks/works-slider.pcss b/src/styles/blocks/works-slider.pcss index 7290854..c64e6fc 100644 --- a/src/styles/blocks/works-slider.pcss +++ b/src/styles/blocks/works-slider.pcss @@ -231,6 +231,7 @@ &:after { outline: 3px solid #dc9322; background-color: rgba(85, 0, 242, 0.3); + transition: all .3s ease-in; /* @include desktop { outline: none; diff --git a/webpack.config.js b/webpack.config.js index fd6b50b..301d82e 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -86,7 +86,7 @@ module.exports = (env, argv) => { const config = { entry: { main: "./src/main.js", - admin: "./src/admin/main.js" + admin: ["babel-polyfill", "./src/admin/main.js"] }, output: { path: path.resolve(__dirname, "./dist"), diff --git a/yarn.lock b/yarn.lock index 0c6338f..209374c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -748,6 +748,57 @@ resolved "https://registry.yarnpkg.com/@csstools/sass-import-resolve/-/sass-import-resolve-1.0.0.tgz#32c3cdb2f7af3cd8f0dca357b592e7271f3831b5" integrity sha512-pH4KCsbtBLLe7eqUrw8brcuFO8IZlN36JjdKlOublibVdAIPHCzEnpBWOVUXK5sCf+DpBi8ZtuWtjF0srybdeA== +"@cypress/listr-verbose-renderer@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/request@2.88.5": + version "2.88.5" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" + integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +"@cypress/xvfb@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + integrity sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg== + dependencies: + any-observable "^0.3.0" + "@types/babel-types@*", "@types/babel-types@^7.0.0": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" @@ -789,6 +840,16 @@ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/sinonjs__fake-timers@6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e" + integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== + +"@types/sizzle@2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" + integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== + "@vue/component-compiler-utils@^3.1.0": version "3.1.2" resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" @@ -1034,6 +1095,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -1066,6 +1132,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1079,6 +1150,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arch@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1184,6 +1260,11 @@ async@^2.6.2: dependencies: lodash "^4.17.14" +async@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1217,6 +1298,13 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== +axios@^0.19.2: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-loader@^8.0.5: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -1235,6 +1323,15 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -1315,7 +1412,7 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5: +bluebird@3.7.2, bluebird@^3.1.1, bluebird@^3.5.0, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1462,6 +1559,11 @@ browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.8.5: node-releases "^1.1.53" pkg-up "^2.0.0" +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1537,6 +1639,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1611,7 +1718,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -1629,6 +1736,11 @@ character-parser@^2.1.1: dependencies: is-regex "^1.0.3" +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -1660,6 +1772,11 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -1685,6 +1802,38 @@ clean-css@4.2.x, clean-css@^4.1.11: dependencies: source-map "~0.6.0" +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1786,6 +1935,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1798,6 +1952,11 @@ commander@2.17.x: resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +commander@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" + integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== + commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -1808,6 +1967,11 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +common-tags@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1848,7 +2012,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -1944,7 +2108,7 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" -core-js@^2.4.0: +core-js@^2.4.0, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -2189,6 +2353,49 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +cypress@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-4.6.0.tgz#ac76786500580df1347a0a50be63e5c59ffbef59" + integrity sha512-vIPXAceRP+Nxvnm/O9ruY9EQaRGmVVybtk9F1sfC9mH3067YbitrdBTynaaLuHFj90p9e0U2ZCV7OkX4x4V/Wg== + dependencies: + "@cypress/listr-verbose-renderer" "0.4.1" + "@cypress/request" "2.88.5" + "@cypress/xvfb" "1.2.4" + "@types/sinonjs__fake-timers" "6.0.1" + "@types/sizzle" "2.3.2" + arch "2.1.1" + bluebird "3.7.2" + cachedir "2.3.0" + chalk "2.4.2" + check-more-types "2.24.0" + cli-table3 "0.5.1" + commander "4.1.0" + common-tags "1.8.0" + debug "4.1.1" + eventemitter2 "4.1.2" + execa "1.0.0" + executable "4.1.1" + extract-zip "1.7.0" + fs-extra "8.1.0" + getos "3.1.4" + is-ci "2.0.0" + is-installed-globally "0.1.0" + lazy-ass "1.6.0" + listr "0.14.3" + lodash "4.17.15" + log-symbols "3.0.0" + minimist "1.2.5" + moment "2.24.0" + ospath "1.2.2" + pretty-bytes "5.3.0" + ramda "0.26.1" + request-progress "3.0.0" + supports-color "7.1.0" + tmp "0.1.0" + untildify "4.0.0" + url "0.11.0" + yauzl "2.10.0" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -2196,32 +2403,44 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.0, debug@^4.1.1: +debug@4.1.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" +debug@=3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + decamelize@^1.0.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2487,6 +2706,11 @@ electron-to-chromium@^1.3.413: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.431.tgz#705dd8ef46200415ba837b31d927cdc1e43db303" integrity sha512-2okqkXCIda7qDwjYhUFxPcQdZDIZZ/zBLDzVOif7WW/TSNfEhdT6SO07O1x/sFteEHX189Z//UwjbZKKCOn2Fg== +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + elliptic@^6.0.0, elliptic@^6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" @@ -2645,6 +2869,11 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eventemitter2@4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-4.1.2.tgz#0e1a8477af821a6ef3995b311bf74c23a5247f15" + integrity sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU= + eventemitter3@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" @@ -2675,7 +2904,7 @@ exact-regex@^1.0.3: resolved "https://registry.yarnpkg.com/exact-regex/-/exact-regex-1.0.3.tgz#e2bc9b964acfe2b55e456d6f3597cca4bafda021" integrity sha1-4ryblkrP4rVeRW1vNZfMpLr9oCE= -execa@^1.0.0: +execa@1.0.0, execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== @@ -2688,6 +2917,18 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2778,6 +3019,16 @@ extglob@^2.0.2, extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -2812,11 +3063,26 @@ faye-websocket@~0.11.1: dependencies: websocket-driver ">=0.5.1" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -2906,6 +3172,13 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" @@ -2962,6 +3235,15 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-extra@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3017,6 +3299,13 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +getos@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.4.tgz#29cdf240ed10a70c049add7b6f8cb08c81876faf" + integrity sha512-UORPzguEB/7UG5hqiZai8f0vQ7hzynMQyJLxStoQ8dPGAcmgsfXOPA4iE/fGtweHYkK+z4zc9V0g+CIFRf5HYw== + dependencies: + async "^3.1.0" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3044,6 +3333,13 @@ glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -3104,7 +3400,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -3144,6 +3440,11 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" @@ -3447,6 +3748,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -3581,6 +3887,13 @@ is-callable@^1.1.4, is-callable@^1.1.5: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== +is-ci@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-color-stop@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" @@ -3686,6 +3999,14 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-installed-globally@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3698,6 +4019,13 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -3710,6 +4038,13 @@ is-path-in-cwd@^2.0.0: dependencies: is-path-inside "^2.1.0" +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-path-inside@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" @@ -3729,7 +4064,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-promise@^2.0.0: +is-promise@^2.0.0, is-promise@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== @@ -3894,6 +4229,13 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -3949,6 +4291,11 @@ last-call-webpack-plugin@^3.0.0: lodash "^4.17.5" webpack-sources "^1.1.0" +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -3973,6 +4320,50 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -4042,16 +4433,44 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: +lodash@4.17.15, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + loglevel@^1.6.6: version "1.6.8" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" @@ -4271,6 +4690,11 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009" integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w== +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mimic-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -4309,7 +4733,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@1.2.5, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -4343,13 +4767,18 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" +moment@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -4632,6 +5061,18 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + opn@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" @@ -4668,6 +5109,11 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" +ospath@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + overwrite-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/overwrite-object/-/overwrite-object-1.0.5.tgz#10b1837bba2f49032334a748dd6140fc9d658904" @@ -4814,7 +5260,7 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= @@ -4845,12 +5291,17 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -5464,6 +5915,11 @@ prettier@^1.18.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +pretty-bytes@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" + integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== + pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -5750,6 +6206,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +ramda@0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5837,6 +6298,11 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -5931,6 +6397,13 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +request-progress@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= + dependencies: + throttleit "^1.0.0" + request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -6009,6 +6482,22 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: dependencies: path-parse "^1.0.6" +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -6058,6 +6547,13 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rxjs@^6.3.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" + integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6231,7 +6727,7 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -6257,6 +6753,11 @@ slashes@^1.0.5: resolved "https://registry.yarnpkg.com/slashes/-/slashes-1.0.5.tgz#204798f6c632014d609b5d89b6a57a7aaf70828d" integrity sha1-IEeY9sYyAU1gm12JtqV6eq9wgo0= +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -6589,6 +7090,13 @@ supports-color@6.1.0, supports-color@^6.1.0: dependencies: has-flag "^3.0.0" +supports-color@7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6703,6 +7211,11 @@ svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -6732,6 +7245,11 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -6762,6 +7280,13 @@ tiny-emitter@2.0.2: resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -6955,6 +7480,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -6973,6 +7503,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +untildify@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -7015,7 +7550,7 @@ url-slug@2.0.0: dependencies: unidecode "0.1.8" -url@^0.11.0: +url@0.11.0, url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -7128,7 +7663,7 @@ vue-hot-reload-api@^2.3.0: resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== -vue-loader@^15.6.4: +vue-loader@^15.9.2: version "15.9.2" resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.2.tgz#ae01f5f4c9c6a04bff4483912e72ef91a402c1ae" integrity sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA== @@ -7139,10 +7674,10 @@ vue-loader@^15.6.4: vue-hot-reload-api "^2.3.0" vue-style-loader "^4.1.0" -vue-router@^3.0.2: - version "3.1.6" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.1.6.tgz#45f5a3a3843e31702c061dd829393554e4328f89" - integrity sha512-GYhn2ynaZlysZMkFE5oCHRUTqE8BWs/a9YbKpNLi0i7xD6KG1EzDqpHQmv1F5gXjr8kL5iIVS8EOtRaVUEXTqA== +vue-router@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.2.0.tgz#da35195ffe37fdf0bec9f5f8f72781d2a7718815" + integrity sha512-khkrcUIzMcI1rDcNtqkvLwfRFzB97GmJEsPAQdj7t/VvpGhmXLOkUfhc+Ah8CvpSXGXwuWuQO+x8Sy/xDhXZIA== vue-style-loader@^4.1.0: version "4.1.2" @@ -7152,7 +7687,7 @@ vue-style-loader@^4.1.0: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.6.7: +vue-template-compiler@^2.6.11: version "2.6.11" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== @@ -7165,7 +7700,7 @@ vue-template-es2015-compiler@^1.9.0: resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== -vue@^2.5.17, vue@^2.6.7: +vue@^2.5.17, vue@^2.6.11: version "2.6.11" resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== @@ -7175,6 +7710,11 @@ vuelidate@^0.7.5: resolved "https://registry.yarnpkg.com/vuelidate/-/vuelidate-0.7.5.tgz#ff48c75ae9d24ea24c24e9ea08065eda0a0cba0a" integrity sha512-GAAG8QAFVp7BFeQlNaThpTbimq3+HypBPNwdkCkHZZeVaD5zmXXfhp357dcUJXHXTZjSln0PvP6wiwLZXkFTwg== +vuex@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.4.0.tgz#20cc086062d750769fce1febb34e7fceeaebde45" + integrity sha512-ajtqwEW/QhnrBZQsZxCLHThZZaa+Db45c92Asf46ZDXu6uHXgbfVuBaJ4gzD2r4UX0oMJHstFwd2r2HM4l8umg== + watchpack@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2" @@ -7362,6 +7902,14 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -7463,3 +8011,11 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yauzl@2.10.0, yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0"