diff --git a/.travis.yml b/.travis.yml index 552afc4d7..fdda60451 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,9 @@ cache: yarn: true jobs: + allow_failures: + - name: 'DMS e2e tests' + include: - stage: 'Tests' name: 'Static linting' @@ -21,6 +24,12 @@ jobs: script: yarn test:coverage after_success: bash <(curl -s https://codecov.io/bash) + - name: 'DMS e2e tests' + if: type = cron + before_script: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p && yarn build + script: yarn test:dms:e2e + after_failure: bash ./scripts/sendscreenshots.sh + - stage: 'Deploy to netlify' if: type = pull_request name: 'DMS' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 81a8ff874..d305c464f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,21 +20,35 @@ If you run into trouble here, make sure your node, npm, and **_yarn_** are on th 1. `git clone https://github.com/SenseNet/sn-client.git` _bonus_: use your own fork for this step 2. `cd sn-client` 3. `yarn` -4. `yarn build` this will run the build script in every package -5. `yarn test` +4. `yarn build` to compile all the typescript packages +5. `yarn test` to run unit tests -#### Bootstrapping everything +### Running package script -_This method is slow_ +With yarn you can run any package scripts eg.: `test, build, lint` -1. `yarn` -2. Have a beer 🍺 -3. `yarn build` (to verify everything worked) - -#### Running package script +```shell +yarn workspace @sensenet/redux test +``` -With yarn you can run the any package scripts eg.: `test, build, lint` +There are aliases for the example applications like dms, component-docs, sn-app. +You can run any command in these packages easily. ```shell -yarn workspace @sensenet/redux test +yarn dms build:webpack +yarn dms start +yarn snapp start +yarn storybook start ``` + +### Running e2e tests locally + +Cypress is installed to dms-demo app right now. To run the tests you simply need to run `yarn test:dms:e2e` +To develop e2e tests: + +- You need a running instance of dms (`yarn start:dms:e2e`) with NODE_ENV set to test +- Start cypress with `yarn cypress open -P examples/sn-dms-demo` in another command prompt +- Add test to `examples/sn-dms-demo/cypress/integration` with a spec.ts | spec.js file extension + +Running the tests locally will create a currentUser.json with a new test user. The tests are going to use this user. +In order to use another user you can change the email and password of the current user or let the system create a new for you by deleting the json. diff --git a/examples/sn-dms-demo/.gitignore b/examples/sn-dms-demo/.gitignore index 0ed6ed64d..0bbbdd206 100644 --- a/examples/sn-dms-demo/.gitignore +++ b/examples/sn-dms-demo/.gitignore @@ -21,4 +21,7 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -.awcache \ No newline at end of file +.awcache +cypress/videos/ +cypress/screenshots/ +cypress/fixtures/currentUser.json \ No newline at end of file diff --git a/examples/sn-dms-demo/cypress.json b/examples/sn-dms-demo/cypress.json new file mode 100644 index 000000000..b9b372b97 --- /dev/null +++ b/examples/sn-dms-demo/cypress.json @@ -0,0 +1,6 @@ +{ + "baseUrl": "http://localhost:3000", + "testFiles": "**/*.spec.*", + "supportFile": "cypress/support/index.ts", + "fixturesFolder": "cypress/fixtures" +} diff --git a/examples/sn-dms-demo/cypress/fixtures/logo.png b/examples/sn-dms-demo/cypress/fixtures/logo.png new file mode 100644 index 000000000..ac4dd49c4 Binary files /dev/null and b/examples/sn-dms-demo/cypress/fixtures/logo.png differ diff --git a/examples/sn-dms-demo/cypress/integration/documents/documents.spec.ts b/examples/sn-dms-demo/cypress/integration/documents/documents.spec.ts new file mode 100644 index 000000000..a80a596d8 --- /dev/null +++ b/examples/sn-dms-demo/cypress/integration/documents/documents.spec.ts @@ -0,0 +1,166 @@ +import Chance = require('chance') +import { resources } from '../../../src/assets/resources' +import { + contextMenuItems, + createNewFileName, + moveToFolderAndCheckIfFileExists, + newMenuItems, + openContextMenuItem, + openNew, + registerNewUser, + selectPathInListPicker, + uploadNewFileAndOpenContextMenuItem, +} from '../../support/documents' + +context('The documents page', () => { + let currentUser = { email: '', password: '' } + + const loginOrRegister = (user: { email: string; password: string }) => { + cy.login(user.email, user.password).then(isSuccesful => { + if (!isSuccesful) { + currentUser = registerNewUser() + cy.login(currentUser.email, currentUser.password) + } + }) + } + + before(async () => { + if (process.env.CI) { + currentUser = registerNewUser() + } + }) + + beforeEach(() => { + // Save current user locally to reduce user creation + if (!process.env.CI) { + cy.task('getCurrentUser', '../fixtures/currentUser.json') + .then(user => (currentUser = user)) + .then(() => loginOrRegister(currentUser)) + } else { + loginOrRegister(currentUser) + } + }) + + it('header contains the logged in users avatar', () => { + cy.visit('#/documents') + + cy.url().should('include', '/documents') + + cy.get(`div[aria-label="${currentUser.email}"]`).should('exist') + }) + + describe('left side menu', () => { + it('should contain new and upload buttons', () => { + cy.contains('span[role=button]', resources.UPLOAD_BUTTON_TITLE) + cy.contains('span[role=button]', resources.ADD_NEW) + }) + + it('should contain new document, sheet, slide, text, folder buttons', () => { + cy.contains('[data-cy=appbar]', 'Document library').should('exist') + cy.contains(resources.ADD_NEW).click() + newMenuItems.forEach(item => cy.contains('li[role=menuitem]', `${resources.ADD_NEW} ${item.name}`)) + }) + + it(`creating a new item should show succes notification and can be found in the grid`, () => { + cy.contains('Document library').should('exist') + newMenuItems.forEach(item => { + openNew(item.name) + const displayName = Chance().word() + cy.get('#DisplayName').type(displayName + '{enter}') + cy.contains(displayName + item.ext + ' ' + resources.CREATE_CONTENT_SUCCESS_MESSAGE).should('exist') + cy.contains(displayName + item.ext).should('exist') + cy.get('[aria-label="Close"]').click() + }) + }) + }) + + it('rename document should work', () => { + const fileName = createNewFileName() + const newName = createNewFileName() + uploadNewFileAndOpenContextMenuItem(currentUser.email, fileName, contextMenuItems.rename) + // wait for input to be focused + cy.wait(1000) + cy.get('.rename') + .clear() + .type(`${newName}{enter}`) + cy.contains(newName) + cy.contains(resources.EDIT_PROPERTIES_SUCCESS_MESSAGE.replace('{contentName}', fileName)) + }) + + it('copy to context menu item should work', () => { + const fileName = createNewFileName() + const copyToPath = 'Sample folder' + uploadNewFileAndOpenContextMenuItem(currentUser.email, fileName, contextMenuItems.copyTo) + // List picker component + selectPathInListPicker({ path: copyToPath, action: 'Copy' }) + // Copy to confirm dialog + cy.contains('div[data-cy="copyTo"] h5', resources.COPY) + cy.contains('div[data-cy="copyTo"] button', resources.COPY).click() + cy.contains(`${fileName} ${resources.COPY_BATCH_SUCCESS_MESSAGE}`) + .should('be.visible') + .get('button[aria-label="Close"]') + .click() + // check successful copy + cy.contains(fileName).should('exist') + moveToFolderAndCheckIfFileExists(copyToPath, fileName) + }) + + it('move to context menu item should work', () => { + const fileName = createNewFileName() + const moveToPath = 'Sample folder' + uploadNewFileAndOpenContextMenuItem(currentUser.email, fileName, contextMenuItems.moveTo) + // List picker component + selectPathInListPicker({ path: moveToPath, action: 'Move' }) + // Move to confirm dialog + cy.contains('div[data-cy="moveTo"] h5', resources.MOVE) + cy.contains('div[data-cy="moveTo"] button', resources.MOVE).click() + cy.contains(`${fileName} ${resources.MOVE_BATCH_SUCCESS_MESSAGE}`) + .should('be.visible') + .get('button[aria-label="Close"]') + .click() + // check successful copy + cy.contains(fileName).should('not.exist') + moveToFolderAndCheckIfFileExists(moveToPath, fileName) + }) + + it('edit properties should work', () => { + const fileName = createNewFileName() + uploadNewFileAndOpenContextMenuItem(currentUser.email, fileName, contextMenuItems.editProperties) + cy.contains('div[data-cy="editProperties"]', resources.EDIT_PROPERTIES).should('exist') + const properties = { + keywords: { value: 'keyword', selector: 'div[data-cy="editProperties"] .ql-editor' }, + index: { value: '1', selector: '#Index' }, + displayName: { value: Chance().word(), selector: '#DisplayName' }, + watermark: { value: Chance().word(), selector: '#Watermark' }, + } + Object.keys(properties).forEach(key => + cy + .get(properties[key].selector) + .clear() + .type(properties[key].value.toString()), + ) + cy.contains('div[data-cy="editProperties"] button', 'Submit').click() + cy.contains(resources.EDIT_PROPERTIES_SUCCESS_MESSAGE.replace('{contentName}', fileName)).should('exist') + openContextMenuItem(properties.displayName.value + '.png', contextMenuItems.editProperties) + Object.keys(properties).forEach(key => { + cy.get(properties[key].selector).should(key === 'keywords' ? 'have.text' : 'have.value', properties[key].value) + }) + }) + + it('check out and undo should work', () => { + const fileName = createNewFileName() + uploadNewFileAndOpenContextMenuItem(currentUser.email, fileName, contextMenuItems.checkOut) + cy.contains(resources.CHECKOUT_SUCCESS_MESSAGE.replace('{contentName}', fileName)).should('exist') + cy.get('div[title="Checked out by: Me"]').should('exist') + openContextMenuItem(fileName, contextMenuItems.editProperties) + cy.get('#Watermark') + .clear() + .type('sometext') + cy.contains('div[data-cy="editProperties"] button', 'Submit').click() + openContextMenuItem(fileName, contextMenuItems.undoChanges) + cy.contains(resources.UNDOCHECKOUT_SUCCESS_MESSAGE.replace('{contentName}', fileName)).should('exist') + cy.wait(1000) // wait for undo + openContextMenuItem(fileName, contextMenuItems.editProperties) + cy.get('#Watermark').should('not.have.value', 'sometext') + }) +}) diff --git a/examples/sn-dms-demo/cypress/integration/documents/documentsAdmin.spec.ts b/examples/sn-dms-demo/cypress/integration/documents/documentsAdmin.spec.ts new file mode 100644 index 000000000..37fc8e763 --- /dev/null +++ b/examples/sn-dms-demo/cypress/integration/documents/documentsAdmin.spec.ts @@ -0,0 +1,65 @@ +import { + contextMenuItems, + createNewFileName, + openContextMenu, + uploadNewFileAndOpenContextMenuItem, +} from '../../support/documents' + +context('The documents page with admin', () => { + const adminUser = { + email: 'e2e.admin@sensenet.com', + password: 'e2eadmin', + doclibPath: 'Root/Profiles/Public/e2e-admin/Document_Library', + } + beforeEach(() => { + cy.login(adminUser.email, adminUser.password) + }) + + it('should check actions availability', () => { + const fileName = createNewFileName() + cy.uploadWithApi({ + parentPath: adminUser.doclibPath, + fileName, + }) + cy.contains('div', fileName, { timeout: 10000 }).should('exist') + openContextMenu(fileName) + Object.keys(contextMenuItems).forEach(item => { + if (item === 'checkIn' || item === 'undoChanges') { + return + } + cy.get(`[title="${contextMenuItems[item]}"]`).should('exist') + }) + }) + + it('should be able to open viewer from context menu and close with esc', () => { + const fileName = createNewFileName() + cy.uploadWithApi({ + parentPath: adminUser.doclibPath, + fileName, + }) + cy.contains('div', fileName, { timeout: 10000 }).should('exist') + openContextMenu(fileName) + cy.get(`[title="${contextMenuItems.preview}"]`).click() + cy.contains('Preview image generation is in progress').should('exist') + cy.get('.overlay').should('exist') + cy.get('body').type('{esc}') + cy.get('.overlay').should('not.exist') + }) + + describe('share context menu', () => { + it('should list valid emails', () => { + const fileName = createNewFileName() + uploadNewFileAndOpenContextMenuItem('e2e-admin', fileName, contextMenuItems.shareContent) + cy.get('form input[type="email"]').type('invalid{enter}') + cy.contains('invalid').should('not.exist') + cy.get('form input[type="email"]') + .clear() + .type('asd@asd.com{enter}') + cy.contains('asd@asd.com').should('exist') + cy.contains('button', 'Ok').click() + openContextMenu(fileName) + cy.get(`[title="${contextMenuItems.shareContent}"]`).click() + cy.contains('asd@asd.com').should('exist') + }) + }) +}) diff --git a/examples/sn-dms-demo/cypress/integration/typings.d.ts b/examples/sn-dms-demo/cypress/integration/typings.d.ts new file mode 100644 index 000000000..14275b7f7 --- /dev/null +++ b/examples/sn-dms-demo/cypress/integration/typings.d.ts @@ -0,0 +1,18 @@ +import { Content, Repository, UploadFileOptions, UploadResponse } from '@sensenet/client-core' +import { User } from '@sensenet/default-content-types' +import { Omit } from 'cypress/types/lodash' + +declare global { + interface Window { + repository: Repository + } + namespace Cypress { + interface Chainable { + login: (email: string, password: string) => Cypress.Chainable + registerUser: (email: string, password: string) => Cypress.Chainable + uploadWithApi: (options: UploadOptions) => Cypress.Chainable + } + } +} + +export type UploadOptions = Partial, 'file'>> & { fileName: string } diff --git a/examples/sn-dms-demo/cypress/integration/user/logins.spec.ts b/examples/sn-dms-demo/cypress/integration/user/logins.spec.ts new file mode 100644 index 000000000..e91c19f45 --- /dev/null +++ b/examples/sn-dms-demo/cypress/integration/user/logins.spec.ts @@ -0,0 +1,45 @@ +import { resources } from '../../../src/assets/resources' + +context('The login page', () => { + beforeEach(() => { + cy.visit('/#/login') + }) + + it('requires email', () => { + cy.get('form') + .contains(resources.LOGIN_BUTTON_TEXT) + .click() + cy.contains(resources.EMAIL_IS_NOT_VALID_MESSAGE).should('exist') + }) + + it('requires password', () => { + cy.get('input[name=email]').type('businesscat@sensenet.com{enter}') + cy.contains(resources.PASSWORD_IS_NOT_VALID_MESSAGE).should('exist') + }) + + it('requires valid email and password', () => { + cy.get('input[name=email]').type('businesscat@sensenet.com') + cy.get('input[name=password]').type(`invalid{enter}`) + cy.contains(resources.WRONG_USERNAME_OR_PASSWORD).should('exist') + }) + + it('should navigate to registration page', () => { + cy.contains(resources.REGISTER_TAB_TEXT).click() + cy.url().should('include', '/registration') + cy.get('input').should('have.length', 3) + }) + + it('can authenticate properly', () => { + cy.get('input[name=email]').type('businesscat@sensenet.com') + cy.get('input[name=password]').type(`businesscat{enter}`) + + cy.url({ timeout: 10000 }).should('include', '/documents') + + cy.get('div[aria-label="Business Cat"]').should('exist') + + cy.window() + .its('localStorage') + .invoke('getItem', 'sn-https://dmsservice.demo.sensenet.com-access') + .should('not.be.empty') + }) +}) diff --git a/examples/sn-dms-demo/cypress/integration/user/logout.spec.ts b/examples/sn-dms-demo/cypress/integration/user/logout.spec.ts new file mode 100644 index 000000000..202003852 --- /dev/null +++ b/examples/sn-dms-demo/cypress/integration/user/logout.spec.ts @@ -0,0 +1,12 @@ +context('Logout', () => { + beforeEach(() => { + cy.login('businesscat@sensenet.com', 'businesscat') + }) + + it('should navigate to login page', () => { + cy.contains('[data-cy=appbar]', 'Document library', { timeout: 10000 }).should('exist') + cy.get('[aria-owns="actionmenu"] > .material-icons').click() + cy.get('[title="Log out"]').click() + cy.url().should('include', '/login') + }) +}) diff --git a/examples/sn-dms-demo/cypress/plugins/index.js b/examples/sn-dms-demo/cypress/plugins/index.js new file mode 100644 index 000000000..a2459e478 --- /dev/null +++ b/examples/sn-dms-demo/cypress/plugins/index.js @@ -0,0 +1,47 @@ +const webpack = require('@cypress/webpack-preprocessor') +const fs = require('fs') +const path = require('path') + +const webpackOptions = { + resolve: { + extensions: ['.ts', '.js'], + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: [/node_modules/], + use: [ + { + loader: 'ts-loader', + options: { + transpileOnly: true, + }, + }, + ], + }, + ], + }, +} + +const options = { + webpackOptions, +} + +const getCurrentUser = filePath => { + try { + const user = JSON.parse(fs.readFileSync(path.join(__dirname, filePath), 'utf8')) + return user + } catch (error) { + return { email: '', password: '' } + } +} + +module.exports = on => { + on('file:preprocessor', webpack(options)), + on('task', { + getCurrentUser(filePath) { + return getCurrentUser(filePath) + }, + }) +} diff --git a/examples/sn-dms-demo/cypress/support/commands.ts b/examples/sn-dms-demo/cypress/support/commands.ts new file mode 100644 index 000000000..0b97f7d16 --- /dev/null +++ b/examples/sn-dms-demo/cypress/support/commands.ts @@ -0,0 +1,72 @@ +import { User } from '@sensenet/default-content-types' +import { UploadOptions } from '../integration/typings' + +Cypress.Commands.add('login', (email, password) => { + cy.visit('') + Cypress.log({ + name: 'login', + consoleProps: () => { + return { email, password } + }, + message: [`${email} | ${password}`], + }) + cy.window().then({ timeout: 10000 }, async win => { + return await win.repository.authentication.login(email, password) + }) +}) + +Cypress.Commands.add('registerUser', (email, password) => { + cy.visit('') + Cypress.log({ + name: 'register', + consoleProps: () => { + return { email, password } + }, + message: [`${email} | ${password}`], + }) + cy.window().then(async win => { + const user = await win.repository.executeAction<{ email: string; password: string }, User>({ + name: 'RegisterUser', + idOrPath: `/Root/IMS('Public')`, + body: { + email, + password, + }, + method: 'POST', + }) + cy.writeFile('cypress/fixtures/currentUser.json', { email, password }) + return user + }) +}) + +Cypress.Commands.add('uploadWithApi', (options: UploadOptions) => { + cy.visit('') + cy.fixture('logo.png').then(async img => { + Cypress.log({ + name: 'upload', + consoleProps: () => { + return { options } + }, + message: [`Uploading ${options.fileName} to ${options.parentPath}`], + }) + const blob = await Cypress.Blob.base64StringToBlob(img, 'image/png') + cy.window().then(win => { + win.repository.upload.file({ + file: blobToFile(blob, options.fileName), + ...(options as any), + overwrite: false, + binaryPropertyName: 'Binary', + }) + }) + }) +}) + +const blobToFile = (theBlob: Blob, fileName: string): File => { + const b: any = theBlob + // A Blob() is almost a File() - it's just missing the two properties below which we will add + b.lastModifiedDate = new Date() + b.name = fileName + + // Cast to a File() type + return theBlob as File +} diff --git a/examples/sn-dms-demo/cypress/support/documents.ts b/examples/sn-dms-demo/cypress/support/documents.ts new file mode 100644 index 000000000..19ae31b3c --- /dev/null +++ b/examples/sn-dms-demo/cypress/support/documents.ts @@ -0,0 +1,82 @@ +import Chance = require('chance') +import { resources } from '../../src/assets/resources' + +export const openContextMenu = (name: string | number | RegExp) => { + cy.contains('[data-cy=appbar]', 'Document library', { timeout: 10000 }) + .should('exist') + .get('[data-cy=gridPlaceholder]') + .should('be.hidden') + cy.contains('tr', name) + .click() + .trigger('contextmenu') +} + +export const contextMenuItems = { + preview: 'Preview', + download: 'Download', + rename: 'Rename', + copyTo: 'Copy to', + moveTo: 'Move to', + shareContent: 'Share content', + editProperties: 'Edit properties', + setPermissions: 'Set permissions', + checkOut: 'Check out', + checkIn: 'Check in', + undoChanges: 'Undo changes', + publish: 'Publish', + versions: 'Versions', + delete: 'Delete', +} + +export const newMenuItems = [ + { name: 'document', ext: '.docx' }, + { name: 'sheet', ext: '.xlsx' }, + { name: 'slide', ext: '.pptx' }, + { name: 'text', ext: '.txt' }, + { name: 'folder', ext: '' }, +] + +export const createNewFileName = () => Chance().word() + '.png' + +export const openNew = (action: string) => { + cy.contains('Documents').click() + cy.contains(resources.ADD_NEW).click() + cy.get(`[title="${resources.ADD_NEW} ${action}"]`).click() +} + +export const registerNewUser = () => { + const chance = new Chance() + const currentUser = { email: chance.email({ domain: 'sensenet.com' }), password: chance.string() } + cy.registerUser(currentUser.email, currentUser.password) + return currentUser +} + +export const moveToFolderAndCheckIfFileExists = (copyToPath: string, fileName: string) => { + cy.contains(copyToPath) + .should('be.visible') + .dblclick() + cy.contains('[data-cy=appbar]', copyToPath, { timeout: 10000 }).should('exist') + cy.contains(fileName).should('exist') +} + +export const uploadNewFileAndOpenContextMenuItem = (currentUserEmail: string, fileName: string, menuItem: string) => { + cy.uploadWithApi({ + parentPath: `Root/Profiles/Public/${currentUserEmail}/Document_Library`, + fileName, + }) + cy.contains('div', fileName, { timeout: 10000 }).should('exist') + openContextMenuItem(fileName, menuItem) +} + +export const openContextMenuItem = (fileName: string, menuItem: string) => { + openContextMenu(fileName) + cy.get(`[title="${menuItem}"]`).click() +} + +export const selectPathInListPicker = ({ path, action }: { path: string; action: string }) => { + cy.contains('h6', `${action} content`).should('be.visible') + cy.get('div[role="dialog"]') + .contains('span', path) + .click() + cy.contains('button', `${action} content here`).click() +} diff --git a/examples/sn-dms-demo/cypress/support/index.ts b/examples/sn-dms-demo/cypress/support/index.ts new file mode 100644 index 000000000..43c03b759 --- /dev/null +++ b/examples/sn-dms-demo/cypress/support/index.ts @@ -0,0 +1 @@ +import './commands' diff --git a/examples/sn-dms-demo/cypress/tsconfig.json b/examples/sn-dms-demo/cypress/tsconfig.json new file mode 100644 index 000000000..be9286caf --- /dev/null +++ b/examples/sn-dms-demo/cypress/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "allowJs": true, + "noEmit": true, + "lib": ["es2015", "dom"], + "baseUrl": "../../../node_modules", + "types": ["cypress", "node", "chance"] + }, + "include": ["**/*.*"] +} diff --git a/examples/sn-dms-demo/package.json b/examples/sn-dms-demo/package.json index 6be350b9c..5f23d87fe 100644 --- a/examples/sn-dms-demo/package.json +++ b/examples/sn-dms-demo/package.json @@ -77,6 +77,8 @@ "uuid": "^3.3.2" }, "devDependencies": { + "@cypress/webpack-preprocessor": "^4.0.3", + "@types/chance": "^1.0.2", "@types/enzyme": "^3.1.15", "@types/enzyme-adapter-react-16": "^1.0.3", "@types/jest": "^24.0.9", @@ -94,7 +96,10 @@ "@types/redux-mock-store": "^1.0.0", "@types/uuid": "^3.4.4", "awesome-typescript-loader": "^5.2.1", + "chance": "^1.0.18", "copy-webpack-plugin": "^5.0.0", + "cross-env": "^5.2.0", + "cypress": "^3.3.1", "enzyme": "^3.6.0", "enzyme-adapter-react-16": "^1.5.0", "path-to-regexp": "3.0.0", @@ -115,6 +120,7 @@ }, "scripts": { "start": "webpack-dev-server --port 3000 --display-error-details", + "start:e2e": "cross-env NODE_ENV=test webpack-dev-server --port 3000", "build:webpack": "rimraf build && webpack", "test:jest": "jest", "fix": "npm run fix:prettier && npm run fix:tslint", diff --git a/examples/sn-dms-demo/src/components/ContentList/CellTemplates/RenameCell.tsx b/examples/sn-dms-demo/src/components/ContentList/CellTemplates/RenameCell.tsx index 053017783..69e31e61a 100644 --- a/examples/sn-dms-demo/src/components/ContentList/CellTemplates/RenameCell.tsx +++ b/examples/sn-dms-demo/src/components/ContentList/CellTemplates/RenameCell.tsx @@ -22,6 +22,7 @@ class RenameCell extends React.Component< { newDisplayName: string } > { public state = { newDisplayName: this.props.displayName } + public inputRef: React.RefObject constructor(props: RenameCell['props']) { super(props) @@ -30,12 +31,12 @@ class RenameCell extends React.Component< this.handleKeyUp = this.handleKeyUp.bind(this) this.handleDismiss = this.handleDismiss.bind(this) this.handleClick = this.handleClick.bind(this) + this.inputRef = React.createRef() } - private input!: HTMLInputElement public componentDidMount() { setTimeout(() => { - this.input.focus() + this.inputRef.current && this.inputRef.current.focus() }, 300) } @@ -86,7 +87,7 @@ class RenameCell extends React.Component< onKeyUp={this.handleKeyUp} onChange={this.handleChange} defaultValue={this.props.displayName} - ref={input => (this.input = input as HTMLInputElement)} + ref={this.inputRef} /> diff --git a/examples/sn-dms-demo/src/components/Dialogs/CopyToConfirmDialog.tsx b/examples/sn-dms-demo/src/components/Dialogs/CopyToConfirmDialog.tsx index 930e123ec..e55b71a4a 100644 --- a/examples/sn-dms-demo/src/components/Dialogs/CopyToConfirmDialog.tsx +++ b/examples/sn-dms-demo/src/components/Dialogs/CopyToConfirmDialog.tsx @@ -73,7 +73,7 @@ class CopyToConfirmDialog extends React.Component {matches => ( -
+
{resources.COPY} diff --git a/examples/sn-dms-demo/src/components/Dialogs/EditPropertiesDialog.tsx b/examples/sn-dms-demo/src/components/Dialogs/EditPropertiesDialog.tsx index fe2e88eda..7cfa341c1 100644 --- a/examples/sn-dms-demo/src/components/Dialogs/EditPropertiesDialog.tsx +++ b/examples/sn-dms-demo/src/components/Dialogs/EditPropertiesDialog.tsx @@ -94,7 +94,7 @@ class EditPropertiesDialog extends React.Component< return ( {matches => ( -
+
{resources.EDIT_PROPERTIES} diff --git a/examples/sn-dms-demo/src/components/Dialogs/MoveToConfirmDialog.tsx b/examples/sn-dms-demo/src/components/Dialogs/MoveToConfirmDialog.tsx index df7521983..f818a830f 100644 --- a/examples/sn-dms-demo/src/components/Dialogs/MoveToConfirmDialog.tsx +++ b/examples/sn-dms-demo/src/components/Dialogs/MoveToConfirmDialog.tsx @@ -72,7 +72,7 @@ class MoveToConfirmDialog extends React.Component {matches => ( -
+
{resources.MOVE} diff --git a/examples/sn-dms-demo/src/components/ListToolbar.tsx b/examples/sn-dms-demo/src/components/ListToolbar.tsx index 08a3f8850..e3d989268 100644 --- a/examples/sn-dms-demo/src/components/ListToolbar.tsx +++ b/examples/sn-dms-demo/src/components/ListToolbar.tsx @@ -42,7 +42,7 @@ export class ListToolbar extends React.Component { {matches => { return matches ? ( - +
diff --git a/examples/sn-dms-demo/src/components/Loaders/GridPlaceholder.tsx b/examples/sn-dms-demo/src/components/Loaders/GridPlaceholder.tsx index 921dd247d..1a1492c45 100644 --- a/examples/sn-dms-demo/src/components/Loaders/GridPlaceholder.tsx +++ b/examples/sn-dms-demo/src/components/Loaders/GridPlaceholder.tsx @@ -9,7 +9,7 @@ export const GridPlaceholder = (props: { rowStyle?: React.CSSProperties }) => { return ( -
+
{(Array.apply(null, { length: props.columns || 10 } as any).map(Number.call, Number) as number[]).map(c => (
{(Array.apply(null, { length: props.rows || 5 } as any).map(Number.call, Number) as number[]).map(r => ( diff --git a/examples/sn-dms-demo/src/index.tsx b/examples/sn-dms-demo/src/index.tsx index f9e6a16d4..31afadf86 100644 --- a/examples/sn-dms-demo/src/index.tsx +++ b/examples/sn-dms-demo/src/index.tsx @@ -40,4 +40,10 @@ ReactDOM.render( , document.getElementById('root') as HTMLElement, ) + +// expose repository when run in Cypress +if ((window as any).Cypress) { + ;(window as any).repository = repository +} + registerServiceWorker() diff --git a/examples/sn-dms-demo/src/pages/Login.tsx b/examples/sn-dms-demo/src/pages/Login.tsx index c763e549e..adf53aa01 100644 --- a/examples/sn-dms-demo/src/pages/Login.tsx +++ b/examples/sn-dms-demo/src/pages/Login.tsx @@ -227,7 +227,7 @@ class Login extends React.Component< required={true} style={styles.formControl}> this.handleEmailBlur(event)} onChange={event => this.handleEmailChange(event)} fullWidth={true} @@ -244,7 +244,7 @@ class Login extends React.Component< style={styles.formControl}> this.handlePasswordBlur(event)} onChange={event => this.handlePasswordChange(event)} fullWidth={true} diff --git a/examples/sn-dms-demo/src/pages/Registration.tsx b/examples/sn-dms-demo/src/pages/Registration.tsx index a9546d932..4d813fc74 100644 --- a/examples/sn-dms-demo/src/pages/Registration.tsx +++ b/examples/sn-dms-demo/src/pages/Registration.tsx @@ -228,7 +228,7 @@ class Registration extends React.Component< confirmPasswordError: true, }) } - if (!this.props.isNotARobot) { + if (!this.props.isNotARobot && process.env.NODE_ENV !== 'test') { valid = false this.setState({ captchaErrorMessage: resources.CAPTCHA_ERROR, @@ -285,7 +285,7 @@ class Registration extends React.Component< required={true} style={styles.formControl}> this.handleEmailBlur(event)} onChange={event => this.handleEmailChange(event)} fullWidth={true} @@ -302,7 +302,7 @@ class Registration extends React.Component< style={styles.formControl}> this.handlePasswordBlur(event)} onChange={event => this.handlePasswordChange(event)} fullWidth={true} @@ -318,7 +318,7 @@ class Registration extends React.Component< style={styles.formControl}> this.handleConfirmPasswordBlur(event)} onChange={event => this.handleConfirmPasswordChange(event)} fullWidth={true} diff --git a/package.json b/package.json index c9cc2521b..f8e06c15f 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "lint-staged": "^8.1.5", "prettier": "^1.16.4", "rimraf": "^2.6.3", + "start-server-and-test": "^1.7.13", "ts-jest": "^24.0.1", "tslib": "^1.9.3", "tslint": "^5.15.0", @@ -30,6 +31,9 @@ "typescript": "3.4.2" }, "scripts": { + "cy:run:dms": "cypress run --project ./examples/sn-dms-demo", + "start:dms:e2e": "yarn workspace sn-dms-demo start:e2e", + "test:dms:e2e": "start-server-and-test start:dms:e2e http-get://localhost:3000 cy:run:dms", "snapp": "yarn workspace @sensenet/sn-app", "storybook": "yarn workspace sn-react-component-docs", "dms": "yarn workspace sn-dms-demo", @@ -42,7 +46,7 @@ "test:coverage": "jest --coverage", "clean": "lerna clean", "fix": "lerna run fix --parallel", - "lint": "lerna run lint --parallel" + "lint": "lerna run lint" }, "husky": { "hooks": { diff --git a/packages/sn-client-core/src/index.ts b/packages/sn-client-core/src/index.ts index 410c26d80..9fbb19ab9 100644 --- a/packages/sn-client-core/src/index.ts +++ b/packages/sn-client-core/src/index.ts @@ -1,7 +1,7 @@ export { BypassAuthentication } from './Authentication/BypassAuthentication' export { FormsAuthenticationService } from './Authentication/FormsAuthenticationService' export { Repository } from './Repository/Repository' -export { Upload } from './Repository/Upload' +export * from './Repository/Upload' export { AuthenticationService } from './Authentication/AuthenticationService' export { LoginState } from './Authentication/LoginState' export { ConstantContent } from './Repository/ConstantContent' diff --git a/scripts/sendscreenshots.sh b/scripts/sendscreenshots.sh new file mode 100644 index 000000000..8da153e68 --- /dev/null +++ b/scripts/sendscreenshots.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [[ -z $(find $SCREENSHOTS_DIR -name '*.png' -type f -print -quit) ]]; then + echo "No screenshots found" + exit 0 +fi + +sendSlackMessage() { + curl -X POST -H "Authorization: Bearer $SLACK_TOKEN" \ + -H 'Content-type: application/json' \ + --data '{"channel":"CJ6NC2VTN","text":"'"$1"'"}' \ + https://slack.com/api/chat.postMessage +} + +sendSlackMessage "There were e2e errors in $TRAVIS_BUILD_WEB_URL\nHere comes the screenshots 🤖" + +find $SCREENSHOTS_DIR -name '*.png' -type f | while IFS= read -r FILE; do + echo "Uploading $FILE..." + curl -F file=@"$FILE" -F channels=CJ6NC2VTN -H "Authorization: Bearer $SLACK_TOKEN" https://slack.com/api/files.upload +done diff --git a/yarn.lock b/yarn.lock index 0fd55bfe1..c36e6058c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,7 +29,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.4.3": +"@babel/core@^7.0.1", "@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.4.3": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.3.tgz#198d6d3af4567be3989550d97e068de94503074f" integrity sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA== @@ -783,7 +783,7 @@ js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.4.1": +"@babel/preset-env@^7.0.0", "@babel/preset-env@^7.1.6", "@babel/preset-env@^7.4.1": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.4.3.tgz#e71e16e123dc0fbf65a52cbcbcefd072fbd02880" integrity sha512-FYbZdV12yHdJU5Z70cEg0f6lvtpZ8jFSDakTm7WXeJbLXh4R0ztGEu/SW7G1nJ2ZvKwDhz8YrbA84eYyprmGqw== @@ -926,6 +926,37 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@cypress/listr-verbose-renderer@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/webpack-preprocessor@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-4.0.3.tgz#9f1029a4293f261c5a4a6e1e764a1a4ae6a09a66" + integrity sha512-gw6QNif0UaMW1FDl5tej14isvDWbONib9t1iXGlWUaz0/pEdIvp6ik7mnOaph/IixkQXtmeOJ8CWj+995Pj47w== + dependencies: + bluebird "3.5.0" + debug "3.1.0" + lodash.clonedeep "4.5.0" + optionalDependencies: + "@babel/core" "^7.0.1" + "@babel/preset-env" "^7.0.0" + babel-loader "^8.0.2" + +"@cypress/xvfb@1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + "@date-io/core@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.1.0.tgz#b7b8fbd9b5e57cc6b55a5af2d98394eafdf42921" @@ -2621,6 +2652,11 @@ dependencies: "@babel/types" "^7.3.0" +"@types/chance@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/chance/-/chance-1.0.2.tgz#e6a766b5ca4103860bf7e0d689a04731918b4fb8" + integrity sha512-3SHPmCuwejJBdC+eZH7/dhI3Id5DJjbDqoySEb/JwlMZwBCh+/fSq6WiFsJzfUbLlJgYtAlKlRAmccpDcWnpyQ== + "@types/cheerio@*": version "0.22.11" resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.11.tgz#61c0facf9636d14ba5f77fc65ed8913aa845d717" @@ -3279,6 +3315,11 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -3351,6 +3392,11 @@ aproba@^2.0.0: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== +arch@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + integrity sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg== + are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -3542,6 +3588,13 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== +async@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + dependencies: + lodash "^4.17.10" + async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -3674,7 +3727,7 @@ babel-jest@^24.7.0: chalk "^2.4.2" slash "^2.0.0" -babel-loader@8.0.5, babel-loader@^8.0.5: +babel-loader@8.0.5, babel-loader@^8.0.2, babel-loader@^8.0.5: version "8.0.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" integrity sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw== @@ -4082,7 +4135,12 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3: +bluebird@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" + integrity sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw= + +bluebird@3.5.4, bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.4" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== @@ -4285,6 +4343,11 @@ btoa-lite@^1.0.0: resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -4384,6 +4447,13 @@ cache-loader@^1.2.2: neo-async "^2.5.0" schema-utils "^0.4.2" +cachedir@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-1.3.0.tgz#5e01928bf2d95b5edd94b0942188246740e0dbc4" + integrity sha512-O1ji32oyON9laVPJL1IZ5bmwd2cB46VfpxkDequezH+15FDzzVddEyrGEeX4WusDSqKxdyFdDQDEG1yo1GoWkg== + dependencies: + os-homedir "^1.0.1" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -4494,7 +4564,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3. escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -4505,6 +4575,11 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chance@^1.0.18: + version "1.0.18" + resolved "https://registry.yarnpkg.com/chance/-/chance-1.0.18.tgz#79788fe6fca4c338bf404321c347eecc80f969ee" + integrity sha512-g9YLQVHVZS/3F+zIicfB58vjcxopvYQRp7xHzvyDFDhXH1aRZI/JhwSAO0X5qYiQluoGnaNAU6wByD2KTxJN1A== + change-emitter@^0.1.2: version "0.1.6" resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" @@ -4530,6 +4605,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +check-more-types@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + check-types@^7.3.0: version "7.4.0" resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" @@ -4632,6 +4712,13 @@ cli-boxes@^1.0.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + cli-cursor@^2.0.0, cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -4639,6 +4726,11 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= + cli-table3@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" @@ -4785,6 +4877,11 @@ comma-separated-tokens@^1.0.0: dependencies: trim "0.0.1" +commander@2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== + commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -4805,7 +4902,7 @@ commander@~2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -common-tags@^1.8.0: +common-tags@1.8.0, common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== @@ -4858,7 +4955,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.6.0: +concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -5173,6 +5270,14 @@ create-react-context@^0.2.1, create-react-context@^0.2.2: fbjs "^0.8.0" gud "^1.0.0" +cross-env@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" + integrity sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg== + dependencies: + cross-spawn "^6.0.5" + is-windows "^1.0.0" + cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -5361,6 +5466,43 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cypress@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-3.3.1.tgz#8a127b1d9fa74bff21f111705abfef58d595fdef" + integrity sha512-JIo47ZD9P3jAw7oaK7YKUoODzszJbNw41JmBrlMMiupHOlhmXvZz75htuo7mfRFPC9/1MDQktO4lX/V2+a6lGQ== + dependencies: + "@cypress/listr-verbose-renderer" "0.4.1" + "@cypress/xvfb" "1.2.4" + arch "2.1.1" + bluebird "3.5.0" + cachedir "1.3.0" + chalk "2.4.2" + check-more-types "2.24.0" + commander "2.15.1" + common-tags "1.8.0" + debug "3.2.6" + execa "0.10.0" + executable "4.1.1" + extract-zip "1.6.7" + fs-extra "4.0.1" + getos "3.1.1" + glob "7.1.3" + is-ci "1.2.1" + is-installed-globally "0.1.0" + lazy-ass "1.6.0" + listr "0.12.0" + lodash "4.17.11" + log-symbols "2.2.0" + minimist "1.2.0" + moment "2.24.0" + ramda "0.24.1" + request "2.88.0" + request-progress "0.4.0" + supports-color "5.5.0" + tmp "0.1.0" + url "0.11.0" + yauzl "2.10.0" + d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" @@ -5425,14 +5567,14 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: +debug@3.2.6, debug@^3.1.0, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@4.1.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -5844,7 +5986,7 @@ dotenv@^7.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== -duplexer@^0.1.1: +duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= @@ -6178,6 +6320,19 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + eventemitter3@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" @@ -6213,7 +6368,7 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.10.0: +execa@0.10.0, execa@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw== @@ -6226,6 +6381,19 @@ execa@^0.10.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.11.0.tgz#0b3c71daf9b9159c252a863cd981af1b4410d97a" + integrity sha512-k5AR22vCt1DcfeiRixW46U5tMLtBg44ssdJM9PiXw3D8Bn5qyxFCSnKY/eR22y+ctFDGPqafpaXg2G4Emyua4A== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -6252,11 +6420,23 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +executable@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + exenv@^1.2.0, exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -6373,6 +6553,16 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +extract-zip@1.6.7: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" @@ -6456,6 +6646,20 @@ fbjs@^0.8.0, fbjs@^0.8.1, fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -6691,6 +6895,20 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= + +fs-extra@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" + integrity sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^3.0.0" + universalify "^0.1.0" + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -6861,6 +7079,13 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +getos@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.1.1.tgz#967a813cceafee0156b0483f7cffa5b3eff029c5" + integrity sha512-oUP1rnEhAr97rkitiszGP9EgDVYnmchgFzfqRzSkgtfv7ai6tEi7Ko8GgjNXts7VLWEqrTWyhsOKLe5C5b/Zkg== + dependencies: + async "2.6.1" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -6935,7 +7160,7 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob@7.1.3, glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== @@ -6947,6 +7172,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + dependencies: + ini "^1.3.4" + global-modules@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" @@ -7224,6 +7456,16 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoek@5.x.x: + version "5.0.4" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-5.0.4.tgz#0f7fa270a1cafeb364a4b2ddfaa33f864e4157da" + integrity sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w== + +hoek@6.x.x: + version "6.1.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-6.1.3.tgz#73b7d33952e01fe27a38b0457294b79dd8da242c" + integrity sha512-YXXAAhmF9zpQbC7LEcREFtXfGq5K1fmd+4PHkBq8NUqmzW3G+Dq10bI/i0KucLRwss3YYFQ0fSfoxBZYiGUqtQ== + hoist-non-react-statics@^2.3.1: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -7772,7 +8014,7 @@ is-callable@^1.1.3, is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-ci@^1.0.10: +is-ci@1.2.1, is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== @@ -7908,6 +8150,14 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-installed-globally@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" @@ -8036,7 +8286,7 @@ is-whitespace-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" integrity sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ== -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -8061,6 +8311,13 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isemail@3.x.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.2.0.tgz#59310a021931a9fb06bbb51e155ce0b3f236832c" + integrity sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg== + dependencies: + punycode "2.x.x" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -8514,6 +8771,15 @@ jest@^24.1.0, jest@^24.7.0: import-local "^2.0.0" jest-cli "^24.7.0" +joi@^13.0.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-13.7.0.tgz#cfd85ebfe67e8a1900432400b4d03bbd93fb879f" + integrity sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q== + dependencies: + hoek "5.x.x" + isemail "3.x.x" + topo "3.x.x" + js-beautify@^1.8.9: version "1.9.1" resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.1.tgz#6f9ef915f5d8d92b9f907606fce63795884c8040" @@ -8683,6 +8949,13 @@ jsonfile@^2.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" + integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY= + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -8808,6 +9081,11 @@ kleur@^3.0.2: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== +lazy-ass@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + lazy-cache@^0.2.3: version "0.2.7" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" @@ -8938,6 +9216,20 @@ listr-silent-renderer@^1.1.1: resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= +listr-update-renderer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" + integrity sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + listr-update-renderer@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" @@ -8952,6 +9244,16 @@ listr-update-renderer@^0.5.0: log-update "^2.3.0" strip-ansi "^3.0.1" +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + listr-verbose-renderer@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" @@ -8962,6 +9264,28 @@ listr-verbose-renderer@^0.5.0: date-fns "^1.27.2" figures "^2.0.0" +listr@0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" + integrity sha1-a84sD1YD+klYDqF81qAMwOX6RRo= + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.2.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.0.0-beta.11" + stream-to-observable "^0.1.0" + strip-ansi "^3.0.1" + listr@^0.14.2: version "0.14.3" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" @@ -9062,7 +9386,7 @@ lodash.camelcase@^4.3.0: resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= -lodash.clonedeep@^4.5.0: +lodash.clonedeep@4.5.0, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= @@ -9107,6 +9431,11 @@ lodash.mergewith@^4.6.1: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" @@ -9152,11 +9481,18 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@>4.17.4, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: +lodash@4.17.11, lodash@>4.17.4, lodash@^4.0.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== +log-symbols@2.2.0, log-symbols@^2.1.0, log-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -9164,12 +9500,13 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^2.1.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= dependencies: - chalk "^2.0.1" + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" log-update@^2.3.0: version "2.3.0" @@ -9317,6 +9654,11 @@ map-or-similar@^1.5.0: resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" integrity sha1-beJlMXSt+12e3DPGnT6Sobdvrwg= +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -9604,7 +9946,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -9661,7 +10003,7 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@0.5.x, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -9673,7 +10015,7 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -moment@^2.22.2, moment@^2.24.0: +moment@2.24.0, moment@^2.22.2, moment@^2.24.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== @@ -9836,6 +10178,11 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" +node-eta@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/node-eta/-/node-eta-0.1.1.tgz#4066109b39371c761c72b7ebda9a9ea0a5de121f" + integrity sha1-QGYQmzk3HHYccrfr2pqeoKXeEh8= + node-fetch-npm@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" @@ -10278,6 +10625,11 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -10324,6 +10676,16 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -10336,7 +10698,7 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: +os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= @@ -10693,6 +11055,13 @@ path-type@^3.0.0: dependencies: pify "^3.0.0" +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= + dependencies: + through "~2.3" + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -10704,12 +11073,17 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -pify@^2.0.0, pify@^2.3.0: +pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -11054,6 +11428,13 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +ps-tree@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" + integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== + dependencies: + event-stream "=3.3.4" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -11106,16 +11487,16 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -11193,6 +11574,11 @@ railroad-diagrams@^1.0.0: resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= +ramda@0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + integrity sha1-w7d1UZfzW43DUCIoJixMkd22uFc= + ramda@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.21.0.tgz#a001abedb3ff61077d4ff1d577d44de77e8d0a35" @@ -12172,6 +12558,14 @@ replace-ext@1.0.0: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= +request-progress@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.4.0.tgz#c1954e39086aa85269c5660bcee0142a6a70d7e7" + integrity sha1-wZVOOQhqqFJpxWYLzuAUKmpw1+c= + dependencies: + node-eta "^0.1.1" + throttleit "^0.0.2" + request-promise-core@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" @@ -12188,7 +12582,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@2.88.0, request@^2.87.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -12286,6 +12680,14 @@ resolve@1.x, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: dependencies: path-parse "^1.0.6" +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -12351,6 +12753,18 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= + +rxjs@^5.0.0-beta.11: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== + dependencies: + symbol-observable "1.0.1" + rxjs@^6.1.0, rxjs@^6.3.3, rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -12885,6 +13299,13 @@ split2@^2.0.0: dependencies: through2 "^2.0.2" +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= + dependencies: + through "2" + split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -12934,6 +13355,19 @@ staged-git-files@1.1.2: resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.2.tgz#4326d33886dc9ecfa29a6193bf511ba90a46454b" integrity sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA== +start-server-and-test@^1.7.13: + version "1.7.13" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-1.7.13.tgz#fbf8d149b41ba8297773bca3660e455b67ce9849" + integrity sha512-vAnsQvLgzDN3kVo0mwD7tzbjWkZq9OmSvoDxwc6C1I0Ivq7chCqdcyssYcBg4wp6Q4DHHQiKZUytWggKuvoWvQ== + dependencies: + bluebird "3.5.4" + check-more-types "2.24.0" + debug "4.1.1" + execa "0.11.0" + lazy-ass "1.6.0" + ps-tree "1.2.0" + wait-on "3.2.0" + state-toggle@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" @@ -12970,6 +13404,13 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= + dependencies: + duplexer "~0.1.1" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -12994,6 +13435,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +stream-to-observable@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" + integrity sha1-Rb8dny19wJvtgfHDB8Qw5ouEz/4= + string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" @@ -13209,18 +13655,18 @@ stylis@^3.5.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^5.3.0, supports-color@^5.5.0: +supports-color@5.5.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^6.0.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" @@ -13256,6 +13702,11 @@ svgo@^1.1.1: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= + symbol-observable@1.2.0, symbol-observable@^1.0.3, symbol-observable@^1.0.4, symbol-observable@^1.1.0, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -13400,6 +13851,11 @@ throat@^4.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +throttleit@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8= + through2@^2.0.0, through2@^2.0.2: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -13408,7 +13864,7 @@ through2@^2.0.0, through2@^2.0.2: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -13445,6 +13901,13 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -13516,6 +13979,13 @@ toggle-selection@^1.0.3: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= +topo@3.x.x: + version "3.0.3" + resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" + integrity sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ== + dependencies: + hoek "6.x.x" + toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" @@ -14019,7 +14489,7 @@ url-template@^2.0.8: resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= -url@^0.11.0: +url@0.11.0, url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= @@ -14168,6 +14638,17 @@ w3c-xmlserializer@^1.0.1: webidl-conversions "^4.0.2" xml-name-validator "^3.0.0" +wait-on@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-3.2.0.tgz#c83924df0fc42a675c678324c49c769d378bcb85" + integrity sha512-QUGNKlKLDyY6W/qHdxaRlXUAgLPe+3mLL/tRByHpRNcHs/c7dZXbu+OnJWGNux6tU1WFh/Z8aEwvbuzSAu79Zg== + dependencies: + core-js "^2.5.7" + joi "^13.0.0" + minimist "^1.2.0" + request "^2.88.0" + rx "^4.1.0" + walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -14639,6 +15120,21 @@ yargs@^12.0.1, yargs@^12.0.2, yargs@^12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yauzl@2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" + yup@^0.26.10: version "0.26.10" resolved "https://registry.yarnpkg.com/yup/-/yup-0.26.10.tgz#3545839663289038faf25facfc07e11fd67c0cb1"