diff --git a/.gitignore b/.gitignore index 2b25e21..a6a329c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,11 @@ **/node_modules -**/config.json +config.json +.DS_Store *.iml *.swp dist -.DS_Store \ No newline at end of file +cypress/screenshots +cypress/videos +cache +.npm +.DS_Store diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6588d02..94caa36 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,13 +1,56 @@ -image: node:11 - +# workflow stages: + - build + - test - integration - acceptance - release - deployment +# default image for jobs +default: + image: node:11 + +# cache modules between jobs +cache: + key: ${CI_COMMIT_REF_SLUG} + paths: + - .npm/ + +## BUILD ## + +build: + stage: build + before_script: + - npm ci --cache .npm --prefer-offline --only=production + script: + - cp config.sample.json config.json + - npm run build + artifacts: + when: on_success + expire_in: 1 day + paths: + - dist/ + tags: + - test + ## TESTING ## +test:e2e: + stage: test + image: cypress/included:4.5.0 + services: + - name: ${CI_REGISTRY_IMAGE}/server:0.1 + before_script: + # install missing dependencies + - npm install -g sirv-cli + # making sure the process is orphan + - sirv dist --port 3000 > /dev/null 2>&1 & + script: + - cypress run -e CYPRESS_baseUrl=http://localhost:3000 + tags: + - test + ## VALIDATION ## test1: diff --git a/README.md b/README.md index 990726f..6cbf8f0 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,34 @@ On `config.json`: } ``` +## Use with docker + +### Multi services + +Run with a local binding on localhost: + +```bash +docker-compose build +docker-compose up -d client server +``` + +Use in CI context: + +```bash +docker-compose -f docker-compose.yml build +docker-compose -f docker-compose.yml up -d client server +docker-compose -f docker-compose.yml run --rm e2e +``` + +Build and push the server to registry: + +```bash +docker build -f docker/djangoldp.docker --build-arg serve="http://localhost:8000" -t registry.startinblox.com/applications/hubl/server:0.1 . +docker push registry.startinblox.com/applications/hubl/server:0.1 +``` + +Note: within a Kubernetes pod all services are bound to `localhost`. + ## Built With * [Sib-Core](https://git.startinblox.com/framework/sib-core/) - An awesome new framework! diff --git a/client.sample.css b/client.sample.css new file mode 100644 index 0000000..f18502d --- /dev/null +++ b/client.sample.css @@ -0,0 +1,10 @@ +:root { + --color-primary: #FF6765; + --color-secondary: #46271B; + --color-complementary: #5BB4CE; + --color-complementary-darken: #35A0C0; + + --color-black-s: 45%; + --color-black-h: 16; + --color-black-l: 6%; +} diff --git a/client.sample.happy-dev.css b/client.sample.happy-dev.css new file mode 100644 index 0000000..11cf69a --- /dev/null +++ b/client.sample.happy-dev.css @@ -0,0 +1,176 @@ +:root { + --color-primary: #FFB700; + --color-secondary: #3C3F57; + --color-complementary: #6259E5; + --color-complementary-darken: #36383B; + --color-white: #FFFFFF; + + --color-black-h: 216; + --color-black-s: 4%; + --color-black-l: 22%; + + --color-main-background: var(--color-grey-13); + --color-main-text: #7A7F85; + --color-highlight-primary: var(--color-primary); + --color-user-panel: var(--color-black); + --color-bell: var(--color-secondary); + --color-avatar-background: #E4E8ED; + --color-title: #36383B; + --color-h1: var(--color-title); + --color-h2: var(--color-title); + + /* Header's elements */ + --color-header-background: var(--color-white); + --color-bell: var(--color-complementary-darken); + --color-user-panel-header-text: var(--color-complementary-darken); + --color-user-panel-header-background: var(--color-white); + --color-user-panel-header-text-open: var(--color-white); + --color-user-panel-header-background-open: var(--color-secondary); + --color-user-panel-list-background: var(--color-white); + --color-user-panel-list-text-hover: var(--color-complementary); + --color-user-panel-list-border: #E4E8ED; + + /* Left menu */ + --color-menu-highlight-primary: #FFD759; + --color-menu-background: var(--color-secondary); + --color-menu-text: var(--color-white); + --color-menu-text-active: var(--color-secondary); + --color-menu-background-active: var(--color-menu-highlight-primary); + --color-menu-badge-background: var(--color-menu-highlight-primary); + --color-menu-badge-text-active: var(--color-menu-highlight-primary); + --color-menu-badge-background-active: var(--color-secondary); + --color-menu-icon-background-active: var(--color-secondary); + + /* Right menu */ + --color-right-menu-background: #DAE2F3; + --color-right-menu-text: var(--color-secondary); + --color-right-menu-link-border: #BDC2D7; + --color-right-menu-active-text: var(--color-primary); + --color-right-menu-active-background: var(--color-secondary); + --color-right-menu-active-icon: var(--color-primary); + + /* Scrollbar */ + --color-scrollbar-right-background: var(--color-white); + --color-scrollbar-right-track: var(--color-grey-6); + --color-scrollbar-left-background: var(--color-secondary); + --color-scrollbar-left-track: var(--color-grey-11); + + /* Tags */ + --color-tag-admin-text: var(--color-complementary); + --color-tag-admin-border: var(--color-complementary); + --color-tag-group-text: #9BA0A7; + --color-tag-group-border: var(--color-primary); + + /* Form elements */ + --color-button-white: var(--color-white); + --color-button-primary: var(--color-primary); + --color-button-secondary: var(--color-complementary); + --color-button-complementary: var(--color-secondary); + + --color-input-background: #EDF1FA; + --color-input-text: var(--color-secondary); + --color-input-icon: var(--color-complementary); + --color-input-active: var(--color-complementary); + --color-fieldset: var(--color-title); + --color-fieldset-border: #DAE2F3; + --color-button-modal: var(--color-title); + --color-select-list: var(--color-secondary); + --color-select-add-button: var(--color-button-secondary); + --color-select-add-button-background: var(--color-button-white); + + --color-label-dark: var(--color-complementary); + --color-label-light: var(--color-grey-6); + + /* Skill */ + --color-skill-background: var(--color-primary); + --color-skill-text: var(--color-white); + + /* Icon */ + --color-icon: var(--color-primary); + + /* Table */ + --color-table-header-background: #BDC2D7; + --color-table-header-text: var(--color-white); + --color-table-border: #BDC2D7; + + /* User thumb */ + --color-user-thumb-name: #7A7F85; + + --color-backlink: var(--color-secondary); + --color-content-header: #DAE2F3; + + /* Chat */ + --color-chat-white: var(--color-white); + --color-chat-primary: var(--color-primary); + --color-chat-complementary: var(--color-complementary); + --color-chat-secondary: var(--color-secondary); + --color-chat-complementary-darken: var(--color-complementary-darken); + --color-chat-grey-1: var(--color-grey-4); + --color-chat-grey-2: var(--color-grey-6); + --color-chat-grey-3: var(--color-grey-10); +} + +/* Button to edit a channel or a project (in project-profile) */ +#project sib-link[next="project-edit"], +#circle sib-link[next="circle-edit"] { + background: var(--color-complementary); + border: 1px solid var(--color-complementary); +} + +#project sib-link[next="project-edit"]:hover, +#circle sib-link[next="circle-edit"]:hover { + background: var(--color-white); + border: 1px solid var(--color-complementary); + color: var(--color-complementary); +} + +/* Button to delete a channel */ +#circle-profile>div>div.box-button>sib-ac-checker>sib-delete { + background: var(--color-white); + border: 1px solid var(--color-complementary); + color: var(--color-complementary); +} + +#circle-profile>div>div.box-button>sib-ac-checker>sib-delete>button { + color: var(--color-complementary); +} + +#circle-profile>div>div.box-button>sib-ac-checker>sib-delete:hover { + background: var(--color-complementary); + border: 1px solid var(--color-complementary); + color: var(--color-white); +} + +#circle-profile>div>div.box-button>sib-ac-checker>sib-delete:hover>button { + color: var(--color-white); +} + +/* Button with a pen to edit a user */ +#admin-users-list>div>div.table>sib-display>div>sib-display>div>sib-action-hd-custom>sib-ac-checker>sib-link { + background: var(--color-complementary); + border: 1px solid var(--color-complementary); + color: var(--color-white); +} + +#admin-users-list>div>div.table>sib-display>div>sib-display>div>sib-action-hd-custom>sib-ac-checker>sib-link:hover { + background: var(--color-white); + border: 1px solid var(--color-complementary); + color: var(--color-complementary); +} + +/* Button to join a channel */ +#admin-circle-list>div>div.table>sib-display:nth-child(5)>div>sib-display>div>admin-circle-join-button>sib-form { + background: var(--color-complementary); + border: 1px solid var(--color-complementary); + color: var(--color-white); +} + +#admin-circle-list>div>div.table>sib-display:nth-child(5)>div>sib-display>div>admin-circle-join-button>sib-form:hover { + background: var(--color-white); + border: 1px solid var(--color-complementary); + color: var(--color-complementary); +} + +#admin-circle-list>div>div.table>sib-display:nth-child(5)>div>sib-display>div>admin-circle-join-button>sib-form:hover input { + color: var(--color-complementary); +} diff --git a/config.sample.json b/config.sample.json index fa65e10..47b7bf1 100644 --- a/config.sample.json +++ b/config.sample.json @@ -3,8 +3,8 @@ "authority": "http://localhost:8000/", "authorityName": "djangoldp-server-name", "endpoints": { + "groups": "http://localhost:8000/groups/", "skills": "http://localhost:8000/skills/", - "users": "http://localhost:8000/users/", - "groups": "http://localhost:8000/groups/" + "users": "http://localhost:8000/users/" } } diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000..2f9683b --- /dev/null +++ b/cypress.json @@ -0,0 +1,7 @@ +{ + "baseUrl": "http://127.0.0.1:3000", + "defaultCommandTimeout": 60000, + "chromeWebSecurity": false, + "viewportWidth": 1920, + "viewportHeight": 1080 +} diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000..da18d93 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} \ No newline at end of file diff --git a/cypress/integration/tests.spec.js b/cypress/integration/tests.spec.js new file mode 100644 index 0000000..cee47af --- /dev/null +++ b/cypress/integration/tests.spec.js @@ -0,0 +1,108 @@ +/// + + +context('Browser testing', () => { + before(() => { + cy.clearLocalStorage({ domain: null}); + cy.clearCookies({ domain: null }); + }); + it('visit the homepage', () => { + cy.visit('/'); + }); + it('should await for an user login', () => { + cy.location().should((loc) => { + expect(loc.pathname).to.eq('/auth/login/'); + }); + }); + describe('Login process', () => { + it('should write "admin" on username field and "password" on password field', () => { + cy.get('#id_username').type('admin'); + cy.get('#id_username').should('have.value', 'admin'); + cy.get('#id_password').type('password'); + cy.get('#id_password').should('have.value', 'password'); + }); + it('should click on login button', () => { + cy.get(':nth-child(1) > .flex-column > [type="submit"]').click(); + }); + it('should provide an error, username and password mismatch.', () => { + cy.get('.error').should('contain.text', 'Ton nom d\'utilisateur et ton mot de passe ne correspondent pas. Réessaye.') + }); + it('should write "admin" on password field then press the login button', () => { + cy.get('#id_password').type('admin'); + cy.get('#id_password').should('have.value', 'admin'); + cy.get(':nth-child(1) > .flex-column > [type="submit"]').click(); + }); + it('should ask for user permission to access their datas.', () => { + cy.location().should((loc) => { + expect(loc.pathname).to.eq('/authorize') + }); + cy.get('.accept-button').click(); + }); +// it('should redirect the user to the app.', () => { +// cy.get('.accept-button').click(); +// cy.location().should((loc) => { +// expect(loc.protocol + "//" + loc.host).to.eq(Cypress.config().baseUrl); +// expect(loc.pathname).to.eq('/'); +// }); +// }); +// }); +// describe('Main interface', () => { +// // it('should show my name on top right', () => { +// // cy.get('sib-display-value').contains('Admin'); +// // }); +// it('should show my username on the left menu', () => { +// cy.get('[fields="username, badge"][data-src="http://localhost:8000/users/admin/"] > :nth-child(1) > sib-display-div > div').contains('admin'); +// }); +// it('should open a chat with myself', () => { +// cy.get('[fields="username, badge"][data-src="http://localhost:8000/users/admin/"] > :nth-child(1) > sib-display-div > div').click(); +// cy.get('.name').contains('admin'); +// }); +// it('should not work, because I have no Prosody configured', () => { +// cy.get('.content-box > .chat-view > sib-chat').should('be.empty'); +// }); +// describe('Circles', () => { +// it('should navigate the Administration from left menu', () => { +// cy.get('.create > sib-link').click(); +// cy.get('#admin-circles > .content-box > .content-box__header > .without-margin').contains('Administration'); +// cy.get('#admin-circle-list > .content-box__info > .admin-header > .admin-header__title').contains('Circles'); +// }); +// it('should navigate to Circle creation', () => { +// cy.get('#admin-circle-list > .content-box__info > .admin-header > .button').click(); +// cy.location().should((loc) => { +// expect(loc.pathname).to.contain('admin-circle-create'); +// }); +// }); +// var name = new Uint32Array(1); +// crypto.getRandomValues(name); +// name = "Test Circle " + name; +// it('should allow Circle Creation', () => { +// cy.get('form > sib-form-label-text[name="name"] > label > input').type(name); +// cy.get('.content-box__info > sib-form > form > sib-form-label-text[name="description"] > label > input').type('With a great description!'); +// cy.get('#admin-circle-create > .content-box__info > sib-form > form > [type="submit"]').click(); +// cy.get('#admin-circle-list > div > div.table > sib-display').contains(name); +// }); +// it('should open the circle information page', () => { +// cy.screenshot(); +// cy.get('#navbar-router').contains(name).click(); +// cy.get('[name="circle-information"] > li').click(); +// }); +// it('should delete the circle', () => { +// cy.get('.box-button > sib-ac-checker > .button').click(); +// cy.get('#navbar-router').should('not.contain', name); +// }); +// }); +// }); +// describe('Logout process', () => { +// it('should properly log out the user', () => { +// cy.get('#user-controls__profile > div').click(); +// cy.get('#user-controls__panel > nav > button').click(); +// // Dirty fix for logout, targeting logout button is not enough. +// cy.clearLocalStorage({ domain: null }); +// cy.clearCookies({ domain: null }); +// cy.location().should((loc) => { +// expect(loc.pathname).to.eq('/auth/login/'); +// }); +// }); + }); + }); + diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 0000000..382b693 --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,20 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) + +/** + * @type {Cypress.PluginConfig} + */ +module.exports = (on, config) => { +// require('cypress-terminal-report').installPlugin(on); +}; diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 0000000..ca4d256 --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add("login", (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/cypress/support/index.js b/cypress/support/index.js new file mode 100644 index 0000000..92fa6f5 --- /dev/null +++ b/cypress/support/index.js @@ -0,0 +1,30 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +//require('cypress-terminal-report').installSupport(); + +// Alternatively you can use CommonJS syntax: +// require('./commands') +Cypress.on('uncaught:exception', (err, runnable) => { + // returning false here prevents Cypress from + // failing the test + console.log('Cypress detected uncaught exception', err); + return false; +}); + +Cypress.on('fail', () => Cypress.runner.abort()) diff --git a/docker/config.json b/docker/config.json new file mode 100644 index 0000000..4000c0e --- /dev/null +++ b/docker/config.json @@ -0,0 +1,18 @@ +{ + "xmpp": "https://jabber.happy-dev.fr/http-bind/", + "authority": "$SERVER", + "authorityName": "djangoldp-server-name", + "endpoints": { + "get": { + "circles": "$SERVER/circles/", + "groups": "$SERVER/groups/", + "users": "$SERVER/users/" + }, + "post": { + "circles": "$SERVER/circles/", + "groups": "$SERVER/groups/", + "users": "$SERVER/users/" + } + }, + "analytics": [] +} diff --git a/docker/djangoldp.docker b/docker/djangoldp.docker new file mode 100644 index 0000000..ebf4cb7 --- /dev/null +++ b/docker/djangoldp.docker @@ -0,0 +1,26 @@ +FROM python:3.6 +LABEL maintainer="Plup " + +# get server address +ARG serve + +# fix bug in manager install +ENV PATH="/root/.local/bin:${PATH}" + +# install a LDP server with required functions +WORKDIR /app +RUN pip install git+https://git.startinblox.com/djangoldp-packages/server-manager.git +RUN sib startproject sibserver +COPY docker/packages.yml /app/sibserver/ +RUN sed -i 's#SERVER#'"${serve:-http://localhost:8000}"'#' /app/sibserver/packages.yml +RUN cd /app/sibserver && sib install server + +# fix invalid HTTP_HOST +RUN sed -i 's/ALLOWED_HOSTS\s=\s\[\]/ALLOWED_HOSTS=\["\*"\]/' /app/sibserver/server/settings.py + +# run the dev server +EXPOSE 8000 +ENTRYPOINT ["python", "/app/sibserver/manage.py"] +CMD ["runserver", "0.0.0.0:8000"] + +# vim: ft=dockerfile: diff --git a/docker/docker-compose.override.yml b/docker/docker-compose.override.yml new file mode 100644 index 0000000..228acf6 --- /dev/null +++ b/docker/docker-compose.override.yml @@ -0,0 +1,15 @@ +--- +version: '3' + +services: + + front: + environment: + - SERVER=http://127.0.0.1 + ports: + - 80:80 + + server: + build: + args: + serve: http://127.0.0.1 diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..8ddadad --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,39 @@ +--- +version: '3' + +services: + + front: + build: + context: ../ + dockerfile: docker/front.docker + environment: + - SERVER=http://server.org:8000 + networks: + - web + + server: + build: + context: ../ + dockerfile: docker/djangoldp.docker + args: + serve: http://server.org:8000 + networks: + web: + aliases: + - server.org + db: + + e2e: + image: cypress/included:4.3.0 + environment: + - CYPRESS_baseUrl=https://front + volumes: + - ../cypress:/cypress + - ../cypress.json:/cypress.json + networks: + - web + +networks: + web: + db: diff --git a/docker/front.docker b/docker/front.docker new file mode 100644 index 0000000..f338cee --- /dev/null +++ b/docker/front.docker @@ -0,0 +1,37 @@ +FROM node:12 AS builder +LABEL maintainer="Plup " + +# install dependencies +WORKDIR /build +ADD package.json package-lock.json ./ +ADD src/ src/ +RUN npm install --only=production + +# build the app +ADD docker/config.json . +RUN npm run build + +# change index to template +RUN mv /build/dist/index.html /build/dist/index.tpl + +# generate a self signed certificate +RUN openssl req -x509 -newkey rsa:4096 -keyout /tmp/key.pem -out /tmp/cert.pem -days 365 -nodes -subj '/CN=localhost' + +# serve +FROM nginx:latest +COPY --from=builder /build/dist /var/www +COPY --from=builder /tmp/*.pem /etc/nginx/ +WORKDIR /var/www + +# get specific config +COPY docker/nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 443 + +# get server address +ENV SERVER http://localhost:8000 + +# replace addresses at runtime +CMD /bin/bash -c "envsubst '\$SERVER' < index.tpl > index.html && \ + exec nginx -g 'daemon off;'" + +# vim: ft=dockerfile: diff --git a/docker/nginx.conf b/docker/nginx.conf new file mode 100644 index 0000000..57cc324 --- /dev/null +++ b/docker/nginx.conf @@ -0,0 +1,9 @@ +server { + listen 443 ssl default_server; + root /var/www/; + + ssl_certificate /etc/nginx/cert.pem; + ssl_certificate_key /etc/nginx/key.pem; + + try_files $uri $uri/ index.html =404; +} diff --git a/docker/packages.yml b/docker/packages.yml new file mode 100644 index 0000000..8015db5 --- /dev/null +++ b/docker/packages.yml @@ -0,0 +1,27 @@ +ldppackages: + djangoldp_dashboard: djangoldp_dashboard + djangoldp_account: djangoldp_account + djangoldp_circle: djangoldp_circle + djangoldp_notification: djangoldp_notification + djangoldp_profile: djangoldp_profile + djangoldp_project: djangoldp_project + oidc_provider: 'git+https://github.com/jblemee/django-oidc-provider.git@develop' + +server: + site_url: SERVER + allowed_hosts: + - '*' + db_host: database + db_name: postgres + db_user: postgres + db_pass: postgres + smtp_host: + smtp_user: + smtp_pass: + admin_email: test@startinblox.com + admin_name: admin + admin_pass: admin + xmpp_url: https://jabber.happy-dev.fr + jabber_host: 'none' + default_client: SERVER + registration_open: True diff --git a/package-lock.json b/package-lock.json index e053852..f19ba14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,21 +36,22 @@ } }, "@babel/core": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz", - "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", + "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.4", - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/generator": "^7.9.0", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.0", + "@babel/parser": "^7.9.0", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -73,24 +74,24 @@ } }, "@babel/generator": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz", - "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.5.tgz", + "integrity": "sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ==", "requires": { - "@babel/types": "^7.8.3", + "@babel/types": "^7.9.5", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", "requires": { "@babel/helper-get-function-arity": "^7.8.3", "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/types": "^7.9.5" } }, "@babel/helper-get-function-arity": { @@ -101,6 +102,64 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz", + "integrity": "sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==", + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, "@babel/helper-split-export-declaration": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", @@ -109,52 +168,57 @@ "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", + "version": "7.9.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.2.tgz", + "integrity": "sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==", "requires": { "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" + "@babel/traverse": "^7.9.0", + "@babel/types": "^7.9.0" } }, "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz", - "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==" + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", + "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==" }, "@babel/template": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz", - "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.3", - "@babel/types": "^7.8.3" + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/traverse": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz", - "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.5.tgz", + "integrity": "sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ==", "requires": { "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.4", - "@babel/helper-function-name": "^7.8.3", + "@babel/generator": "^7.9.5", + "@babel/helper-function-name": "^7.9.5", "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.4", - "@babel/types": "^7.8.3", + "@babel/parser": "^7.9.0", + "@babel/types": "^7.9.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -176,15 +240,118 @@ } }, "@babel/types": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz", - "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.5.tgz", + "integrity": "sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, + "@cypress/listr-verbose-renderer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", + "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "@cypress/request": { + "version": "2.88.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.5.tgz", + "integrity": "sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA==", + "dev": true, + "requires": { + "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": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", + "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, "@types/babel-types": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", @@ -198,6 +365,89 @@ "@types/babel-types": "*" } }, + "@types/blob-util": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/blob-util/-/blob-util-1.3.3.tgz", + "integrity": "sha512-4ahcL/QDnpjWA2Qs16ZMQif7HjGP2cw3AGjHabybjw7Vm1EKu+cfQN1D78BaZbS1WJNa1opSMF5HNMztx7lR0w==", + "dev": true + }, + "@types/bluebird": { + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.29.tgz", + "integrity": "sha512-kmVtnxTuUuhCET669irqQmPAez4KFnFVKvpleVRyfC3g+SHD1hIkFZcWLim9BVcwUBLO59o8VZE4yGCmTif8Yw==", + "dev": true + }, + "@types/chai": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.7.tgz", + "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==", + "dev": true + }, + "@types/chai-jquery": { + "version": "1.1.40", + "resolved": "https://registry.npmjs.org/@types/chai-jquery/-/chai-jquery-1.1.40.tgz", + "integrity": "sha512-mCNEZ3GKP7T7kftKeIs7QmfZZQM7hslGSpYzKbOlR2a2HCFf9ph4nlMRA9UnuOETeOQYJVhJQK7MwGqNZVyUtQ==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/jquery": "*" + } + }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "@types/jquery": { + "version": "3.3.31", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.3.31.tgz", + "integrity": "sha512-Lz4BAJihoFw5nRzKvg4nawXPzutkv7wmfQ5121avptaSIXlDNJCUuxZxX/G+9EVidZGuO0UBlk+YjKbwRKJigg==", + "dev": true, + "requires": { + "@types/sizzle": "*" + } + }, + "@types/lodash": { + "version": "4.14.149", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.149.tgz", + "integrity": "sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/sinon": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.1.tgz", + "integrity": "sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ==", + "dev": true + }, + "@types/sinon-chai": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.3.tgz", + "integrity": "sha512-TOUFS6vqS0PVL1I8NGVSNcFaNJtFoyZPXZ5zur+qlhDfOmQECZZM4H4kKgca6O8L+QceX/ymODZASfUfn+y4yQ==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sizzle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.2.tgz", + "integrity": "sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -233,21 +483,14 @@ } }, "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "dependencies": { - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - } } }, "align-text": { @@ -275,6 +518,12 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -288,6 +537,12 @@ "color-convert": "^1.9.0" } }, + "any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -314,6 +569,12 @@ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -376,6 +637,12 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "optional": true }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", @@ -531,6 +798,12 @@ "inherits": "~2.0.0" } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -569,6 +842,18 @@ } } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -591,6 +876,12 @@ "unset-value": "^1.0.0" } }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -637,6 +928,12 @@ "is-regex": "^1.0.3" } }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA=", + "dev": true + }, "chokidar": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", @@ -657,6 +954,12 @@ "upath": "^1.1.1" } }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -695,6 +998,69 @@ } } }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + } + }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -733,6 +1099,13 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -746,6 +1119,12 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -779,6 +1158,18 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", @@ -979,6 +1370,166 @@ "array-find-index": "^1.0.1" } }, + "cypress": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-4.5.0.tgz", + "integrity": "sha512-2A4g5FW5d2fHzq8HKUGAMVTnW6P8nlWYQALiCoGN4bqBLvgwhYM/oG9oKc2CS6LnvgHFiKivKzpm9sfk3uU3zQ==", + "dev": true, + "requires": { + "@cypress/listr-verbose-renderer": "0.4.1", + "@cypress/request": "2.88.5", + "@cypress/xvfb": "1.2.4", + "@types/blob-util": "1.3.3", + "@types/bluebird": "3.5.29", + "@types/chai": "4.2.7", + "@types/chai-jquery": "1.1.40", + "@types/jquery": "3.3.31", + "@types/lodash": "4.14.149", + "@types/minimatch": "3.0.3", + "@types/mocha": "5.2.7", + "@types/sinon": "7.5.1", + "@types/sinon-chai": "3.2.3", + "@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" + }, + "dependencies": { + "commander": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.0.tgz", + "integrity": "sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cypress-terminal-report": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-1.2.1.tgz", + "integrity": "sha512-Kmtdw3h+eJo5OxDRD0OvrV8tZu3vj9T2BM1uGcoVtNFjH7zT5RIAaM0mQp00+Wp3heFVtcuBNIxx7fxm8TNtiw==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "methods": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -987,6 +1538,12 @@ "assert-plus": "^1.0.0" } }, + "date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1094,6 +1651,12 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, + "elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", + "dev": true + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -1104,6 +1667,15 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1170,6 +1742,57 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "eventemitter2": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", + "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -1296,15 +1919,68 @@ } } }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } }, "file-uri-to-path": { "version": "1.0.0", @@ -1393,6 +2069,25 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + } + } + }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", @@ -1947,12 +2642,30 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "optional": true }, + "getos": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.1.4.tgz", + "integrity": "sha512-UORPzguEB/7UG5hqiZai8f0vQ7hzynMQyJLxStoQ8dPGAcmgsfXOPA4iE/fGtweHYkK+z4zc9V0g+CIFRf5HYw==", + "dev": true, + "requires": { + "async": "^3.1.0" + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -1995,18 +2708,27 @@ } } }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.0.tgz", - "integrity": "sha512-YlD4kdMqRCQHrhVdonet4TdRtv1/sZKepvoxNT4Nrhrp5HI8XFfc8kFlGlBn2myBo80aGp8Eft259mbcUJhgSg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "~4.17.12", "minimatch": "~3.0.2" } }, @@ -2126,9 +2848,9 @@ } }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" }, "include-media": { "version": "1.4.9", @@ -2157,6 +2879,12 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", @@ -2206,6 +2934,15 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -2279,12 +3016,9 @@ "optional": true }, "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -2303,6 +3037,16 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2323,6 +3067,24 @@ } } }, + "is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2345,6 +3107,12 @@ "has": "^1.0.3" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -2391,9 +3159,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" }, "js-stringify": { "version": "1.0.2", @@ -2436,20 +3204,29 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -2476,6 +3253,12 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "optional": true }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha1-eZllXoZGwX8In90YfRUNMyTVRRM=", + "dev": true + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -2489,6 +3272,138 @@ "invert-kv": "^1.0.0" } }, + "listr": { + "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, + "requires": { + "@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" + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", + "dev": true + }, + "listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", + "dev": true, + "requires": { + "chalk": "^1.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "dependencies": { + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + } + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -2522,6 +3437,103 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -2609,12 +3621,18 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" } } }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -2654,6 +3672,12 @@ "mime-db": "1.43.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -2696,6 +3720,12 @@ "minimist": "0.0.8" } }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2762,9 +3792,9 @@ } }, "node-sass": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", - "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz", + "integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==", "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -2959,6 +3989,15 @@ } } }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -3076,6 +4115,12 @@ "wrappy": "1" } }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3103,6 +4148,18 @@ "os-tmpdir": "^1.0.0" } }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, "p-limit": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", @@ -3119,6 +4176,12 @@ "p-limit": "^2.0.0" } }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -3162,6 +4225,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -3182,6 +4251,12 @@ "pinkie-promise": "^2.0.0" } }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -3216,6 +4291,12 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "optional": true }, + "pretty-bytes": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", + "dev": true + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -3235,9 +4316,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pug": { "version": "2.0.4", @@ -3388,6 +4469,16 @@ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3417,6 +4508,18 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "ramda": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", + "dev": true + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -3516,9 +4619,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -3527,7 +4630,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -3537,11 +4640,20 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -3566,6 +4678,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "optional": true }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -3588,6 +4710,15 @@ "glob": "^7.1.3" } }, + "rxjs": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3737,15 +4868,21 @@ "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4025,6 +5162,12 @@ "is-utf8": "^0.2.0" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", @@ -4041,6 +5184,12 @@ "has-flag": "^3.0.0" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, "tar": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", @@ -4051,6 +5200,12 @@ "inherits": "2" } }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "dev": true + }, "through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -4060,6 +5215,15 @@ "xtend": "~4.0.1" } }, + "tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "requires": { + "rimraf": "^2.6.3" + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -4113,19 +5277,12 @@ "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "trim-newlines": { @@ -4141,6 +5298,12 @@ "glob": "^7.1.2" } }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -4154,6 +5317,12 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", @@ -4210,6 +5379,12 @@ "set-value": "^2.0.1" } }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -4255,6 +5430,12 @@ } } }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -4275,6 +5456,24 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "optional": true }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -4435,6 +5634,16 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" } } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index a1b4ce7..76a9d72 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,11 @@ "watch": "run-p copy:* watch:* serve", "watch:css": "npm run build:css && npm run build:css -- -w", "watch:js": "babel --watch \"src/scripts/*.js\" -o dist/scripts/index.js", - "watch:pug": "pug --watch src/index.pug -o dist/ --obj config.json" + "watch:pug": "pug --watch src/index.pug -o dist/ --obj config.json", + "cypress:open": "cypress open", + "cypress:verify": "cypress verify", + "cypress:info": "cypress info", + "test": "cypress run" }, "release": { "branches": [ @@ -50,14 +54,18 @@ }, "dependencies": { "@babel/cli": "^7.7.0", - "@babel/core": "^7.7.0", + "@babel/core": "^7.9.0", "copyfiles": "^2.1.1", "include-media": "^1.4.9", - "node-sass": "^4.13.0", + "node-sass": "^4.14.0", "normalize.css": "^8.0.1", "npm-run-all": "^4.1.5", "pug": "^2.0.4", "pug-cli": "^1.0.0-alpha6", "pushstate-server": "^3.1.0" + }, + "devDependencies": { + "cypress": "^4.5.0", + "cypress-terminal-report": "^1.2.1" } } diff --git a/src/styles/abstracts/_mixins.scss b/src/styles/abstracts/_mixins.scss index 3ff49c7..be27ec1 100644 --- a/src/styles/abstracts/_mixins.scss +++ b/src/styles/abstracts/_mixins.scss @@ -1,4 +1,4 @@ -@mixin window-style-modal($background: $color-0-0-100, $shadow: hsla(212, 7%, 55%, 0.19)) { +@mixin window-style-modal($background: var(--color-white), $shadow: hsla(212, 7%, 55%, 0.19)) { box-shadow: 0 0 8px 0 $shadow; background-color: $background; } diff --git a/src/styles/abstracts/_variables.scss b/src/styles/abstracts/_variables.scss index a4715a7..e974acd 100644 --- a/src/styles/abstracts/_variables.scss +++ b/src/styles/abstracts/_variables.scss @@ -1,32 +1,127 @@ // Color Variables -$color-43-100-50: hsl(43, 100%, 50%); -$color-45-95-54: hsl(45, 95%, 54%); -$color-46-100-67: hsl(46, 100%, 67%); -$color-46-100-50: hsl(46, 100%, 50%); -$color-0-0-100: hsl(0, 0%, 100%); -$color-218-100-98: hsl(218, 100%, 98%); -$color-210-17-91: hsl(210, 17%, 91%); -$color-222-52-90: hsl(222, 52%, 90%); -$color-210-25-95: hsl(210, 25%, 95%); -$color-222-57-95: hsl(222, 57%, 95%); -$color-213-20-91: hsl(213, 20%, 91%); -$color-221-51-90: hsl(221, 51%, 90%); -$color-228-25-79: hsl(228, 25%, 79%); -$color-0-0-85: hsl(0, 0%, 85%); -$color-229-25-79: hsl(229, 25%, 79%); -$color-215-9-73: hsl(215, 9%, 73%); -$color-244-10-70: hsl(244, 10%, 70%); -$color-215-6-63: hsl(215, 6%, 63%); -$color-210-5-56: hsl(210, 5%, 56%); -$color-210-4-50: hsl(210, 4%, 50%); +:root { + --color-primary: #FF6765; + --color-secondary: #46271B; + --color-complementary: #5BB4CE; + --color-complementary-darken: #35A0C0; + + --color-white: hsl(0, 0%, 100%); + + --color-black-h: 16; + --color-black-s: 45%; + --color-black-l: 6%; + --color-black: hsl(var(--color-black-h), var(--color-black-s), var(--color-black-l)); /* 180D09 */ + + /* Fifty shades of greys */ + --color-grey-1: hsl(calc(var(--color-black-h) + 200), calc(var(--color-black-s) - 41%), calc(var(--color-black-l) + 16%)); /*hsl(216, 4%, 22%); #36383B */ + --color-grey-2: hsl(calc(var(--color-black-h) + 217), calc(var(--color-black-s) - 27%), calc(var(--color-black-l) + 23%)); /*hsl(233, 18%, 29%); #3C3F57 */ + --color-grey-3: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 45%), calc(var(--color-black-l) + 23%)); /*hsl(0, 0%, 29%); #4A4A4A */ + --color-grey-4: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 43%), calc(var(--color-black-l) + 43%)); /*hsl(0, 2%, 49%); #807A7A */ + --color-grey-5: hsl(calc(var(--color-black-h) + 197), calc(var(--color-black-s) - 41%), calc(var(--color-black-l) + 44%)); /*hsl(213, 4%, 50%); #7A7F85 */ + --color-grey-6: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 41%), calc(var(--color-black-l) + 57%)); /*hsl(0, 4%, 63%); #A59D9D */ + --color-grey-7: hsl(calc(var(--color-black-h) + 228), calc(var(--color-black-s) + 35%), calc(var(--color-black-l) + 64%)); /*hsl(244, 10%, 70%); #ABAABA */ + --color-grey-8: hsl(calc(var(--color-black-h) + 212), calc(var(--color-black-s) - 20%), calc(var(--color-black-l) + 73%)); /*hsl(228, 25%, 79%); #BDC2D7 */ + --color-grey-9: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 36%), calc(var(--color-black-l) + 76%)); /*hsl(0, 9%, 82%); #D6CECE */ + --color-grey-10: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 42%), calc(var(--color-black-l) + 87%)); /*hsl(0, 3%, 93%); #EEEDED */ + --color-grey-11: hsl(calc(var(--color-black-h) + 197), calc(var(--color-black-s) - 32%), calc(var(--color-black-l) + 80%)); /*hsl(213, 13%, 86%); #D7DBE0 */ + --color-grey-12: hsl(calc(var(--color-black-h) + 197), calc(var(--color-black-s) - 25%), calc(var(--color-black-l) + 85%)); /*hsl(213, 20%, 91%); #E4E8ED */ + --color-grey-13: hsl(calc(var(--color-black-h) - 16), calc(var(--color-black-s) - 45%), calc(var(--color-black-l) + 90%)); /*hsl(0, 0%, 96%); #F4F4F4 */ + + + /* CUSTOM COLORS FOR CLIENT */ + --color-main-background: var(--color-grey-13); + --color-main-text: var(--color-grey-4); + --color-highlight-primary: var(--color-primary); + --color-user-panel: var(--color-black); + --color-bell: var(--color-secondary); + --color-avatar-background: var(--color-grey-11); + --color-title: var(--color-secondary); + --color-h1: var(--color-secondary); + --color-h2: var(--color-secondary); + + /* Header's elements */ + --color-header-background: var(--color-white); + --color-bell: var(--color-secondary); + --color-user-panel-header-text: var(--color-secondary); + --color-user-panel-header-background: var(--color-white); + --color-user-panel-header-text-open: var(--color-white); + --color-user-panel-header-background-open: var(--color-secondary); + --color-user-panel-list-background: var(--color-white); + --color-user-panel-list-text-hover: var(--color-primary); + --color-user-panel-list-border: var(--color-grey-12); + + /* Left menu */ + --color-menu-highlight-primary: var(--color-highlight-primary); + --color-menu-background: var(--color-secondary); + --color-menu-text: var(--color-white); + --color-menu-text-active: var(--color-white); + --color-menu-background-active: var(--color-menu-highlight-primary); + --color-menu-badge-background: var(--color-secondary); + --color-menu-badge-text-active: var(--color-menu-text-active); + --color-menu-badge-background-active: var(--color-complementary); + --color-menu-icon-background-active: var(--color-secondary); + + /* Right menu */ + --color-right-menu-background: var(--color-grey-10); + --color-right-menu-text: var(--color-secondary); + --color-right-menu-link-border: var(--color-grey-9); + --color-right-menu-active-text: var(--color-white); + --color-right-menu-active-background: var(--color-secondary); + --color-right-menu-active-icon: var(--color-white); + + /* Scrollbar */ + --color-scrollbar-right-background: var(--color-white); + --color-scrollbar-right-track: var(--color-grey-9); + --color-scrollbar-left-background: var(--color-secondary); + --color-scrollbar-left-track: var(--color-grey-11); + + /* tags */ + --color-tag-admin-text: var(--color-complementary); + --color-tag-admin-border: var(--color-complementary); + --color-tag-group-text: var(--color-primary); + --color-tag-group-border: var(--color-primary); + + /* Form elements */ + --color-button-white: var(--color-white); + --color-button-primary: var(--color-primary); + --color-button-secondary: var(--color-secondary); + --color-button-complementary: var(--color-complementary); + + --color-input-background: var(--color-grey-10); + --color-input-text: var(--color-secondary); + --color-input-icon: var(--color-secondary); + --color-input-active: var(--color-secondary); + --color-fieldset: var(--color-title); + --color-fieldset-border: var(--color-grey-10); + --color-button-modal: var(--color-title); + --color-select-list: var(--color-secondary); + --color-select-add-button: var(--color-button-secondary); + --color-select-add-button-background: var(--color-button-white); + + --color-label-dark: var(--color-secondary); + --color-label-light: var(--color-grey-6); + + /* skill */ + --color-skill-background: var(--color-primary); + --color-skill-text: var(--color-white); + + /* icon */ + --color-icon: var(--color-complementary); + + /* Table */ + --color-table-header-background: var(--color-grey-6); + --color-table-header-text: var(--color-white); + --color-table-border: var(--color-grey-8); + + /* User thumb */ + --color-user-thumb-name: var(--color-grey-4); + + --color-backlink: var(--color-secondary); + --color-content-header: var(--color-grey-9); +} + +/* Variables for event */ $color-212-4-50: hsl(212.7,4.3%,50%); -$color-213-4-50: hsl(213, 4%, 50%); -$color-213-13-86: hsla(213, 13%, 86%, 0.2); -$color-0-0-29: hsl(0, 0%, 29%); $color-0-0-22: hsl(0,0%,22.7%); $color-203-87-19: hsl(203, 87.8%, 19.2%); -$color-233-18-29: hsl(233, 18%, 29%); -$color-233-20-17: hsl(233, 20%, 17%); -$color-216-4-22: hsl(216, 4%, 22%); -$color-244-73-62: hsl(244, 73%, 62%); -$color-357-67-45: hsl(357,67.5%,45.9%); +$color-357-67-45: hsl(357,67.5%,45.9%); \ No newline at end of file diff --git a/src/styles/base/form.scss b/src/styles/base/form.scss index d1b819c..e8b99dd 100644 --- a/src/styles/base/form.scss +++ b/src/styles/base/form.scss @@ -8,7 +8,7 @@ .text-bold, .text-uppercase, .reversed, - .button-dark, + .button-secondary, .bordered; margin-left: auto; margin-top: 3.2rem; @@ -20,7 +20,7 @@ &.with-form { h1 { - color: $color-233-18-29; + color: var(--color-title); font-weight: bold; font-size: 2rem; @@ -30,8 +30,8 @@ } .fieldset { - border-bottom: 1px solid $color-221-51-90; - color: $color-233-18-29; + border-bottom: 1px solid var(--color-fieldset-border); + color: var(--color-title); display: flex; flex: 1 0 100%; font-size: 1.8rem; @@ -45,7 +45,7 @@ } [name$='border-top'] { - border-top: 1px solid $color-221-51-90; + border-top: 1px solid var(--color-grey-10); margin-top: 3rem; } @@ -72,11 +72,11 @@ input:not([type='file']), textarea { - -webkit-tap-highlight-color: $color-244-73-62; - background-color: $color-222-57-95; + -webkit-tap-highlight-color: var(--color-grey-7); + background-color: var(--color-input-background); box-sizing: border-box; - border: 2px solid $color-222-57-95; - color: $color-233-18-29; + border: 2px solid var(--color-input-background); + color: var(--color-input-text); /*flex: 1 1 0; Problem on Firefox for input type date*/ line-height: 1; min-width: 0; @@ -85,11 +85,11 @@ input:not([type="search"]):not([type="file"]), textarea { - border: 2px solid $color-222-57-95; + border: 2px solid var(--color-input-background); &:focus, &:active { - border-bottom: 2px solid $color-244-73-62; + border-bottom: 2px solid var(--color-input-active); } } @@ -127,9 +127,10 @@ >.ss-single-selected { align-items: center; - background-color: #ebeffa; + background-color: var(--color-input-background); border: none; border-radius: 0px; + color: var(--color-input-text); display: flex; justify-content: flex-end; min-height: 4.2rem; @@ -140,11 +141,15 @@ margin: 0 18px 0 0; span { - border: solid $color-244-73-62; + border: solid var(--color-input-icon); border-width: 0 2px 2px 0; } } } + + .ss-list { + color: var(--color-select-list); + } } } @@ -154,7 +159,7 @@ .btn-margin-left, .text-bold, .text-uppercase, - .button-blue, + .button-complementary, .bordered; margin-top: auto; margin-bottom: auto; @@ -172,7 +177,7 @@ .text-bold, .text-uppercase, .reversed, - .button-dark, + .button-secondary, .bordered; margin-left: auto; margin-top: 3.2rem; @@ -184,7 +189,7 @@ font-weight: 600; &.is-dark label { - color: $color-216-4-22; + color: var(--color-label-dark); margin-top: 3rem; &>*:nth-child(2) { @@ -193,7 +198,7 @@ } &.is-light label { - color: $color-244-10-70; + color: var(--color-label-light); margin-top: 1.8rem; text-transform: uppercase; @@ -230,9 +235,10 @@ } .ss-single-selected { - background-color: $color-222-57-95; + background-color: var(--color-input-background); border: none; border-radius: 0px; + color: var(--color-input-text); display: flex; font-weight: normal; margin-top: 0.8rem; @@ -240,13 +246,18 @@ padding-left: 1rem; text-transform: none; + .ss-disabled { + color: var(--color-grey-5); + } + .ss-arrow span { - border: solid $color-244-73-62; + border: solid var(--color-input-icon); border-width: 0 2px 2px 0; } } .ss-content .ss-list .ss-option { + color: var(--color-input-text); font-weight: normal; text-transform: none; } @@ -258,7 +269,7 @@ background-position: right 12px top 50%; background-repeat: no-repeat; background-size: 1.4rem; - color: $color-213-4-50; + color: var(--color-input-icon); cursor: default; font-size: 1.4rem; margin-top: 1.6rem; @@ -308,7 +319,7 @@ input[type='file'] { box-sizing: border-box; flex: 0 0 20%; - color: $color-244-73-62; + color: var(--color-input-text); cursor: pointer; padding-left: 3rem; } @@ -342,7 +353,7 @@ .ss-multi-selected { align-items: center; - background-color: $color-222-57-95; + background-color: var(--color-input-background); border: none; border-radius: 0px; display: flex; @@ -355,10 +366,10 @@ margin: 0 18px 0 0; span.ss-plus { - background: $color-244-73-62; + background: var(--color-input-icon); &::after { - background: $color-244-73-62; + background: var(--color-input-icon); } } } @@ -377,7 +388,7 @@ top: calc(-6rem + 7px); &::before { - color: $color-213-4-50; + color: var(--color-grey-5); font-weight: normal; } } @@ -392,6 +403,10 @@ } } } + + .ss-list { + color: var(--color-input-text); + } } } } @@ -414,9 +429,9 @@ } input[type='submit'] { - background-color: transparent; - border: 1px solid $color-244-73-62; - color: $color-244-73-62; + background-color: var(--color-select-add-button-background); + border: 1px solid var(--color-select-add-button); + color: var(--color-select-add-button); } } } diff --git a/src/styles/base/header.scss b/src/styles/base/header.scss index eb11c3b..e405d6f 100644 --- a/src/styles/base/header.scss +++ b/src/styles/base/header.scss @@ -2,8 +2,8 @@ max-height: 83px; height: 83px; align-items: center; - background-color: $color-0-0-100; - color: $color-216-4-22; + background-color: var(--color-header-background); + color: var(--color-black); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.09); display: flex; flex-shrink: 0; @@ -22,14 +22,14 @@ #search-input { border-radius: 10em; padding: 0.64rem 1.28rem; - border: 1px solid $color-215-9-73; + border: 1px solid var(--color-grey-10); height: 3.8rem; width: 28rem; -webkit-appearance: textfield; & ~ #close-search-icon, & ~ #search-icon { - color: $color-215-9-73; + color: var(--color-grey-10); display: block; font-size: 1.7rem; margin: auto; @@ -37,7 +37,7 @@ right: 3.7rem; top: 50%; transform: translateY(-50%); - -webkit-text-stroke: 1px $color-215-9-73; + -webkit-text-stroke: 1px var(--color-grey-10); } & ~ #close-search-icon { @@ -57,6 +57,7 @@ } sib-notifications { + color: var(--color-bell); @include breakpoint(sm) { padding: 0; @@ -126,8 +127,8 @@ display: block; /* To remove the disclosure triangle on Firefox v.>=69 */ &:focus { - background-color: $color-233-18-29; - color: $color-0-0-100; + background-color: var(--color-user-panel-header-background-open); + color: var(--color-user-panel-header-text-open); outline: none; } } @@ -143,7 +144,7 @@ hubl-user-avatar { align-items: center; - background-color: $color-213-20-91; + background-color: var(--color-avatar-background); border-radius: 50%; display: flex; height: 4.8rem; @@ -198,7 +199,7 @@ top: 83px; > nav { - background-color: $color-0-0-100; + background-color: var(--color-user-panel-list-background); box-shadow: 0 7px 8px 0 rgba(0, 0, 0, 0.16); position: absolute; right: 0; @@ -213,20 +214,20 @@ li { sib-link { - color: $color-213-4-50; + color: var(--color-grey-4); display: block; - border-bottom: 1px solid $color-213-20-91; + border-bottom: 1px solid var(--color-user-panel-list-border); margin-right: 0; padding: 1.6rem 1.3rem; &:hover { - color: $color-244-73-62; + color: var(--color-user-panel-list-text-hover); } } } } button { - color: $color-213-4-50; + color: var(--color-grey-4); padding: 1.6rem 1.3rem; text-align: left; width: 100%; @@ -235,8 +236,8 @@ } &[open] { - background-color: $color-233-18-29; - color: $color-0-0-100; + background-color: var(--color-user-panel-header-background); + color: var(--color-user-panel-header-text); #user-controls__profile { diff --git a/src/styles/base/main.scss b/src/styles/base/main.scss index 0dd0cb7..403483d 100644 --- a/src/styles/base/main.scss +++ b/src/styles/base/main.scss @@ -5,11 +5,11 @@ :root { font-size: 10px; font-family: Open Sans, sans-serif; - --sib-notifications-theme: #{$color-46-100-50}; + --sib-notifications-theme: var(--color-primary); body { - background-color: $color-210-25-95; - color: $color-213-4-50; + background-color: var(--color-main-background); + color: var(--color-main-text); font-size: 1.6rem; min-height: 100vh; overflow-wrap: break-word; @@ -43,16 +43,16 @@ nav, .views-container { /* Custom scrollbar of the left-menu */ nav { scrollbar-width: thin; - scrollbar-color: $color-244-10-70 $color-233-18-29; + scrollbar-color: var(--color-scrollbar-left-track) var(--color-scrollbar-left-background); &::-webkit-scrollbar-track { - background: $color-233-18-29; + background: var(--color-scrollbar-left-background); } &::-webkit-scrollbar-thumb { - background-color: $color-244-10-70; + background-color: var(--color-scrollbar-left-track); border-radius: 6px; - border: 3px solid $color-233-18-29; + border: 3px solid var(--color-scrollbar-left-background); } &::-webkit-scrollbar { @@ -63,16 +63,16 @@ nav { /* Custom scrollbar of the content */ .views-container { scrollbar-width: thin; - scrollbar-color: $color-244-10-70 white; + scrollbar-color: var(--color-scrollbar-right-track) var(--color-scrollbar-right-background); &::-webkit-scrollbar-track { - background: white; + background: var(--color-scrollbar-right-background); } &::-webkit-scrollbar-thumb { - background-color: $color-244-10-70; + background-color: var(--color-scrollbar-right-track); border-radius: 6px; - border: 3px solid white; + border: 3px solid var(--color-scrollbar-right-background); } &::-webkit-scrollbar { @@ -118,7 +118,7 @@ h6 { } h1, .h1-like { - color: $color-233-18-29; + color: var(--color-h1); font-size: 2rem; text-transform: uppercase; @@ -128,7 +128,7 @@ h1, .h1-like { } h2, .h2-like { - color: $color-216-4-22; + color: var(--color-h2); font-size: 1.8rem; text-transform: uppercase; } @@ -140,7 +140,7 @@ h2, .h2-like { } h3 { - color: $color-216-4-22; + color: var(--color-title); font-size: 1.7rem; } @@ -168,7 +168,7 @@ h5 { margin: 2rem 1rem 5rem 2rem; &.full-width { - background: $color-0-0-100; + background: var(--color-white); flex: 1; font-size: 1.6rem; margin: 0 auto; @@ -182,11 +182,11 @@ h5 { /* Header inside circle, project view */ .content-box__header { - border-bottom: 1px solid $color-221-51-90; + border-bottom: 1px solid var(--color-content-header); padding: 3rem; @include breakpoint(sm) { - background: $color-221-51-90; + background: var(--color-grey-10); } sib-display { @@ -198,7 +198,7 @@ h5 { .mobile-sidebar-button { @include breakpoint(sm) { float: right; - color: $color-233-18-29; + color: var(--color-secondary); font-size: 1.8rem; font-weight: bold!important; @@ -220,7 +220,7 @@ h5 { font-size: 1.8rem; &:not(:empty)::before { - color: $color-233-18-29; + color: var(--color-grey-4); content: ' - '; font-size: 2rem; font-weight: bold; @@ -228,12 +228,12 @@ h5 { } .description { - color: $color-215-6-63; + color: var(--color-grey-4); } .name { - color: $color-233-18-29; + color: var(--color-grey-4); font-weight: normal; } } @@ -246,7 +246,7 @@ h5 { } .modal { - color: white; + color: var(--color-white); margin: 75px; padding: 40px; max-height: 85vh; @@ -263,14 +263,14 @@ h5 { top: 32px; button { - color: $color-233-18-29; + color: var(--color-secondary); } } } .backlink { @include icon('arrow-left-circle'); - color: $color-233-18-29; + color: var(--color-backlink); font-size: 1.5rem; margin: 2rem 0 0 2rem; text-decoration: underline; @@ -288,7 +288,7 @@ h5 { } .name { - color: $color-216-4-22; + color: var(--color-grey-1); font-size: 2rem; font-weight: bold; } @@ -311,7 +311,7 @@ h5 { } .section { - border-bottom: 1px solid $color-221-51-90; + border-bottom: 1px solid var(--color-grey-10); padding: 4.5rem; } @@ -407,61 +407,61 @@ a, margin-right: 1rem; } - &.button-yellow { - background-color: white; + &.button-primary{ + background-color: var(--color-white); *, & { - color: $color-43-100-50; + color: var(--color-primary); } &.bordered { - border: 1px solid $color-43-100-50; + border: 1px solid var(--color-primary); } &:hover { - background-color: $color-43-100-50; + background-color: var(--color-primary); *, & { - color: white; + color: var(--color-white); } } } - &.button-blue { - background-color: white; + &.button-secondary { + background-color: var(--color-white); *, & { - color: $color-244-73-62; + color: var(--color-secondary); } &.bordered { - border: 1px solid $color-244-73-62; + border: 1px solid var(--color-secondary); } &:hover { - background-color: $color-244-73-62; + background-color: var(--color-secondary); *, & { - color: white; + color: var(--color-white); } } } - &.button-dark { - color: $color-233-18-29; - background-color: white; + &.button-complementary { + color: var(--color-complementary); + background-color: var(--color-white); &.bordered { - border: 1px solid $color-233-18-29; + border: 1px solid var(--color-complementary); } &:hover { - background-color: $color-233-18-29; - color: white; + background-color: var(--color-complementary); + color: var(--color-white); } } @@ -470,64 +470,69 @@ a, } &.reversed { - &.button-yellow { - background-color: $color-43-100-50; + &.button-primary { + background-color: var(--color-primary); *, & { - color: white; + color: var(--color-white); } &:hover { - background-color: white; - color: $color-43-100-50; + background-color: var(--color-white); + color: var(--color-primary); + + *, + & { + color: var(--color-primary); + } &.bordered { - border: 1px solid $color-43-100-50; + border: 1px solid var(--color-primary); } } } - &.button-blue { - background-color: $color-244-73-62; + &.button-secondary { + background-color: var(--color-secondary); *, & { - color: white; + color: var(--color-white); } &:hover { - background-color: white; + background-color: var(--color-white); *, & { - color: $color-244-73-62; + color: var(--color-secondary); } &.bordered { - border: 1px solid $color-244-73-62; + border: 1px solid var(--color-secondary); } } } - &.button-dark { - background-color: $color-233-18-29; + &.button-complementary { + background-color: var(--color-complementary); *, & { - color: white; + color: var(--color-white); } &:hover { - background-color: white; + background-color: var(--color-white); *, & { - color: $color-233-18-29; + color: var(--color-complementary); } &.bordered { - border: 1px solid $color-233-18-29; + border: 1px solid var(--color-complementary); } } } diff --git a/src/styles/base/menu-left.scss b/src/styles/base/menu-left.scss index e9368d8..e4699d6 100644 --- a/src/styles/base/menu-left.scss +++ b/src/styles/base/menu-left.scss @@ -1,6 +1,6 @@ #main__menu { - background-color: $color-233-18-29; - color: $color-0-0-100; + background-color: var(--color-menu-background); + color: var(--color-menu-text); display: block; max-width: 250px; min-height: calc(100vh - 83px); /* 83px = nav height */ @@ -36,17 +36,14 @@ padding: 1.2rem; &[active] { - background-color: $color-46-100-67; - color: $color-233-18-29; + background-color: var(--color-menu-highlight-primary); .menu-icon:before { - background-color: $color-233-18-29; - color: $color-0-0-100; + background-color: var(--color-menu-icon-background-active); } .menu-notification > sib-display > div:first-child { - background-color: $color-233-18-29; - color: $color-46-100-67; + background-color: var(--color-menu-badge-background); } } @@ -81,7 +78,6 @@ .menu-chevron { align-items: center; - color: $color-244-10-70; display: flex; flex-grow: 0; flex-shrink: 0; @@ -136,7 +132,7 @@ sib-display>div { .create { - color: $color-244-10-70; + color: var(--color-white); margin: 1rem 1rem 2.2rem 3.2rem; } @@ -147,7 +143,7 @@ } >div { - color: $color-244-10-70; + color: var(--color-grey-6); cursor: pointer; >hubl-menu-fix-url-circle>sib-display>div, >hubl-menu-fix-url-project>sib-display>div { @@ -163,8 +159,8 @@ &>sib-display[active]>div, &>sib-display>div>hubl-menu-fix-url-circle>sib-display[active]>div, &>sib-display>div>hubl-menu-fix-url-project>sib-display[active]>div { - background-color: $color-46-100-67; - color: $color-233-18-29; + background-color: var(--color-menu-highlight-primary); + color: var(--color-menu-text-active); font-weight: bold; } } @@ -195,7 +191,7 @@ width: 20px; height: 20px; padding-bottom: 0; - color: $color-216-4-22; + color: var(--color-secondary); } } } @@ -204,7 +200,8 @@ .divider { height: 1px; - background-color: $color-213-13-86; + background-color: var(--color-grey-11); + opacity: 0.2; } } diff --git a/src/styles/base/table.scss b/src/styles/base/table.scss index db2361d..eb4078a 100644 --- a/src/styles/base/table.scss +++ b/src/styles/base/table.scss @@ -22,19 +22,19 @@ text-align: center; &.grey-color { - background: $color-228-25-79; - color: white; + background: var(--color-table-header-background); + color: var(--color-table-header-text); } >* { - border-right: 1px solid white; - //flex: 1; + border-right: 1px solid var(--color-table-border); + flex: 1; padding: 2.1rem 0; text-align: center; } >*:last-of-type { - border-right: 1px solid $color-228-25-79; + border-right: 1px solid --color-table-header-background; } } @@ -43,12 +43,12 @@ >div:first-of-type>sib-display>div, hubl-team-template-edit[name='members'] { display: flex; - border-left: 1px solid $color-228-25-79; + border-left: 1px solid var(--color-table-border); } .border { - border-bottom: 1px solid $color-228-25-79; - border-right: 1px solid $color-228-25-79; + border-bottom: 1px solid var(--color-table-border); + border-right: 1px solid var(--color-table-border); } .cell { @@ -94,7 +94,7 @@ .text-bold, .text-uppercase, .reversed, - .button-blue, + .button-secondary, .bordered, .btn-margin-left; } @@ -102,7 +102,7 @@ } .cell-with-name { - color: $color-233-18-29; + color: var(--color-secondary); font-weight: 600; padding-top: 2.5rem; } diff --git a/src/styles/base/user-thumb.scss b/src/styles/base/user-thumb.scss index db3902d..8f519c4 100644 --- a/src/styles/base/user-thumb.scss +++ b/src/styles/base/user-thumb.scss @@ -24,7 +24,7 @@ %user-thumb__picture { align-items: center; align-self: center; - background-color: $color-213-20-91; + background-color: var(--color-avatar-background); border-radius: 50%; display: flex; grid-column: 1 / span 1; @@ -52,7 +52,7 @@ } %user-thumb__name { - color: #7A7F85; + color: var(--color-user-thumb-name); font-weight: 600; margin-right: 1rem; } @@ -88,7 +88,7 @@ margin-right: 1.6rem; &::before { - color: $color-43-100-50; + color: var(--color-icon); margin-right: 0.50rem; } } @@ -99,7 +99,7 @@ display: flex; &::before { - color: $color-43-100-50; + color: var(--color-icon); font-size: 1.9rem; font-weight: bold; margin-left: 0; diff --git a/src/styles/components/comment.scss b/src/styles/components/comment.scss index 796f9de..f269428 100644 --- a/src/styles/components/comment.scss +++ b/src/styles/components/comment.scss @@ -1,4 +1,4 @@ -#job-offers { +/* #job-offers { details { @@ -119,4 +119,4 @@ } } } -} +}*/ diff --git a/src/styles/components/filters.scss b/src/styles/components/filters.scss index dc1b60b..2823c38 100644 --- a/src/styles/components/filters.scss +++ b/src/styles/components/filters.scss @@ -1,4 +1,4 @@ -%filters { +/*%filters { display: grid; grid-gap: 0px 15px; grid-template-columns: 1fr 1fr; @@ -56,4 +56,4 @@ sib-form[naked] { @extend %filters; } -} +}*/ diff --git a/src/styles/components/sidebar.scss b/src/styles/components/sidebar.scss index d7933be..940a574 100644 --- a/src/styles/components/sidebar.scss +++ b/src/styles/components/sidebar.scss @@ -27,13 +27,12 @@ } nav { - background: $color-210-25-95; + background: var(--color-right-menu-background); transition: all 0.5s; width: 25rem; >sib-router { - background-color: $color-222-52-90; - color: $color-233-18-29; + color: var(--color-right-menu-text); flex: 0 0 auto; font-weight: 600; @@ -47,7 +46,7 @@ li { align-items: center; - border-bottom: 1px solid $color-229-25-79; + border-bottom: 1px solid var(--color-right-menu-link-border); display: flex; margin: 0; padding: 2.15rem 2.55rem; @@ -104,7 +103,7 @@ } &[name='admin-users']>li::before { - background-color: $color-233-18-29; + background-color: var(--color-secondary); content: ''; display: inline-block; height: 40px; @@ -124,14 +123,14 @@ } &[active] { - background-color: $color-233-18-29; - color: $color-46-100-67; + background-color: var(--color-right-menu-active-background); + color: var(--color-right-menu-active-text); display: inline-block; } &.active-color[active] { >li::before { - background-color: #ffd857; + background-color: var(--color-right-menu-active-icon); } } } @@ -157,7 +156,7 @@ @include breakpoint(sm) { display: block; - background: $color-221-51-90; + background: var(--color-right-menu-background); bottom: 0; box-shadow: 0 2px 9px 0 rgba(0, 0, 0, 0.12); min-width: 60%; @@ -168,4 +167,4 @@ } } } -} \ No newline at end of file +} diff --git a/src/styles/components/skills.scss b/src/styles/components/skills.scss index e59770d..496f0a5 100644 --- a/src/styles/components/skills.scss +++ b/src/styles/components/skills.scss @@ -4,10 +4,10 @@ sib-multiple[name*='skills'] { } .skill { - background-color: $color-43-100-50; - border: 1px solid $color-43-100-50; + background-color: var(--color-skill-background); + border: 1px solid var(--color-skill-background); border-radius: 2em; - color: $color-0-0-100; + color: var(--color-skill-text); display: block; font-size: 1.4rem; font-weight: bold; diff --git a/src/styles/components/tags.scss b/src/styles/components/tags.scss index 80e0310..e1f5f73 100644 --- a/src/styles/components/tags.scss +++ b/src/styles/components/tags.scss @@ -1,7 +1,7 @@ %tag-role { - border: 1px solid $color-45-95-54; + border: 1px solid var(--color-tag-group-border); border-radius: 3px; - color: $color-210-4-50; + color: var(--color-tag-group-text); font-size: 1.4rem; font-weight: 400; margin-right: 0.6rem; @@ -9,9 +9,9 @@ } %tag-admin { - border: 1px solid $color-244-73-62; + border: 1px solid var(--color-tag-admin-border); border-radius: 3px; - color: $color-244-73-62; + color: var(--color-tag-admin-text); font-size: 1.4rem; font-weight: 400; margin-left: 0.6rem; diff --git a/src/styles/layout/job-offers/job-offers.scss b/src/styles/layout/job-offers/job-offers.scss index 64c41fe..ef08ead 100644 --- a/src/styles/layout/job-offers/job-offers.scss +++ b/src/styles/layout/job-offers/job-offers.scss @@ -1,4 +1,4 @@ -.job-offers__container { +/*.job-offers__container { @extend %grid-layer; } @@ -202,5 +202,5 @@ sib-action[name='edit'] { @include icon('pencil'); font-size: 2rem; } -} +}*/ diff --git a/src/styles/layout/members/member-profile.scss b/src/styles/layout/members/member-profile.scss index b974ba3..22ee6ed 100644 --- a/src/styles/layout/members/member-profile.scss +++ b/src/styles/layout/members/member-profile.scss @@ -1,4 +1,4 @@ -#member-profile { +/*#member-profile { display: flex; flex-direction: column; flex-grow: 1; @@ -149,4 +149,4 @@ } } } -} +}*/ diff --git a/src/styles/layout/members/members.scss b/src/styles/layout/members/members.scss index 6ee0e9c..54934e2 100644 --- a/src/styles/layout/members/members.scss +++ b/src/styles/layout/members/members.scss @@ -1,4 +1,4 @@ -%member-info { +/*%member-info { sib-multiple[name^='user.'], >member-info>div, @@ -239,4 +239,4 @@ member-info-groups { } } } -} +}*/ diff --git a/src/styles/layout/project/project-profile.scss b/src/styles/layout/project/project-profile.scss index 9e8cdd4..b38c218 100644 --- a/src/styles/layout/project/project-profile.scss +++ b/src/styles/layout/project/project-profile.scss @@ -6,7 +6,7 @@ } .button-question__color { - color: $color-216-4-22; + color: var(--color-secondary); } .customer-box { @@ -14,7 +14,7 @@ margin: 1.6rem 0; >* { - border: 1px solid $color-221-51-90; + border: 1px solid var(--color-grey-8); flex: 0 1 50%; padding: 1.7rem 2rem; @@ -94,7 +94,7 @@ margin-bottom: 0.5em; span::before { - color: $color-43-100-50; + color: var(--color-primary); font-size: 2.2rem; margin: 0 1rem 0 0; } @@ -103,7 +103,7 @@ font-weight: bold; &.link-color { - color: $color-244-73-62; + color: var(--color-complementary); } &.norm-weight { diff --git a/src/styles/layout/user/user-profile.scss b/src/styles/layout/user/user-profile.scss index 87dafaf..90c1542 100644 --- a/src/styles/layout/user/user-profile.scss +++ b/src/styles/layout/user/user-profile.scss @@ -1,4 +1,4 @@ -.user-profile__container { +/*.user-profile__container { .user-bio { display: grid; @@ -42,10 +42,10 @@ } .info-form { - grid-area: information; + grid-area: information; */ /* ces styles disparaitront lorsque l'on aura la fonctionnalité pour uploader une photo */ - [name="account.picture"] { + /*[name="account.picture"] { margin-bottom: 1rem; } @@ -60,9 +60,9 @@ p { margin-left: 1rem; } - } + }*/ /* Fin commentaire sur upload photos */ - } + /*} [name^="inline-"] { display: flex; @@ -73,4 +73,4 @@ } } } -} +}*/ diff --git a/src/views/admin/page-admin-circles-create.pug b/src/views/admin/page-admin-circles-create.pug index 0cb0275..e7c7770 100644 --- a/src/views/admin/page-admin-circles-create.pug +++ b/src/views/admin/page-admin-circles-create.pug @@ -12,7 +12,7 @@ div.content-box__info class-description='form-label is-light is-full-width' label-name='Nom du canal *' - label-description='Sous-titre du canal' + label-description='Sous-titre du canal *' next='admin-circle-list' diff --git a/src/views/admin/page-admin-circles.pug b/src/views/admin/page-admin-circles.pug index 927688b..35d1016 100644 --- a/src/views/admin/page-admin-circles.pug +++ b/src/views/admin/page-admin-circles.pug @@ -33,7 +33,7 @@ div.admin-header__title Canaux sib-link( - class='button text-bold text-uppercase reversed button-yellow bordered with-icon icon-plus' + class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' next='admin-circle-create' ) Créer un canal @@ -47,7 +47,7 @@ sib-widget(name='hubl-admin-circle-leave-button') template sib-delete( - class='button text-bold text-uppercase reversed button-dark bordered with-icon icon-close' + class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' data-src="${src}" data-label='Quitter' ) @@ -70,7 +70,7 @@ sib-widget(name='hubl-admin-circle-join-button') template - sib-form.button.text-bold.text-uppercase.reversed.button-blue.bordered.with-icon.icon-arrow-right-circle.flex( + sib-form.button.text-bold.text-uppercase.reversed.button-primary.bordered.with-icon.icon-arrow-right-circle.flex( data-src='${value}' fields='user.username' diff --git a/src/views/admin/page-admin-projects.pug b/src/views/admin/page-admin-projects.pug index bf6e653..6f83ba0 100644 --- a/src/views/admin/page-admin-projects.pug +++ b/src/views/admin/page-admin-projects.pug @@ -17,7 +17,7 @@ div.admin-header div.admin-header__title Projets sib-link( - class='button text-bold text-uppercase reversed button-yellow bordered with-icon icon-plus' + class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' next='admin-project-create' ) Créer un projet @@ -31,7 +31,7 @@ sib-widget(name="hubl-admin-project-leave-button") template sib-delete( - class='button text-bold text-uppercase reversed button-dark bordered with-icon icon-close' + class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' data-src="${src}" data-label='Quitter' ) diff --git a/src/views/admin/page-admin-users.pug b/src/views/admin/page-admin-users.pug index fc0b5ec..2aed94b 100644 --- a/src/views/admin/page-admin-users.pug +++ b/src/views/admin/page-admin-users.pug @@ -11,7 +11,7 @@ template sib-ac-checker(data-src="${src}", permission='acl:Write') sib-link( - class='button rounded reversed button-blue bordered icon-pencil' + class='button rounded reversed button-primary bordered icon-pencil' data-src="${src}" next="${value}" ) @@ -30,7 +30,7 @@ div.admin-header__title Utilisateurs sib-ac-checker(data-src=`${endpoints.users || endpoints.post.users}`, permission='acl:Append') sib-link( - class='button text-bold text-uppercase reversed button-yellow bordered with-icon icon-plus' + class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-plus' next='admin-users-create' ) Ajouter un utilisateur diff --git a/src/views/circle/page-circle-edit.pug b/src/views/circle/page-circle-edit.pug index c0630b2..d670e33 100644 --- a/src/views/circle/page-circle-edit.pug +++ b/src/views/circle/page-circle-edit.pug @@ -29,7 +29,7 @@ div.content-box__info data-src="${value['@id']}" ) sib-delete( - class='button text-bold text-uppercase reversed button-dark bordered with-icon icon-close' + class='button text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' data-src="${value['@id']}" data-label='Quitter le canal' ) @@ -54,7 +54,7 @@ div.content-box__info label-name='Nom du canal' label-owner='Administrateur ou administratrice' - label-description='Sous-titre du canal' + label-description='Sous-titre du canal *' class-name='form-label is-light is-half-width' class-owner='form-label is-light is-half-width member-select color' diff --git a/src/views/circle/page-circle-profile.pug b/src/views/circle/page-circle-profile.pug index a6b5b21..71bdda5 100644 --- a/src/views/circle/page-circle-profile.pug +++ b/src/views/circle/page-circle-profile.pug @@ -18,7 +18,7 @@ sib-router(default-route='circle-profile', hidden) widget-creationDate='sib-display-date' ) sib-ac-checker(permission='acl:Append', bind-resources, nested-field='members') - sib-link(class='button text-bold text-uppercase reversed button-blue bordered with-icon icon-pencil' next='circle-edit' bind-resources) Modifier et ajouter un membre + sib-link(class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='circle-edit' bind-resources) Modifier et ajouter un membre h2 Membres : @@ -34,7 +34,7 @@ sib-router(default-route='circle-profile', hidden) div.box-button sib-ac-checker(permission='acl:Delete', bind-resources) sib-delete( - class='button text-bold text-uppercase button-blue bordered with-icon icon-trash' + class='button text-bold text-uppercase button-primary bordered with-icon icon-trash' bind-resources data-label='Supprimer le canal' ) @@ -42,14 +42,14 @@ sib-router(default-route='circle-profile', hidden) sib-widget(name='hubl-circle-leave-button') template sib-delete( - class='button btn-margin-left text-bold text-uppercase reversed button-dark bordered with-icon icon-close' + class='button btn-margin-left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' data-src="${src}" data-label='Quitter le canal' ) sib-widget(name='hubl-circle-join-button') template - button.button.btn-margin-left.text-bold.text-uppercase.reversed.button-dark.bordered.with-icon.icon-arrow-right-circle.flex + button.button.btn-margin-left.text-bold.text-uppercase.reversed.button-primary.bordered.with-icon.icon-arrow-right-circle.flex sib-form( data-src='' nested-field='members' diff --git a/src/views/project/page-project-profile.pug b/src/views/project/page-project-profile.pug index ffdf5eb..d596826 100644 --- a/src/views/project/page-project-profile.pug +++ b/src/views/project/page-project-profile.pug @@ -22,7 +22,7 @@ sib-router(default-route='project-profile', hidden) widget-creationDate='sib-display-date' ) sib-ac-checker(permission='acl:Append', bind-resources, nested-field='members') - sib-link(class='button text-bold text-uppercase reversed button-blue bordered with-icon icon-pencil' next='project-edit' bind-resources) Modifier et ajouter un membre + sib-link(class='button text-bold text-uppercase reversed button-primary bordered with-icon icon-pencil' next='project-edit' bind-resources) Modifier et ajouter un membre .space-between @@ -68,7 +68,7 @@ sib-router(default-route='project-profile', hidden) sib-widget(name='hubl-project-leave-button') template sib-delete( - class='button btn-margin-left text-bold text-uppercase reversed button-dark bordered with-icon icon-close' + class='button btn-margin-left text-bold text-uppercase reversed button-secondary bordered with-icon icon-close' data-src="${src}" data-label='Quitter le groupe' ) diff --git a/styling.md b/styling.md new file mode 100644 index 0000000..0c82433 --- /dev/null +++ b/styling.md @@ -0,0 +1,23 @@ +# Documentation + +## Define your own colors + +We use css variables to apply colors in the application. + +The file can be found in src/styles/etc/ + +Example of use: + +```css +:root { + --color-primary: #FFD759; + --color-secondary: #FFB700; + --color-complementary: #3C3F57; + --color-complementary-darken: #27293A; +} +``` + +Users can find example files at the root of the application. Use + +- client.sample.happy-dev.css : for a more advanced example of customization. +- client.sample.css : to set five basic colors and let the default setup apply the colors.