diff --git a/.eslintrc b/.eslintrc
index 79ef6b7..6363bb2 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -7,7 +7,8 @@
"env": {
"browser": true,
"es6": true,
- "node": true
+ "node": true,
+ "mocha": true
},
"globals": {
@@ -21,7 +22,9 @@
"it": true,
"expect": true,
"sinon": true,
- "Clusterize": true
+ "Clusterize": true,
+ "cy": true,
+ "Cypress": true
},
"plugins": [
diff --git a/cypress.json b/cypress.json
new file mode 100644
index 0000000..548d77f
--- /dev/null
+++ b/cypress.json
@@ -0,0 +1,3 @@
+{
+ "baseUrl": "http://localhost:8989"
+}
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/fixtures/profile.json b/cypress/fixtures/profile.json
new file mode 100644
index 0000000..b6c355c
--- /dev/null
+++ b/cypress/fixtures/profile.json
@@ -0,0 +1,5 @@
+{
+ "id": 8739,
+ "name": "Jane",
+ "email": "jane@example.com"
+}
\ No newline at end of file
diff --git a/cypress/fixtures/users.json b/cypress/fixtures/users.json
new file mode 100644
index 0000000..79b699a
--- /dev/null
+++ b/cypress/fixtures/users.json
@@ -0,0 +1,232 @@
+[
+ {
+ "id": 1,
+ "name": "Leanne Graham",
+ "username": "Bret",
+ "email": "Sincere@april.biz",
+ "address": {
+ "street": "Kulas Light",
+ "suite": "Apt. 556",
+ "city": "Gwenborough",
+ "zipcode": "92998-3874",
+ "geo": {
+ "lat": "-37.3159",
+ "lng": "81.1496"
+ }
+ },
+ "phone": "1-770-736-8031 x56442",
+ "website": "hildegard.org",
+ "company": {
+ "name": "Romaguera-Crona",
+ "catchPhrase": "Multi-layered client-server neural-net",
+ "bs": "harness real-time e-markets"
+ }
+ },
+ {
+ "id": 2,
+ "name": "Ervin Howell",
+ "username": "Antonette",
+ "email": "Shanna@melissa.tv",
+ "address": {
+ "street": "Victor Plains",
+ "suite": "Suite 879",
+ "city": "Wisokyburgh",
+ "zipcode": "90566-7771",
+ "geo": {
+ "lat": "-43.9509",
+ "lng": "-34.4618"
+ }
+ },
+ "phone": "010-692-6593 x09125",
+ "website": "anastasia.net",
+ "company": {
+ "name": "Deckow-Crist",
+ "catchPhrase": "Proactive didactic contingency",
+ "bs": "synergize scalable supply-chains"
+ }
+ },
+ {
+ "id": 3,
+ "name": "Clementine Bauch",
+ "username": "Samantha",
+ "email": "Nathan@yesenia.net",
+ "address": {
+ "street": "Douglas Extension",
+ "suite": "Suite 847",
+ "city": "McKenziehaven",
+ "zipcode": "59590-4157",
+ "geo": {
+ "lat": "-68.6102",
+ "lng": "-47.0653"
+ }
+ },
+ "phone": "1-463-123-4447",
+ "website": "ramiro.info",
+ "company": {
+ "name": "Romaguera-Jacobson",
+ "catchPhrase": "Face to face bifurcated interface",
+ "bs": "e-enable strategic applications"
+ }
+ },
+ {
+ "id": 4,
+ "name": "Patricia Lebsack",
+ "username": "Karianne",
+ "email": "Julianne.OConner@kory.org",
+ "address": {
+ "street": "Hoeger Mall",
+ "suite": "Apt. 692",
+ "city": "South Elvis",
+ "zipcode": "53919-4257",
+ "geo": {
+ "lat": "29.4572",
+ "lng": "-164.2990"
+ }
+ },
+ "phone": "493-170-9623 x156",
+ "website": "kale.biz",
+ "company": {
+ "name": "Robel-Corkery",
+ "catchPhrase": "Multi-tiered zero tolerance productivity",
+ "bs": "transition cutting-edge web services"
+ }
+ },
+ {
+ "id": 5,
+ "name": "Chelsey Dietrich",
+ "username": "Kamren",
+ "email": "Lucio_Hettinger@annie.ca",
+ "address": {
+ "street": "Skiles Walks",
+ "suite": "Suite 351",
+ "city": "Roscoeview",
+ "zipcode": "33263",
+ "geo": {
+ "lat": "-31.8129",
+ "lng": "62.5342"
+ }
+ },
+ "phone": "(254)954-1289",
+ "website": "demarco.info",
+ "company": {
+ "name": "Keebler LLC",
+ "catchPhrase": "User-centric fault-tolerant solution",
+ "bs": "revolutionize end-to-end systems"
+ }
+ },
+ {
+ "id": 6,
+ "name": "Mrs. Dennis Schulist",
+ "username": "Leopoldo_Corkery",
+ "email": "Karley_Dach@jasper.info",
+ "address": {
+ "street": "Norberto Crossing",
+ "suite": "Apt. 950",
+ "city": "South Christy",
+ "zipcode": "23505-1337",
+ "geo": {
+ "lat": "-71.4197",
+ "lng": "71.7478"
+ }
+ },
+ "phone": "1-477-935-8478 x6430",
+ "website": "ola.org",
+ "company": {
+ "name": "Considine-Lockman",
+ "catchPhrase": "Synchronised bottom-line interface",
+ "bs": "e-enable innovative applications"
+ }
+ },
+ {
+ "id": 7,
+ "name": "Kurtis Weissnat",
+ "username": "Elwyn.Skiles",
+ "email": "Telly.Hoeger@billy.biz",
+ "address": {
+ "street": "Rex Trail",
+ "suite": "Suite 280",
+ "city": "Howemouth",
+ "zipcode": "58804-1099",
+ "geo": {
+ "lat": "24.8918",
+ "lng": "21.8984"
+ }
+ },
+ "phone": "210.067.6132",
+ "website": "elvis.io",
+ "company": {
+ "name": "Johns Group",
+ "catchPhrase": "Configurable multimedia task-force",
+ "bs": "generate enterprise e-tailers"
+ }
+ },
+ {
+ "id": 8,
+ "name": "Nicholas Runolfsdottir V",
+ "username": "Maxime_Nienow",
+ "email": "Sherwood@rosamond.me",
+ "address": {
+ "street": "Ellsworth Summit",
+ "suite": "Suite 729",
+ "city": "Aliyaview",
+ "zipcode": "45169",
+ "geo": {
+ "lat": "-14.3990",
+ "lng": "-120.7677"
+ }
+ },
+ "phone": "586.493.6943 x140",
+ "website": "jacynthe.com",
+ "company": {
+ "name": "Abernathy Group",
+ "catchPhrase": "Implemented secondary concept",
+ "bs": "e-enable extensible e-tailers"
+ }
+ },
+ {
+ "id": 9,
+ "name": "Glenna Reichert",
+ "username": "Delphine",
+ "email": "Chaim_McDermott@dana.io",
+ "address": {
+ "street": "Dayna Park",
+ "suite": "Suite 449",
+ "city": "Bartholomebury",
+ "zipcode": "76495-3109",
+ "geo": {
+ "lat": "24.6463",
+ "lng": "-168.8889"
+ }
+ },
+ "phone": "(775)976-6794 x41206",
+ "website": "conrad.com",
+ "company": {
+ "name": "Yost and Sons",
+ "catchPhrase": "Switchable contextually-based project",
+ "bs": "aggregate real-time technologies"
+ }
+ },
+ {
+ "id": 10,
+ "name": "Clementina DuBuque",
+ "username": "Moriah.Stanton",
+ "email": "Rey.Padberg@karina.biz",
+ "address": {
+ "street": "Kattie Turnpike",
+ "suite": "Suite 198",
+ "city": "Lebsackbury",
+ "zipcode": "31428-2261",
+ "geo": {
+ "lat": "-38.2386",
+ "lng": "57.2232"
+ }
+ },
+ "phone": "024-648-3804",
+ "website": "ambrose.net",
+ "company": {
+ "name": "Hoeger LLC",
+ "catchPhrase": "Centralized empowering task-force",
+ "bs": "target end-to-end models"
+ }
+ }
+]
\ No newline at end of file
diff --git a/cypress/integration/basic_spec.js b/cypress/integration/basic_spec.js
new file mode 100644
index 0000000..20aa3e6
--- /dev/null
+++ b/cypress/integration/basic_spec.js
@@ -0,0 +1,22 @@
+/* globals DataTable */
+
+describe('Datatable Initialization', function () {
+ it('Initializes datatable correctly', () => {
+ cy.visit('/');
+
+ cy.window()
+ .its('DataTable')
+ .then(DataTable => {
+ const datatable2 = new DataTable('#datatable2', {
+ columns: ['Name', 'Position'],
+ data: [
+ // ['Faris', 'Developer']
+ ]
+ });
+ });
+
+ cy.get('#datatable2 .datatable')
+ .contains('No Data');
+
+ });
+});
diff --git a/cypress/integration/example_spec.js b/cypress/integration/example_spec.js
new file mode 100644
index 0000000..cbd6fee
--- /dev/null
+++ b/cypress/integration/example_spec.js
@@ -0,0 +1,1496 @@
+//
+// **** Kitchen Sink Tests ****
+//
+// This app was developed to demonstrate
+// how to write tests in Cypress utilizing
+// all of the available commands
+//
+// Feel free to modify this spec in your
+// own application as a jumping off point
+
+// Please read our "Introduction to Cypress"
+// https://on.cypress.io/introduction-to-cypress
+
+describe('Kitchen Sink', function () {
+ it('.should() - assert that
is correct', function () {
+ // https://on.cypress.io/visit
+ cy.visit('https://example.cypress.io');
+
+ // Here we've made our first assertion using a '.should()' command.
+ // An assertion is comprised of a chainer, subject, and optional value.
+
+ // https://on.cypress.io/should
+ // https://on.cypress.io/and
+
+ // https://on.cypress.io/title
+ cy.title().should('include', 'Kitchen Sink');
+ // ↲ ↲ ↲
+ // subject chainer value
+ });
+
+ context('Querying', function () {
+ beforeEach(function () {
+ // Visiting our app before each test removes any state build up from
+ // previous tests. Visiting acts as if we closed a tab and opened a fresh one
+ cy.visit('https://example.cypress.io/commands/querying');
+ });
+
+ // Let's query for some DOM elements and make assertions
+ // The most commonly used query is 'cy.get()', you can
+ // think of this like the '$' in jQuery
+
+ it('cy.get() - query DOM elements', function () {
+ // https://on.cypress.io/get
+
+ // Get DOM elements by id
+ cy.get('#query-btn').should('contain', 'Button');
+
+ // Get DOM elements by class
+ cy.get('.query-btn').should('contain', 'Button');
+
+ cy.get('#querying .well>button:first').should('contain', 'Button');
+ // ↲
+ // Use CSS selectors just like jQuery
+ });
+
+ it('cy.contains() - query DOM elements with matching content', function () {
+ // https://on.cypress.io/contains
+ cy.get('.query-list')
+ .contains('bananas').should('have.class', 'third');
+
+ // we can pass a regexp to `.contains()`
+ cy.get('.query-list')
+ .contains(/^b\w+/).should('have.class', 'third');
+
+ cy.get('.query-list')
+ .contains('apples').should('have.class', 'first');
+
+ // passing a selector to contains will yield the selector containing the text
+ cy.get('#querying')
+ .contains('ul', 'oranges').should('have.class', 'query-list');
+
+ // `.contains()` will favor input[type='submit'],
+ // button, a, and label over deeper elements inside them
+ // this will not yield the inside the button,
+ // but the itself
+ cy.get('.query-button')
+ .contains('Save Form').should('have.class', 'btn');
+ });
+
+ it('.within() - query DOM elements within a specific element', function () {
+ // https://on.cypress.io/within
+ cy.get('.query-form').within(function () {
+ cy.get('input:first').should('have.attr', 'placeholder', 'Email');
+ cy.get('input:last').should('have.attr', 'placeholder', 'Password');
+ });
+ });
+
+ it('cy.root() - query the root DOM element', function () {
+ // https://on.cypress.io/root
+ // By default, root is the document
+ cy.root().should('match', 'html');
+
+ cy.get('.query-ul').within(function () {
+ // In this within, the root is now the ul DOM element
+ cy.root().should('have.class', 'query-ul');
+ });
+ });
+ });
+
+ context('Traversal', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/traversal');
+ });
+
+ // Let's query for some DOM elements and make assertions
+
+ it('.children() - get child DOM elements', function () {
+ // https://on.cypress.io/children
+ cy.get('.traversal-breadcrumb').children('.active')
+ .should('contain', 'Data');
+ });
+
+ it('.closest() - get closest ancestor DOM element', function () {
+ // https://on.cypress.io/closest
+ cy.get('.traversal-badge').closest('ul')
+ .should('have.class', 'list-group');
+ });
+
+ it('.eq() - get a DOM element at a specific index', function () {
+ // https://on.cypress.io/eq
+ cy.get('.traversal-list>li').eq(1).should('contain', 'siamese');
+ });
+
+ it('.filter() - get DOM elements that match the selector', function () {
+ // https://on.cypress.io/filter
+ cy.get('.traversal-nav>li').filter('.active').should('contain', 'About');
+ });
+
+ it('.find() - get descendant DOM elements of the selector', function () {
+ // https://on.cypress.io/find
+ cy.get('.traversal-pagination').find('li').find('a')
+ .should('have.length', 7);
+ });
+
+ it('.first() - get first DOM element', function () {
+ // https://on.cypress.io/first
+ cy.get('.traversal-table td').first().should('contain', '1');
+ });
+
+ it('.last() - get last DOM element', function () {
+ // https://on.cypress.io/last
+ cy.get('.traversal-buttons .btn').last().should('contain', 'Submit');
+ });
+
+ it('.next() - get next sibling DOM element', function () {
+ // https://on.cypress.io/next
+ cy.get('.traversal-ul').contains('apples').next().should('contain', 'oranges');
+ });
+
+ it('.nextAll() - get all next sibling DOM elements', function () {
+ // https://on.cypress.io/nextall
+ cy.get('.traversal-next-all').contains('oranges')
+ .nextAll().should('have.length', 3);
+ });
+
+ it('.nextUntil() - get next sibling DOM elements until next el', function () {
+ // https://on.cypress.io/nextuntil
+ cy.get('#veggies').nextUntil('#nuts').should('have.length', 3);
+ });
+
+ it('.not() - remove DOM elements from set of DOM elements', function () {
+ // https://on.cypress.io/not
+ cy.get('.traversal-disabled .btn').not('[disabled]').should('not.contain', 'Disabled');
+ });
+
+ it('.parent() - get parent DOM element from DOM elements', function () {
+ // https://on.cypress.io/parent
+ cy.get('.traversal-mark').parent().should('contain', 'Morbi leo risus');
+ });
+
+ it('.parents() - get parent DOM elements from DOM elements', function () {
+ // https://on.cypress.io/parents
+ cy.get('.traversal-cite').parents().should('match', 'blockquote');
+ });
+
+ it('.parentsUntil() - get parent DOM elements from DOM elements until el', function () {
+ // https://on.cypress.io/parentsuntil
+ cy.get('.clothes-nav').find('.active').parentsUntil('.clothes-nav')
+ .should('have.length', 2);
+ });
+
+ it('.prev() - get previous sibling DOM element', function () {
+ // https://on.cypress.io/prev
+ cy.get('.birds').find('.active').prev().should('contain', 'Lorikeets');
+ });
+
+ it('.prevAll() - get all previous sibling DOM elements', function () {
+ // https://on.cypress.io/prevAll
+ cy.get('.fruits-list').find('.third').prevAll().should('have.length', 2);
+ });
+
+ it('.prevUntil() - get all previous sibling DOM elements until el', function () {
+ // https://on.cypress.io/prevUntil
+ cy.get('.foods-list').find('#nuts').prevUntil('#veggies');
+ });
+
+ it('.siblings() - get all sibling DOM elements', function () {
+ // https://on.cypress.io/siblings
+ cy.get('.traversal-pills .active').siblings().should('have.length', 2);
+ });
+ });
+
+ context('Actions', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/actions');
+ });
+
+ // Let's perform some actions on DOM elements
+ // https://on.cypress.io/interacting-with-elements
+
+ it('.type() - type into a DOM element', function () {
+ // https://on.cypress.io/type
+ cy.get('.action-email')
+ .type('fake@email.com').should('have.value', 'fake@email.com')
+
+ // .type() with special character sequences
+ .type('{leftarrow}{rightarrow}{uparrow}{downarrow}')
+ .type('{del}{selectall}{backspace}')
+
+ // .type() with key modifiers
+ .type('{alt}{option}') // these are equivalent
+ .type('{ctrl}{control}') // these are equivalent
+ .type('{meta}{command}{cmd}') // these are equivalent
+ .type('{shift}')
+
+ // Delay each keypress by 0.1 sec
+ .type('slow.typing@email.com', { delay: 100 })
+ .should('have.value', 'slow.typing@email.com');
+
+ cy.get('.action-disabled')
+ // Ignore error checking prior to type
+ // like whether the input is visible or disabled
+ .type('disabled error checking', { force: true })
+ .should('have.value', 'disabled error checking');
+ });
+
+ it('.focus() - focus on a DOM element', function () {
+ // https://on.cypress.io/focus
+ cy.get('.action-focus').focus()
+ .should('have.class', 'focus')
+ .prev().should('have.attr', 'style', 'color: orange;');
+ });
+
+ it('.blur() - blur off a DOM element', function () {
+ // https://on.cypress.io/blur
+ cy.get('.action-blur').type('I\'m about to blur').blur()
+ .should('have.class', 'error')
+ .prev().should('have.attr', 'style', 'color: red;');
+ });
+
+ it('.clear() - clears an input or textarea element', function () {
+ // https://on.cypress.io/clear
+ cy.get('.action-clear').type('We are going to clear this text')
+ .should('have.value', 'We are going to clear this text')
+ .clear()
+ .should('have.value', '');
+ });
+
+ it('.submit() - submit a form', function () {
+ // https://on.cypress.io/submit
+ cy.get('.action-form')
+ .find('[type="text"]').type('HALFOFF');
+ cy.get('.action-form').submit()
+ .next().should('contain', 'Your form has been submitted!');
+ });
+
+ it('.click() - click on a DOM element', function () {
+ // https://on.cypress.io/click
+ cy.get('.action-btn').click();
+
+ // You can click on 9 specific positions of an element:
+ // -----------------------------------
+ // | topLeft top topRight |
+ // | |
+ // | |
+ // | |
+ // | left center right |
+ // | |
+ // | |
+ // | |
+ // | bottomLeft bottom bottomRight |
+ // -----------------------------------
+
+ // clicking in the center of the element is the default
+ cy.get('#action-canvas').click();
+
+ cy.get('#action-canvas').click('topLeft');
+ cy.get('#action-canvas').click('top');
+ cy.get('#action-canvas').click('topRight');
+ cy.get('#action-canvas').click('left');
+ cy.get('#action-canvas').click('right');
+ cy.get('#action-canvas').click('bottomLeft');
+ cy.get('#action-canvas').click('bottom');
+ cy.get('#action-canvas').click('bottomRight');
+
+ // .click() accepts an x and y coordinate
+ // that controls where the click occurs :)
+
+ cy.get('#action-canvas')
+ .click(80, 75) // click 80px on x coord and 75px on y coord
+ .click(170, 75)
+ .click(80, 165)
+ .click(100, 185)
+ .click(125, 190)
+ .click(150, 185)
+ .click(170, 165);
+
+ // click multiple elements by passing multiple: true
+ cy.get('.action-labels>.label').click({ multiple: true });
+
+ // Ignore error checking prior to clicking
+ // like whether the element is visible, clickable or disabled
+ // this button below is covered by another element.
+ cy.get('.action-opacity>.btn').click({ force: true });
+ });
+
+ it('.dblclick() - double click on a DOM element', function () {
+ // Our app has a listener on 'dblclick' event in our 'scripts.js'
+ // that hides the div and shows an input on double click
+
+ // https://on.cypress.io/dblclick
+ cy.get('.action-div').dblclick().should('not.be.visible');
+ cy.get('.action-input-hidden').should('be.visible');
+ });
+
+ it('cy.check() - check a checkbox or radio element', function () {
+ // By default, .check() will check all
+ // matching checkbox or radio elements in succession, one after another
+
+ // https://on.cypress.io/check
+ cy.get('.action-checkboxes [type="checkbox"]').not('[disabled]')
+ .check().should('be.checked');
+
+ cy.get('.action-radios [type="radio"]').not('[disabled]')
+ .check().should('be.checked');
+
+ // .check() accepts a value argument
+ // that checks only checkboxes or radios
+ // with matching values
+ cy.get('.action-radios [type="radio"]').check('radio1').should('be.checked');
+
+ // .check() accepts an array of values
+ // that checks only checkboxes or radios
+ // with matching values
+ cy.get('.action-multiple-checkboxes [type="checkbox"]')
+ .check(['checkbox1', 'checkbox2']).should('be.checked');
+
+ // Ignore error checking prior to checking
+ // like whether the element is visible, clickable or disabled
+ // this checkbox below is disabled.
+ cy.get('.action-checkboxes [disabled]')
+ .check({ force: true }).should('be.checked');
+
+ cy.get('.action-radios [type="radio"]')
+ .check('radio3', { force: true }).should('be.checked');
+ });
+
+ it('.uncheck() - uncheck a checkbox element', function () {
+ // By default, .uncheck() will uncheck all matching
+ // checkbox elements in succession, one after another
+
+ // https://on.cypress.io/uncheck
+ cy.get('.action-check [type="checkbox"]')
+ .not('[disabled]')
+ .uncheck().should('not.be.checked');
+
+ // .uncheck() accepts a value argument
+ // that unchecks only checkboxes
+ // with matching values
+ cy.get('.action-check [type="checkbox"]')
+ .check('checkbox1')
+ .uncheck('checkbox1').should('not.be.checked');
+
+ // .uncheck() accepts an array of values
+ // that unchecks only checkboxes or radios
+ // with matching values
+ cy.get('.action-check [type="checkbox"]')
+ .check(['checkbox1', 'checkbox3'])
+ .uncheck(['checkbox1', 'checkbox3']).should('not.be.checked');
+
+ // Ignore error checking prior to unchecking
+ // like whether the element is visible, clickable or disabled
+ // this checkbox below is disabled.
+ cy.get('.action-check [disabled]')
+ .uncheck({ force: true }).should('not.be.checked');
+ });
+
+ it('.select() - select an option in a element', function () {
+ // https://on.cypress.io/select
+
+ // Select option with matching text content
+ cy.get('.action-select').select('apples');
+
+ // Select option with matching value
+ cy.get('.action-select').select('fr-bananas');
+
+ // Select options with matching text content
+ cy.get('.action-select-multiple')
+ .select(['apples', 'oranges', 'bananas']);
+
+ // Select options with matching values
+ cy.get('.action-select-multiple')
+ .select(['fr-apples', 'fr-oranges', 'fr-bananas']);
+ });
+
+ it('.scrollIntoView() - scroll an element into view', function () {
+ // https://on.cypress.io/scrollintoview
+
+ // normally all of these buttons are hidden, because they're not within
+ // the viewable area of their parent (we need to scroll to see them)
+ cy.get('#scroll-horizontal button')
+ .should('not.be.visible');
+
+ // scroll the button into view, as if the user had scrolled
+ cy.get('#scroll-horizontal button').scrollIntoView()
+ .should('be.visible');
+
+ cy.get('#scroll-vertical button')
+ .should('not.be.visible');
+
+ // Cypress handles the scroll direction needed
+ cy.get('#scroll-vertical button').scrollIntoView()
+ .should('be.visible');
+
+ cy.get('#scroll-both button')
+ .should('not.be.visible');
+
+ // Cypress knows to scroll to the right and down
+ cy.get('#scroll-both button').scrollIntoView()
+ .should('be.visible');
+ });
+
+ it('cy.scrollTo() - scroll the window or element to a position', function () {
+
+ // https://on.cypress.io/scrollTo
+
+ // You can scroll to 9 specific positions of an element:
+ // -----------------------------------
+ // | topLeft top topRight |
+ // | |
+ // | |
+ // | |
+ // | left center right |
+ // | |
+ // | |
+ // | |
+ // | bottomLeft bottom bottomRight |
+ // -----------------------------------
+
+ // if you chain .scrollTo() off of cy, we will
+ // scroll the entire window
+ cy.scrollTo('bottom');
+
+ cy.get('#scrollable-horizontal').scrollTo('right');
+
+ // or you can scroll to a specific coordinate:
+ // (x axis, y axis) in pixels
+ cy.get('#scrollable-vertical').scrollTo(250, 250);
+
+ // or you can scroll to a specific percentage
+ // of the (width, height) of the element
+ cy.get('#scrollable-both').scrollTo('75%', '25%');
+
+ // control the easing of the scroll (default is 'swing')
+ cy.get('#scrollable-vertical').scrollTo('center', { easing: 'linear' });
+
+ // control the duration of the scroll (in ms)
+ cy.get('#scrollable-both').scrollTo('center', { duration: 2000 });
+ });
+
+ it('.trigger() - trigger an event on a DOM element', function () {
+ // To interact with a range input (slider), we need to set its value and
+ // then trigger the appropriate event to signal it has changed
+
+ // Here, we invoke jQuery's val() method to set the value
+ // and trigger the 'change' event
+
+ // Note that some implementations may rely on the 'input' event,
+ // which is fired as a user moves the slider, but is not supported
+ // by some browsers
+
+ // https://on.cypress.io/trigger
+ cy.get('.trigger-input-range')
+ .invoke('val', 25)
+ .trigger('change')
+ .get('input[type=range]').siblings('p')
+ .should('have.text', '25');
+
+ // See our example recipes for more examples of using trigger
+ // https://on.cypress.io/examples
+ });
+ });
+
+ context('Window', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/window');
+ });
+
+ it('cy.window() - get the global window object', function () {
+ // https://on.cypress.io/window
+ cy.window().should('have.property', 'top');
+ });
+
+ it('cy.document() - get the document object', function () {
+ // https://on.cypress.io/document
+ cy.document().should('have.property', 'charset').and('eq', 'UTF-8');
+ });
+
+ it('cy.title() - get the title', function () {
+ // https://on.cypress.io/title
+ cy.title().should('include', 'Kitchen Sink');
+ });
+ });
+
+ context('Viewport', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/viewport');
+ });
+
+ it('cy.viewport() - set the viewport size and dimension', function () {
+
+ cy.get('#navbar').should('be.visible');
+
+ // https://on.cypress.io/viewport
+ cy.viewport(320, 480);
+
+ // the navbar should have collapse since our screen is smaller
+ cy.get('#navbar').should('not.be.visible');
+ cy.get('.navbar-toggle').should('be.visible').click();
+ cy.get('.nav').find('a').should('be.visible');
+
+ // lets see what our app looks like on a super large screen
+ cy.viewport(2999, 2999);
+
+ // cy.viewport() accepts a set of preset sizes
+ // to easily set the screen to a device's width and height
+
+ // We added a cy.wait() between each viewport change so you can see
+ // the change otherwise it's a little too fast to see :)
+
+ cy.viewport('macbook-15');
+ cy.wait(200);
+ cy.viewport('macbook-13');
+ cy.wait(200);
+ cy.viewport('macbook-11');
+ cy.wait(200);
+ cy.viewport('ipad-2');
+ cy.wait(200);
+ cy.viewport('ipad-mini');
+ cy.wait(200);
+ cy.viewport('iphone-6+');
+ cy.wait(200);
+ cy.viewport('iphone-6');
+ cy.wait(200);
+ cy.viewport('iphone-5');
+ cy.wait(200);
+ cy.viewport('iphone-4');
+ cy.wait(200);
+ cy.viewport('iphone-3');
+ cy.wait(200);
+
+ // cy.viewport() accepts an orientation for all presets
+ // the default orientation is 'portrait'
+ cy.viewport('ipad-2', 'portrait');
+ cy.wait(200);
+ cy.viewport('iphone-4', 'landscape');
+ cy.wait(200);
+
+ // The viewport will be reset back to the default dimensions
+ // in between tests (the default is set in cypress.json)
+ });
+ });
+
+ context('Location', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/location');
+ });
+
+ // We look at the url to make assertions
+ // about the page's state
+
+ it('cy.hash() - get the current URL hash', function () {
+ // https://on.cypress.io/hash
+ cy.hash().should('be.empty');
+ });
+
+ it('cy.location() - get window.location', function () {
+ // https://on.cypress.io/location
+ cy.location().should(function (location) {
+ expect(location.hash).to.be.empty;
+ expect(location.href).to.eq('https://example.cypress.io/commands/location');
+ expect(location.host).to.eq('example.cypress.io');
+ expect(location.hostname).to.eq('example.cypress.io');
+ expect(location.origin).to.eq('https://example.cypress.io');
+ expect(location.pathname).to.eq('/commands/location');
+ expect(location.port).to.eq('');
+ expect(location.protocol).to.eq('https:');
+ expect(location.search).to.be.empty;
+ });
+ });
+
+ it('cy.url() - get the current URL', function () {
+ // https://on.cypress.io/url
+ cy.url().should('eq', 'https://example.cypress.io/commands/location');
+ });
+ });
+
+ context('Navigation', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io');
+ cy.get('.navbar-nav').contains('Commands').click();
+ cy.get('.dropdown-menu').contains('Navigation').click();
+ });
+
+ it('cy.go() - go back or forward in the browser\'s history', function () {
+ cy.location('pathname').should('include', 'navigation');
+
+ // https://on.cypress.io/go
+ cy.go('back');
+ cy.location('pathname').should('not.include', 'navigation');
+
+ cy.go('forward');
+ cy.location('pathname').should('include', 'navigation');
+
+ // equivalent to clicking back
+ cy.go(-1);
+ cy.location('pathname').should('not.include', 'navigation');
+
+ // equivalent to clicking forward
+ cy.go(1);
+ cy.location('pathname').should('include', 'navigation');
+ });
+
+ it('cy.reload() - reload the page', function () {
+ // https://on.cypress.io/reload
+ cy.reload();
+
+ // reload the page without using the cache
+ cy.reload(true);
+ });
+
+ it('cy.visit() - visit a remote url', function () {
+ // Visit any sub-domain of your current domain
+ // https://on.cypress.io/visit
+
+ // Pass options to the visit
+ cy.visit('https://example.cypress.io/commands/navigation', {
+ timeout: 50000, // increase total time for the visit to resolve
+ onBeforeLoad(contentWindow) {
+ // contentWindow is the remote page's window object
+ },
+ onLoad(contentWindow) {
+ // contentWindow is the remote page's window object
+ }
+ });
+ });
+ });
+
+ context('Assertions', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/assertions');
+ });
+
+ describe('Implicit Assertions', function () {
+
+ it('.should() - make an assertion about the current subject', function () {
+ // https://on.cypress.io/should
+ cy.get('.assertion-table')
+ .find('tbody tr:last').should('have.class', 'success');
+ });
+
+ it('.and() - chain multiple assertions together', function () {
+ // https://on.cypress.io/and
+ cy.get('.assertions-link')
+ .should('have.class', 'active')
+ .and('have.attr', 'href')
+ .and('include', 'cypress.io');
+ });
+ });
+
+ describe('Explicit Assertions', function () {
+ // https://on.cypress.io/assertions
+ it('expect - assert shape of an object', function () {
+ const person = {
+ name: 'Joe',
+ age: 20
+ };
+ expect(person).to.have.all.keys('name', 'age');
+ });
+
+ it('expect - make an assertion about a specified subject', function () {
+ // We can use Chai's BDD style assertions
+ expect(true).to.be.true;
+
+ // Pass a function to should that can have any number
+ // of explicit assertions within it.
+ cy.get('.assertions-p').find('p')
+ .should(function ($p) {
+ // return an array of texts from all of the p's
+ let texts = $p.map(function (i, el) {
+ // https://on.cypress.io/$
+ return Cypress.$(el).text();
+ });
+
+ // jquery map returns jquery object
+ // and .get() convert this to simple array
+ texts = texts.get();
+
+ // array should have length of 3
+ expect(texts).to.have.length(3);
+
+ // set this specific subject
+ expect(texts).to.deep.eq([
+ 'Some text from first p',
+ 'More text from second p',
+ 'And even more text from third p'
+ ]);
+ });
+ });
+ });
+ });
+
+ context('Misc', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/misc');
+ });
+
+ it('.end() - end the command chain', function () {
+ // cy.end is useful when you want to end a chain of commands
+ // and force Cypress to re-query from the root element
+
+ // https://on.cypress.io/end
+ cy.get('.misc-table').within(function () {
+ // ends the current chain and yields null
+ cy.contains('Cheryl').click().end();
+
+ // queries the entire table again
+ cy.contains('Charles').click();
+ });
+ });
+
+ it('cy.exec() - execute a system command', function () {
+ // cy.exec allows you to execute a system command.
+ // so you can take actions necessary for your test,
+ // but outside the scope of Cypress.
+
+ // https://on.cypress.io/exec
+ cy.exec('echo Jane Lane')
+ .its('stdout').should('contain', 'Jane Lane');
+
+ // we can use Cypress.platform string to
+ // select appropriate command
+ // https://on.cypress/io/platform
+ cy.log(`Platform ${Cypress.platform} architecture ${Cypress.arch}`);
+
+ if (Cypress.platform === 'win32') {
+ cy.exec('print cypress.json')
+ .its('stderr').should('be.empty');
+ } else {
+ cy.exec('cat cypress.json')
+ .its('stderr').should('be.empty');
+
+ cy.exec('pwd')
+ .its('code').should('eq', 0);
+ }
+ });
+
+ it('cy.focused() - get the DOM element that has focus', function () {
+ // https://on.cypress.io/focused
+ cy.get('.misc-form').find('#name').click();
+ cy.focused().should('have.id', 'name');
+
+ cy.get('.misc-form').find('#description').click();
+ cy.focused().should('have.id', 'description');
+ });
+
+ it('cy.screenshot() - take a screenshot', function () {
+ // https://on.cypress.io/screenshot
+ cy.screenshot('my-image');
+ });
+
+ it('cy.wrap() - wrap an object', function () {
+ // https://on.cypress.io/wrap
+ cy.wrap({ foo: 'bar' })
+ .should('have.property', 'foo')
+ .and('include', 'bar');
+ });
+ });
+
+ context('Connectors', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/connectors');
+ });
+
+ it('.each() - iterate over an array of elements', function () {
+ // https://on.cypress.io/each
+ cy.get('.connectors-each-ul>li')
+ .each(function ($el, index, $list) {
+ console.log($el, index, $list);
+ });
+ });
+
+ it('.its() - get properties on the current subject', function () {
+ // https://on.cypress.io/its
+ cy.get('.connectors-its-ul>li')
+ // calls the 'length' property yielding that value
+ .its('length')
+ .should('be.gt', 2);
+ });
+
+ it('.invoke() - invoke a function on the current subject', function () {
+ // our div is hidden in our script.js
+ // $('.connectors-div').hide()
+
+ // https://on.cypress.io/invoke
+ cy.get('.connectors-div').should('be.hidden')
+
+ // call the jquery method 'show' on the 'div.container'
+ .invoke('show')
+ .should('be.visible');
+ });
+
+ it('.spread() - spread an array as individual args to callback function', function () {
+ // https://on.cypress.io/spread
+ let arr = ['foo', 'bar', 'baz'];
+
+ cy.wrap(arr).spread(function (foo, bar, baz) {
+ expect(foo).to.eq('foo');
+ expect(bar).to.eq('bar');
+ expect(baz).to.eq('baz');
+ });
+ });
+
+ it('.then() - invoke a callback function with the current subject', function () {
+ // https://on.cypress.io/then
+ cy.get('.connectors-list>li').then(function ($lis) {
+ expect($lis).to.have.length(3);
+ expect($lis.eq(0)).to.contain('Walk the dog');
+ expect($lis.eq(1)).to.contain('Feed the cat');
+ expect($lis.eq(2)).to.contain('Write JavaScript');
+ });
+ });
+ });
+
+ context('Aliasing', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/aliasing');
+ });
+
+ // We alias a DOM element for use later
+ // We don't have to traverse to the element
+ // later in our code, we just reference it with @
+
+ it('.as() - alias a route or DOM element for later use', function () {
+ // this is a good use case for an alias,
+ // we don't want to write this long traversal again
+
+ // https://on.cypress.io/as
+ cy.get('.as-table').find('tbody>tr')
+ .first().find('td').first().find('button').as('firstBtn');
+
+ // maybe do some more testing here...
+
+ // when we reference the alias, we place an
+ // @ in front of it's name
+ cy.get('@firstBtn').click();
+
+ cy.get('@firstBtn')
+ .should('have.class', 'btn-success')
+ .and('contain', 'Changed');
+ });
+ });
+
+ context('Waiting', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/waiting');
+ });
+ // BE CAREFUL of adding unnecessary wait times.
+
+ // https://on.cypress.io/wait
+ it('cy.wait() - wait for a specific amount of time', function () {
+ cy.get('.wait-input1').type('Wait 1000ms after typing');
+ cy.wait(1000);
+ cy.get('.wait-input2').type('Wait 1000ms after typing');
+ cy.wait(1000);
+ cy.get('.wait-input3').type('Wait 1000ms after typing');
+ cy.wait(1000);
+ });
+
+ // Waiting for a specific resource to resolve
+ // is covered within the cy.route() test below
+ });
+
+ context('Network Requests', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/network-requests');
+ });
+
+ // Manage AJAX / XHR requests in your app
+
+ it('cy.server() - control behavior of network requests and responses', function () {
+ // https://on.cypress.io/server
+ cy.server().should(function (server) {
+ // the default options on server
+ // you can override any of these options
+ expect(server.delay).to.eq(0);
+ expect(server.method).to.eq('GET');
+ expect(server.status).to.eq(200);
+ expect(server.headers).to.be.null;
+ expect(server.response).to.be.null;
+ expect(server.onRequest).to.be.undefined;
+ expect(server.onResponse).to.be.undefined;
+ expect(server.onAbort).to.be.undefined;
+
+ // These options control the server behavior
+ // affecting all requests
+
+ // pass false to disable existing route stubs
+ expect(server.enable).to.be.true;
+ // forces requests that don't match your routes to 404
+ expect(server.force404).to.be.false;
+ // whitelists requests from ever being logged or stubbed
+ expect(server.whitelist).to.be.a('function');
+ });
+
+ cy.server({
+ method: 'POST',
+ delay: 1000,
+ status: 422,
+ response: {}
+ });
+
+ // any route commands will now inherit the above options
+ // from the server. anything we pass specifically
+ // to route will override the defaults though.
+ });
+
+ it('cy.request() - make an XHR request', function () {
+ // https://on.cypress.io/request
+ cy.request('https://jsonplaceholder.typicode.com/comments')
+ .should(function (response) {
+ expect(response.status).to.eq(200);
+ expect(response.body).to.have.length(500);
+ expect(response).to.have.property('headers');
+ expect(response).to.have.property('duration');
+ });
+ });
+
+ it('cy.route() - route responses to matching requests', function () {
+ let message = 'whoa, this comment doesn\'t exist';
+ cy.server();
+
+ // **** GET comments route ****
+
+ // https://on.cypress.io/route
+ cy.route(/comments\/1/).as('getComment');
+
+ // we have code that fetches a comment when
+ // the button is clicked in scripts.js
+ cy.get('.network-btn').click();
+
+ // **** Wait ****
+
+ // Wait for a specific resource to resolve
+ // continuing to the next command
+
+ // https://on.cypress.io/wait
+ cy.wait('@getComment').its('status').should('eq', 200);
+
+ // **** POST comment route ****
+
+ // Specify the route to listen to method 'POST'
+ cy.route('POST', '/comments').as('postComment');
+
+ // we have code that posts a comment when
+ // the button is clicked in scripts.js
+ cy.get('.network-post').click();
+ cy.wait('@postComment');
+
+ // get the route
+ cy.get('@postComment').then(function (xhr) {
+ expect(xhr.requestBody).to.include('email');
+ expect(xhr.requestHeaders).to.have.property('Content-Type');
+ expect(xhr.responseBody).to.have.property('name', 'Using POST in cy.route()');
+ });
+
+ // **** Stubbed PUT comment route ****
+ cy.route({
+ method: 'PUT',
+ url: /comments\/\d+/,
+ status: 404,
+ response: { error: message },
+ delay: 500
+ }).as('putComment');
+
+ // we have code that puts a comment when
+ // the button is clicked in scripts.js
+ cy.get('.network-put').click();
+
+ cy.wait('@putComment');
+
+ // our 404 statusCode logic in scripts.js executed
+ cy.get('.network-put-comment').should('contain', message);
+ });
+ });
+
+ context('Files', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/files');
+ });
+ it('cy.fixture() - load a fixture', function () {
+ // Instead of writing a response inline you can
+ // connect a response with a fixture file
+ // located in fixtures folder.
+
+ cy.server();
+
+ // https://on.cypress.io/fixture
+ cy.fixture('example.json').as('comment');
+
+ cy.route(/comments/, '@comment').as('getComment');
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get('.fixture-btn').click();
+
+ cy.wait('@getComment').its('responseBody')
+ .should('have.property', 'name')
+ .and('include', 'Using fixtures to represent data');
+
+ // you can also just write the fixture in the route
+ cy.route(/comments/, 'fixture:example.json').as('getComment');
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get('.fixture-btn').click();
+
+ cy.wait('@getComment').its('responseBody')
+ .should('have.property', 'name')
+ .and('include', 'Using fixtures to represent data');
+
+ // or write fx to represent fixture
+ // by default it assumes it's .json
+ cy.route(/comments/, 'fx:example').as('getComment');
+
+ // we have code that gets a comment when
+ // the button is clicked in scripts.js
+ cy.get('.fixture-btn').click();
+
+ cy.wait('@getComment').its('responseBody')
+ .should('have.property', 'name')
+ .and('include', 'Using fixtures to represent data');
+ });
+
+ it('cy.readFile() - read a files contents', function () {
+ // You can read a file and yield its contents
+ // The filePath is relative to your project's root.
+
+ // https://on.cypress.io/readfile
+ cy.readFile('cypress.json').then(function (json) {
+ expect(json).to.be.an('object');
+ });
+
+ });
+
+ it('cy.writeFile() - write to a file', function () {
+ // You can write to a file with the specified contents
+
+ // Use a response from a request to automatically
+ // generate a fixture file for use later
+ cy.request('https://jsonplaceholder.typicode.com/users')
+ .then(function (response) {
+ // https://on.cypress.io/writefile
+ cy.writeFile('cypress/fixtures/users.json', response.body);
+ });
+ cy.fixture('users').should(function (users) {
+ expect(users[0].name).to.exist;
+ });
+
+ // JavaScript arrays and objects are stringified and formatted into text.
+ cy.writeFile('cypress/fixtures/profile.json', {
+ id: 8739,
+ name: 'Jane',
+ email: 'jane@example.com'
+ });
+
+ cy.fixture('profile').should(function (profile) {
+ expect(profile.name).to.eq('Jane');
+ });
+ });
+ });
+
+ context('Local Storage', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/commands/local-storage');
+ });
+ // Although local storage is automatically cleared
+ // to maintain a clean state in between tests
+ // sometimes we need to clear the local storage manually
+
+ it('cy.clearLocalStorage() - clear all data in local storage', function () {
+ // https://on.cypress.io/clearlocalstorage
+ cy.get('.ls-btn').click().should(function () {
+ expect(localStorage.getItem('prop1')).to.eq('red');
+ expect(localStorage.getItem('prop2')).to.eq('blue');
+ expect(localStorage.getItem('prop3')).to.eq('magenta');
+ });
+
+ // clearLocalStorage() yields the localStorage object
+ cy.clearLocalStorage().should(function (ls) {
+ expect(ls.getItem('prop1')).to.be.null;
+ expect(ls.getItem('prop2')).to.be.null;
+ expect(ls.getItem('prop3')).to.be.null;
+ });
+
+ // **** Clear key matching string in Local Storage ****
+ cy.get('.ls-btn').click().should(function () {
+ expect(localStorage.getItem('prop1')).to.eq('red');
+ expect(localStorage.getItem('prop2')).to.eq('blue');
+ expect(localStorage.getItem('prop3')).to.eq('magenta');
+ });
+
+ cy.clearLocalStorage('prop1').should(function (ls) {
+ expect(ls.getItem('prop1')).to.be.null;
+ expect(ls.getItem('prop2')).to.eq('blue');
+ expect(ls.getItem('prop3')).to.eq('magenta');
+ });
+
+ // **** Clear key's matching regex in Local Storage ****
+ cy.get('.ls-btn').click().should(function () {
+ expect(localStorage.getItem('prop1')).to.eq('red');
+ expect(localStorage.getItem('prop2')).to.eq('blue');
+ expect(localStorage.getItem('prop3')).to.eq('magenta');
+ });
+
+ cy.clearLocalStorage(/prop1|2/).should(function (ls) {
+ expect(ls.getItem('prop1')).to.be.null;
+ expect(ls.getItem('prop2')).to.be.null;
+ expect(ls.getItem('prop3')).to.eq('magenta');
+ });
+ });
+ });
+
+ context('Cookies', function () {
+ beforeEach(function () {
+ Cypress.Cookies.debug(true);
+
+ cy.visit('https://example.cypress.io/commands/cookies');
+
+ // clear cookies again after visiting to remove
+ // any 3rd party cookies picked up such as cloudflare
+ cy.clearCookies();
+ });
+
+ it('cy.getCookie() - get a browser cookie', function () {
+ // https://on.cypress.io/getcookie
+ cy.get('#getCookie .set-a-cookie').click();
+
+ // cy.getCookie() yields a cookie object
+ cy.getCookie('token').should('have.property', 'value', '123ABC');
+ });
+
+ it('cy.getCookies() - get browser cookies', function () {
+ // https://on.cypress.io/getcookies
+ cy.getCookies().should('be.empty');
+
+ cy.get('#getCookies .set-a-cookie').click();
+
+ // cy.getCookies() yields an array of cookies
+ cy.getCookies().should('have.length', 1).should(function (cookies) {
+
+ // each cookie has these properties
+ expect(cookies[0]).to.have.property('name', 'token');
+ expect(cookies[0]).to.have.property('value', '123ABC');
+ expect(cookies[0]).to.have.property('httpOnly', false);
+ expect(cookies[0]).to.have.property('secure', false);
+ expect(cookies[0]).to.have.property('domain');
+ expect(cookies[0]).to.have.property('path');
+ });
+ });
+
+ it('cy.setCookie() - set a browser cookie', function () {
+ // https://on.cypress.io/setcookie
+ cy.getCookies().should('be.empty');
+
+ cy.setCookie('foo', 'bar');
+
+ // cy.getCookie() yields a cookie object
+ cy.getCookie('foo').should('have.property', 'value', 'bar');
+ });
+
+ it('cy.clearCookie() - clear a browser cookie', function () {
+ // https://on.cypress.io/clearcookie
+ cy.getCookie('token').should('be.null');
+
+ cy.get('#clearCookie .set-a-cookie').click();
+
+ cy.getCookie('token').should('have.property', 'value', '123ABC');
+
+ // cy.clearCookies() yields null
+ cy.clearCookie('token').should('be.null');
+
+ cy.getCookie('token').should('be.null');
+ });
+
+ it('cy.clearCookies() - clear browser cookies', function () {
+ // https://on.cypress.io/clearcookies
+ cy.getCookies().should('be.empty');
+
+ cy.get('#clearCookies .set-a-cookie').click();
+
+ cy.getCookies().should('have.length', 1);
+
+ // cy.clearCookies() yields null
+ cy.clearCookies();
+
+ cy.getCookies().should('be.empty');
+ });
+ });
+
+ context('Spies, Stubs, and Clock', function () {
+ it('cy.spy() - wrap a method in a spy', function () {
+ // https://on.cypress.io/spy
+ cy.visit('https://example.cypress.io/commands/spies-stubs-clocks');
+
+ let obj = {
+ foo() {}
+ };
+
+ let spy = cy.spy(obj, 'foo').as('anyArgs');
+
+ obj.foo();
+
+ expect(spy).to.be.called;
+
+ });
+
+ it('cy.stub() - create a stub and/or replace a function with a stub', function () {
+ // https://on.cypress.io/stub
+ cy.visit('https://example.cypress.io/commands/spies-stubs-clocks');
+
+ let obj = {
+ foo() {}
+ };
+
+ let stub = cy.stub(obj, 'foo').as('foo');
+
+ obj.foo('foo', 'bar');
+
+ expect(stub).to.be.called;
+
+ });
+
+ it('cy.clock() - control time in the browser', function () {
+ // create the date in UTC so its always the same
+ // no matter what local timezone the browser is running in
+ let now = new Date(Date.UTC(2017, 2, 14)).getTime();
+
+ // https://on.cypress.io/clock
+ cy.clock(now);
+ cy.visit('https://example.cypress.io/commands/spies-stubs-clocks');
+ cy.get('#clock-div').click()
+ .should('have.text', '1489449600');
+ });
+
+ it('cy.tick() - move time in the browser', function () {
+ // create the date in UTC so its always the same
+ // no matter what local timezone the browser is running in
+ let now = new Date(Date.UTC(2017, 2, 14)).getTime();
+
+ // https://on.cypress.io/tick
+ cy.clock(now);
+ cy.visit('https://example.cypress.io/commands/spies-stubs-clocks');
+ cy.get('#tick-div').click()
+ .should('have.text', '1489449600');
+ cy.tick(10000); // 10 seconds passed
+ cy.get('#tick-div').click()
+ .should('have.text', '1489449610');
+ });
+ });
+
+ context('Utilities', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/utilities');
+ });
+
+ it('Cypress._.method() - call a lodash method', function () {
+ // use the _.chain, _.map, _.take, and _.value functions
+ // https://on.cypress.io/_
+ cy.request('https://jsonplaceholder.typicode.com/users')
+ .then(function (response) {
+ let ids = Cypress._.chain(response.body).map('id').take(3).value();
+
+ expect(ids).to.deep.eq([1, 2, 3]);
+ });
+ });
+
+ it('Cypress.$(selector) - call a jQuery method', function () {
+ // https://on.cypress.io/$
+ let $li = Cypress.$('.utility-jquery li:first');
+
+ cy.wrap($li)
+ .should('not.have.class', 'active')
+ .click()
+ .should('have.class', 'active');
+ });
+
+ it('Cypress.moment() - format or parse dates using a moment method', function () {
+ // use moment's format function
+ // https://on.cypress.io/cypress-moment
+ let time = Cypress.moment().utc('2014-04-25T19:38:53.196Z').format('h:mm A');
+
+ cy.get('.utility-moment').contains('3:38 PM')
+ .should('have.class', 'badge');
+ });
+
+ it('Cypress.Blob.method() - blob utilities and base64 string conversion', function () {
+ cy.get('.utility-blob').then(function ($div) {
+ // https://on.cypress.io/blob
+ // https://github.com/nolanlawson/blob-util#imgSrcToDataURL
+ // get the dataUrl string for the javascript-logo
+ return Cypress.Blob.imgSrcToDataURL('https://example.cypress.io/assets/img/javascript-logo.png', undefined, 'anonymous')
+ .then(function (dataUrl) {
+ // create an element and set its src to the dataUrl
+ let img = Cypress.$(' ', { src: dataUrl });
+ // need to explicitly return cy here since we are initially returning
+ // the Cypress.Blob.imgSrcToDataURL promise to our test
+ // append the image
+ $div.append(img);
+
+ cy.get('.utility-blob img').click()
+ .should('have.attr', 'src', dataUrl);
+ });
+ });
+ });
+
+ it('new Cypress.Promise(function) - instantiate a bluebird promise', function () {
+ // https://on.cypress.io/promise
+ let waited = false;
+
+ function waitOneSecond() {
+ // return a promise that resolves after 1 second
+ return new Cypress.Promise(function (resolve, reject) {
+ setTimeout(function () {
+ // set waited to true
+ waited = true;
+
+ // resolve with 'foo' string
+ resolve('foo');
+ }, 1000);
+ });
+ }
+
+ cy.then(function () {
+ // return a promise to cy.then() that
+ // is awaited until it resolves
+ return waitOneSecond().then(function (str) {
+ expect(str).to.eq('foo');
+ expect(waited).to.be.true;
+ });
+ });
+ });
+ });
+
+ context('Cypress.config()', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/cypress-api/config');
+ });
+
+ it('Cypress.config() - get and set configuration options', function () {
+ // https://on.cypress.io/config
+ let myConfig = Cypress.config();
+
+ expect(myConfig).to.have.property('animationDistanceThreshold', 5);
+ expect(myConfig).to.have.property('baseUrl', null);
+ expect(myConfig).to.have.property('defaultCommandTimeout', 4000);
+ expect(myConfig).to.have.property('requestTimeout', 5000);
+ expect(myConfig).to.have.property('responseTimeout', 30000);
+ expect(myConfig).to.have.property('viewportHeight', 660);
+ expect(myConfig).to.have.property('viewportWidth', 1000);
+ expect(myConfig).to.have.property('pageLoadTimeout', 60000);
+ expect(myConfig).to.have.property('waitForAnimations', true);
+
+ expect(Cypress.config('pageLoadTimeout')).to.eq(60000);
+
+ // this will change the config for the rest of your tests!
+ Cypress.config('pageLoadTimeout', 20000);
+
+ expect(Cypress.config('pageLoadTimeout')).to.eq(20000);
+
+ Cypress.config('pageLoadTimeout', 60000);
+ });
+ });
+
+ context('Cypress.env()', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/cypress-api/env');
+ });
+
+ // We can set environment variables for highly dynamic values
+
+ // https://on.cypress.io/environment-variables
+ it('Cypress.env() - get environment variables', function () {
+ // https://on.cypress.io/env
+ // set multiple environment variables
+ Cypress.env({
+ host: 'veronica.dev.local',
+ api_server: 'http://localhost:8888/v1/'
+ });
+
+ // get environment variable
+ expect(Cypress.env('host')).to.eq('veronica.dev.local');
+
+ // set environment variable
+ Cypress.env('api_server', 'http://localhost:8888/v2/');
+ expect(Cypress.env('api_server')).to.eq('http://localhost:8888/v2/');
+
+ // get all environment variable
+ expect(Cypress.env()).to.have.property('host', 'veronica.dev.local');
+ expect(Cypress.env()).to.have.property('api_server', 'http://localhost:8888/v2/');
+ });
+ });
+
+ context('Cypress.Cookies', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/cypress-api/cookies');
+ });
+
+ // https://on.cypress.io/cookies
+ it('Cypress.Cookies.debug() - enable or disable debugging', function () {
+ Cypress.Cookies.debug(true);
+
+ // Cypress will now log in the console when
+ // cookies are set or cleared
+ cy.setCookie('fakeCookie', '123ABC');
+ cy.clearCookie('fakeCookie');
+ cy.setCookie('fakeCookie', '123ABC');
+ cy.clearCookie('fakeCookie');
+ cy.setCookie('fakeCookie', '123ABC');
+ });
+
+ it('Cypress.Cookies.preserveOnce() - preserve cookies by key', function () {
+ // normally cookies are reset after each test
+ cy.getCookie('fakeCookie').should('not.be.ok');
+
+ // preserving a cookie will not clear it when
+ // the next test starts
+ cy.setCookie('lastCookie', '789XYZ');
+ Cypress.Cookies.preserveOnce('lastCookie');
+ });
+
+ it('Cypress.Cookies.defaults() - set defaults for all cookies', function () {
+ // now any cookie with the name 'session_id' will
+ // not be cleared before each new test runs
+ Cypress.Cookies.defaults({
+ whitelist: 'session_id'
+ });
+ });
+ });
+
+ context('Cypress.dom', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/cypress-api/dom');
+ });
+
+ // https://on.cypress.io/dom
+ it('Cypress.dom.isHidden() - determine if a DOM element is hidden', function () {
+ let hiddenP = Cypress.$('.dom-p p.hidden').get(0);
+ let visibleP = Cypress.$('.dom-p p.visible').get(0);
+
+ // our first paragraph has css class 'hidden'
+ expect(Cypress.dom.isHidden(hiddenP)).to.be.true;
+ expect(Cypress.dom.isHidden(visibleP)).to.be.false;
+ });
+ });
+
+ context('Cypress.Server', function () {
+ beforeEach(function () {
+ cy.visit('https://example.cypress.io/cypress-api/server');
+ });
+
+ // Permanently override server options for
+ // all instances of cy.server()
+
+ // https://on.cypress.io/cypress-server
+ it('Cypress.Server.defaults() - change default config of server', function () {
+ Cypress.Server.defaults({
+ delay: 0,
+ force404: false,
+ whitelist(xhr) {
+ // handle custom logic for whitelisting
+ }
+ });
+ });
+ });
+});
diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js
new file mode 100644
index 0000000..0e35b18
--- /dev/null
+++ b/cypress/plugins/index.js
@@ -0,0 +1,17 @@
+// ***********************************************************
+// 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)
+
+module.exports = (on, config) => {
+ // `on` is used to hook into various events Cypress emits
+ // `config` is the resolved Cypress config
+};
diff --git a/cypress/screenshots/my-image.png b/cypress/screenshots/my-image.png
new file mode 100644
index 0000000..3a39c35
Binary files /dev/null and b/cypress/screenshots/my-image.png differ
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
new file mode 100644
index 0000000..c1f5a77
--- /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 is 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..37a498f
--- /dev/null
+++ b/cypress/support/index.js
@@ -0,0 +1,20 @@
+// ***********************************************************
+// 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';
+
+// Alternatively you can use CommonJS syntax:
+// require('./commands')
diff --git a/package.json b/package.json
index 5c42ac6..81abd0c 100644
--- a/package.json
+++ b/package.json
@@ -9,14 +9,18 @@
"production": "rollup -c --production",
"build:docs": "rollup -c --docs",
"dev": "rollup -c -w",
+ "cypress:server": "http-server -p 8989",
+ "cypress:open": "cypress open",
"test": "mocha --compilers js:babel-core/register --colors ./test/*.spec.js"
},
"devDependencies": {
"chai": "3.5.0",
+ "cypress": "^2.1.0",
"deepmerge": "^2.0.1",
"eslint-config-airbnb": "^16.1.0",
"eslint-config-airbnb-base": "^12.1.0",
"eslint-plugin-import": "^2.11.0",
+ "http-server": "^0.11.1",
"mocha": "3.3.0",
"postcss-cssnext": "^3.1.0",
"postcss-nested": "^3.0.0",
diff --git a/yarn.lock b/yarn.lock
index a5f064e..fea8efd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,79 @@
# yarn lockfile v1
+"@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"
+ dependencies:
+ chalk "^1.1.3"
+ cli-cursor "^1.0.2"
+ date-fns "^1.27.2"
+ figures "^1.7.0"
+
+"@cypress/xvfb@1.1.3":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.1.3.tgz#6294a7d1feb751f12302248f2089fc534c4acb7f"
+ dependencies:
+ lodash.once "^4.1.1"
+
+"@types/blob-util@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@types/blob-util/-/blob-util-1.3.3.tgz#adba644ae34f88e1dd9a5864c66ad651caaf628a"
+
+"@types/bluebird@3.5.18":
+ version "3.5.18"
+ resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.18.tgz#6a60435d4663e290f3709898a4f75014f279c4d6"
+
+"@types/chai-jquery@1.1.35":
+ version "1.1.35"
+ resolved "https://registry.yarnpkg.com/@types/chai-jquery/-/chai-jquery-1.1.35.tgz#9a8f0a39ec0851b2768a8f8c764158c2a2568d04"
+ dependencies:
+ "@types/chai" "*"
+ "@types/jquery" "*"
+
+"@types/chai@*":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.1.3.tgz#b8a74352977a23b604c01aa784f5b793443fb7dc"
+
+"@types/chai@4.0.8":
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.8.tgz#d27600e9ba2f371e08695d90a0fe0408d89c7be7"
+
+"@types/jquery@*":
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.2.tgz#8700226bdde24b6f98e3a60126dbaab3b2a3ab41"
+
+"@types/jquery@3.2.16":
+ version "3.2.16"
+ resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.2.16.tgz#04419c404a3194350e7d3f339a90e72c88db3111"
+
+"@types/lodash@4.14.87":
+ version "4.14.87"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.87.tgz#55f92183b048c2c64402afe472f8333f4e319a6b"
+
+"@types/minimatch@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.1.tgz#b683eb60be358304ef146f5775db4c0e3696a550"
+
+"@types/mocha@2.2.44":
+ version "2.2.44"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.44.tgz#1d4a798e53f35212fd5ad4d04050620171cd5b5e"
+
+"@types/sinon-chai@2.7.29":
+ version "2.7.29"
+ resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-2.7.29.tgz#4db01497e2dd1908b2bd30d1782f456353f5f723"
+ dependencies:
+ "@types/chai" "*"
+ "@types/sinon" "*"
+
+"@types/sinon@*":
+ version "4.3.3"
+ resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.3.3.tgz#97cbbfddc3282b5fd40c7abf80b99db426fd4237"
+
+"@types/sinon@4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-4.0.0.tgz#9a93ffa4ee1329e85166278a5ed99f81dc4c8362"
+
acorn-jsx@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
@@ -24,6 +97,13 @@ ajv-keywords@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+ajv@^4.9.1:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
@@ -37,6 +117,10 @@ alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ansi-escapes@^1.0.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
ansi-escapes@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
@@ -99,10 +183,36 @@ arrify@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+asn1@~0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+
+assert-plus@1.0.0, assert-plus@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+
+assert-plus@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+
assertion-error@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
+async@2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
+ dependencies:
+ lodash "^4.14.0"
+
+async@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+
autoprefixer@^6.3.1:
version "6.7.7"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
@@ -125,6 +235,14 @@ autoprefixer@^7.1.1:
postcss "^6.0.17"
postcss-value-parser "^3.2.3"
+aws-sign2@~0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+
+aws4@^1.2.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289"
+
babel-code-frame@^6.22.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
@@ -133,7 +251,7 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-runtime@^6.23.0:
+babel-runtime@^6.18.0, babel-runtime@^6.23.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
dependencies:
@@ -152,10 +270,26 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+bcrypt-pbkdf@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ dependencies:
+ tweetnacl "^0.14.3"
+
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+bluebird@3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+
+boom@2.x.x:
+ version "2.10.1"
+ resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ dependencies:
+ hoek "2.x.x"
+
brace-expansion@^1.1.7:
version "1.1.8"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
@@ -189,6 +323,10 @@ browserslist@^2.0.0, browserslist@^2.11.3:
caniuse-lite "^1.0.30000792"
electron-to-chromium "^1.3.30"
+buffer-crc32@~0.2.3:
+ version "0.2.13"
+ resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+
buffer-from@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531"
@@ -233,6 +371,10 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805:
version "1.0.30000808"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000808.tgz#7d759b5518529ea08b6705a19e70dbf401628ffc"
+caseless@~0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+
chai@3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247"
@@ -241,7 +383,15 @@ chai@3.5.0:
deep-eql "^0.1.3"
type-detect "^1.0.0"
-chalk@^1.1.3:
+chalk@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
+ dependencies:
+ ansi-styles "^3.1.0"
+ escape-string-regexp "^1.0.5"
+ supports-color "^4.0.0"
+
+chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies:
@@ -279,6 +429,14 @@ chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+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"
+
+ci-info@^1.0.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2"
+
circular-json@^0.3.1:
version "0.3.3"
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
@@ -289,12 +447,29 @@ clap@^1.0.9:
dependencies:
chalk "^1.1.3"
+cli-cursor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
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"
+
+cli-truncate@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
+ dependencies:
+ slice-ansi "0.0.4"
+ string-width "^1.0.1"
+
cli-width@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
@@ -317,6 +492,10 @@ coa@~1.0.1:
dependencies:
q "^1.1.2"
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
color-convert@^1.3.0, color-convert@^1.8.2, color-convert@^1.9.0, color-convert@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
@@ -370,20 +549,48 @@ colormin@^1.0.5:
css-color-names "0.0.4"
has "^1.0.1"
+colors@1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
+
colors@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+combined-stream@^1.0.5, combined-stream@~1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
+ dependencies:
+ delayed-stream "~1.0.0"
+
+commander@2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+
commander@2.9.0, commander@~2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
dependencies:
graceful-readlink ">= 1.0.0"
+common-tags@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.4.0.tgz#1187be4f3d4cf0c0427d43f74eef1f73501614c0"
+ dependencies:
+ babel-runtime "^6.18.0"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+concat-stream@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
concat-stream@^1.6.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
@@ -407,10 +614,14 @@ core-js@^2.4.0:
version "2.5.3"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
-core-util-is@~1.0.0:
+core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+corser@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
+
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
@@ -431,6 +642,12 @@ cross-spawn@^5.1.0:
shebang-command "^1.2.0"
which "^1.2.9"
+cryptiles@2.x.x:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ dependencies:
+ boom "2.x.x"
+
css-color-function@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/css-color-function/-/css-color-function-1.3.3.tgz#8ed24c2c0205073339fafa004bc8c141fccb282e"
@@ -515,19 +732,70 @@ csso@~2.3.1:
clap "^1.0.9"
source-map "^0.5.3"
+cypress@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cypress/-/cypress-2.1.0.tgz#a8bd7d9b89c38a1e380db83b57d9bba0dbb95ba4"
+ dependencies:
+ "@cypress/listr-verbose-renderer" "0.4.1"
+ "@cypress/xvfb" "1.1.3"
+ "@types/blob-util" "1.3.3"
+ "@types/bluebird" "3.5.18"
+ "@types/chai" "4.0.8"
+ "@types/chai-jquery" "1.1.35"
+ "@types/jquery" "3.2.16"
+ "@types/lodash" "4.14.87"
+ "@types/minimatch" "3.0.1"
+ "@types/mocha" "2.2.44"
+ "@types/sinon" "4.0.0"
+ "@types/sinon-chai" "2.7.29"
+ bluebird "3.5.0"
+ chalk "2.1.0"
+ check-more-types "2.24.0"
+ commander "2.11.0"
+ common-tags "1.4.0"
+ debug "3.1.0"
+ extract-zip "1.6.6"
+ fs-extra "4.0.1"
+ getos "2.8.4"
+ glob "7.1.2"
+ is-ci "1.0.10"
+ is-installed-globally "0.1.0"
+ lazy-ass "1.6.0"
+ listr "0.12.0"
+ lodash "4.17.4"
+ minimist "1.2.0"
+ progress "1.1.8"
+ ramda "0.24.1"
+ request "2.81.0"
+ request-progress "0.3.1"
+ supports-color "5.1.0"
+ tmp "0.0.31"
+ url "0.11.0"
+ yauzl "2.8.0"
+
+dashdash@^1.12.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ dependencies:
+ assert-plus "^1.0.0"
+
+date-fns@^1.27.2:
+ version "1.29.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
+
debug@2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
dependencies:
ms "0.7.2"
-debug@^2.6.8, debug@^2.6.9:
+debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
ms "2.0.0"
-debug@^3.1.0:
+debug@3.1.0, debug@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
dependencies:
@@ -567,6 +835,10 @@ del@^2.0.2:
pinkie-promise "^2.0.0"
rimraf "^2.2.8"
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+
diff@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
@@ -590,10 +862,29 @@ dot-prop@^4.1.1:
dependencies:
is-obj "^1.0.0"
+ecc-jsbn@~0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ dependencies:
+ jsbn "~0.1.0"
+
+ecstatic@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.2.0.tgz#1b1aee1ca7c6b99cfb5cf6c9b26b481b90c4409f"
+ dependencies:
+ he "^1.1.1"
+ mime "^1.4.1"
+ minimist "^1.1.0"
+ url-join "^2.0.2"
+
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
version "1.3.33"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545"
+elegant-spinner@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
+
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -750,6 +1041,14 @@ esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+eventemitter3@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
expand-brackets@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
@@ -762,6 +1061,10 @@ expand-range@^1.8.1:
dependencies:
fill-range "^2.1.0"
+extend@~3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+
external-editor@^2.0.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
@@ -776,6 +1079,23 @@ extglob@^0.3.1:
dependencies:
is-extglob "^1.0.0"
+extract-zip@1.6.6:
+ version "1.6.6"
+ resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.6.tgz#1290ede8d20d0872b429fd3f351ca128ec5ef85c"
+ dependencies:
+ concat-stream "1.6.0"
+ debug "2.6.9"
+ mkdirp "0.5.0"
+ yauzl "2.4.1"
+
+extsprintf@1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+
+extsprintf@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+
fast-deep-equal@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
@@ -792,6 +1112,19 @@ fastparse@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+fd-slicer@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+ dependencies:
+ pend "~1.2.0"
+
+figures@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
figures@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
@@ -845,6 +1178,12 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+follow-redirects@^1.0.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77"
+ dependencies:
+ debug "^3.1.0"
+
for-in@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
@@ -855,6 +1194,26 @@ for-own@^0.1.4:
dependencies:
for-in "^1.0.1"
+forever-agent@~0.6.1:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+
+form-data@~2.1.1:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.5"
+ mime-types "^2.1.12"
+
+fs-extra@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^3.0.0"
+ universalify "^0.1.0"
+
fs-extra@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
@@ -881,6 +1240,18 @@ generic-names@^1.0.2:
dependencies:
loader-utils "^0.2.16"
+getos@2.8.4:
+ version "2.8.4"
+ resolved "https://registry.yarnpkg.com/getos/-/getos-2.8.4.tgz#7b8603d3619c28e38cb0fe7a4f63c3acb80d5163"
+ dependencies:
+ async "2.1.4"
+
+getpass@^0.1.1:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ dependencies:
+ assert-plus "^1.0.0"
+
glob-base@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
@@ -905,7 +1276,7 @@ glob@7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
+glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
dependencies:
@@ -916,6 +1287,12 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
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"
+ dependencies:
+ ini "^1.3.4"
+
globals@^11.0.1:
version "11.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc"
@@ -943,6 +1320,17 @@ growl@1.9.2:
version "1.9.2"
resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
+har-schema@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+
+har-validator@~4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ dependencies:
+ ajv "^4.9.1"
+ har-schema "^1.0.5"
+
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -967,6 +1355,23 @@ has@^1.0.1:
dependencies:
function-bind "^1.0.2"
+hawk@~3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ dependencies:
+ boom "2.x.x"
+ cryptiles "2.x.x"
+ hoek "2.x.x"
+ sntp "1.x.x"
+
+he@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+
+hoek@2.x.x:
+ version "2.16.3"
+ resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+
hosted-git-info@^2.1.4:
version "2.6.0"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222"
@@ -975,6 +1380,35 @@ html-comment-regex@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+http-proxy@^1.8.1:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
+ dependencies:
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
+
+http-server@^0.11.1:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.11.1.tgz#2302a56a6ffef7f9abea0147d838a5e9b6b6a79b"
+ dependencies:
+ colors "1.0.3"
+ corser "~2.0.0"
+ ecstatic "^3.0.0"
+ http-proxy "^1.8.1"
+ opener "~1.4.0"
+ optimist "0.6.x"
+ portfinder "^1.0.13"
+ union "~0.4.3"
+
+http-signature@~1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ dependencies:
+ assert-plus "^0.2.0"
+ jsprim "^1.2.2"
+ sshpk "^1.7.0"
+
iconv-lite@^0.4.17:
version "0.4.21"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798"
@@ -993,6 +1427,16 @@ imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+indent-string@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ dependencies:
+ repeating "^2.0.0"
+
+indent-string@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289"
+
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
@@ -1008,6 +1452,10 @@ inherits@2, inherits@^2.0.3, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ini@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+
inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
@@ -1049,6 +1497,12 @@ is-builtin-module@^1.0.0:
dependencies:
builtin-modules "^1.0.0"
+is-ci@1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
+ dependencies:
+ ci-info "^1.0.0"
+
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
@@ -1071,6 +1525,18 @@ is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+is-finite@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
@@ -1081,6 +1547,13 @@ is-glob@^2.0.0, is-glob@^2.0.1:
dependencies:
is-extglob "^1.0.0"
+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"
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
is-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
@@ -1137,12 +1610,20 @@ is-resolvable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+
is-svg@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
dependencies:
html-comment-regex "^1.1.0"
+is-typedarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -1161,6 +1642,10 @@ isobject@^2.0.0:
dependencies:
isarray "1.0.0"
+isstream@~0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+
js-base64@^2.1.9:
version "2.4.3"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582"
@@ -1190,6 +1675,10 @@ js-yaml@~3.7.0:
argparse "^1.0.7"
esprima "^2.6.0"
+jsbn@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -1198,10 +1687,24 @@ json-schema-traverse@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+json-schema@0.2.3:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+json-stringify-safe@~5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+
json3@3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
@@ -1210,12 +1713,31 @@ json5@^0.5.0:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+jsonfile@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ 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"
optionalDependencies:
graceful-fs "^4.1.6"
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsprim@^1.2.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ dependencies:
+ assert-plus "1.0.0"
+ extsprintf "1.3.0"
+ json-schema "0.2.3"
+ verror "1.10.0"
+
kind-of@^3.0.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@@ -1228,6 +1750,10 @@ kind-of@^4.0.0:
dependencies:
is-buffer "^1.1.5"
+lazy-ass@1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
+
levn@^0.3.0, levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -1235,6 +1761,53 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+listr-silent-renderer@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
+
+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"
+ 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-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"
+ dependencies:
+ chalk "^1.1.3"
+ cli-cursor "^1.0.2"
+ date-fns "^1.27.2"
+ figures "^1.7.0"
+
+listr@0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a"
+ 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"
+
load-json-file@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
@@ -1315,6 +1888,10 @@ lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+lodash.once@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
+
lodash.template@^4.2.4:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
@@ -1332,10 +1909,31 @@ lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+lodash@4.17.4:
+ version "4.17.4"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+
+lodash@^4.14.0:
+ version "4.17.10"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
+
lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0:
version "4.17.5"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511"
+log-symbols@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
+ dependencies:
+ chalk "^1.0.0"
+
+log-update@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
+ dependencies:
+ ansi-escapes "^1.0.0"
+ cli-cursor "^1.0.2"
+
lru-cache@^4.0.1:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f"
@@ -1375,6 +1973,20 @@ micromatch@^2.3.11:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
+mime-db@~1.33.0:
+ version "1.33.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
+
+mime-types@^2.1.12, mime-types@~2.1.7:
+ version "2.1.18"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
+ dependencies:
+ mime-db "~1.33.0"
+
+mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
@@ -1389,11 +2001,21 @@ minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.0, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
+minimist@~0.0.1:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+
+mkdirp@0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12"
+ dependencies:
+ minimist "0.0.8"
+
+mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -1463,6 +2085,14 @@ num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+oauth-sign@~0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+
object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
@@ -1484,12 +2114,27 @@ onecolor@^3.0.4:
version "3.0.5"
resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-3.0.5.tgz#36eff32201379efdf1180fb445e51a8e2425f9f6"
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
dependencies:
mimic-fn "^1.0.0"
+opener@~1.4.0:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8"
+
+optimist@0.6.x:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ dependencies:
+ minimist "~0.0.1"
+ wordwrap "~0.0.2"
+
optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
@@ -1501,11 +2146,20 @@ optionator@^0.8.2:
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"
+ dependencies:
+ chalk "^1.1.1"
+ cli-cursor "^1.0.2"
+ cli-spinners "^0.1.2"
+ object-assign "^4.0.1"
+
os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-os-tmpdir@~1.0.2:
+os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -1521,6 +2175,10 @@ p-locate@^2.0.0:
dependencies:
p-limit "^1.1.0"
+p-map@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
@@ -1568,6 +2226,14 @@ path-type@^2.0.0:
dependencies:
pify "^2.0.0"
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+
+performance-now@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+
pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -1611,6 +2277,14 @@ pluralize@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+portfinder@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
+ dependencies:
+ async "^1.5.2"
+ debug "^2.2.0"
+ mkdirp "0.5.x"
+
postcss-apply@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/postcss-apply/-/postcss-apply-0.8.0.tgz#14e544bbb5cb6f1c1e048857965d79ae066b1343"
@@ -2156,6 +2830,10 @@ process-nextick-args@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+progress@1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
progress@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
@@ -2168,10 +2846,26 @@ pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+
+punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+qs@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404"
+
+qs@~6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
@@ -2179,6 +2873,14 @@ query-string@^4.1.0:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+
+ramda@0.24.1:
+ version "0.24.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857"
+
randomatic@^1.1.3:
version "1.1.7"
resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
@@ -2282,6 +2984,45 @@ repeat-string@^1.5.2:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+repeating@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ dependencies:
+ is-finite "^1.0.0"
+
+request-progress@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-0.3.1.tgz#0721c105d8a96ac6b2ce8b2c89ae2d5ecfcf6b3a"
+ dependencies:
+ throttleit "~0.0.2"
+
+request@2.81.0:
+ version "2.81.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ dependencies:
+ aws-sign2 "~0.6.0"
+ aws4 "^1.2.1"
+ caseless "~0.12.0"
+ combined-stream "~1.0.5"
+ extend "~3.0.0"
+ forever-agent "~0.6.1"
+ form-data "~2.1.1"
+ har-validator "~4.2.1"
+ hawk "~3.1.3"
+ http-signature "~1.1.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.7"
+ oauth-sign "~0.8.1"
+ performance-now "^0.2.0"
+ qs "~6.4.0"
+ safe-buffer "^5.0.1"
+ stringstream "~0.0.4"
+ tough-cookie "~2.3.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.0.0"
+
require-from-string@^1.1.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
@@ -2293,6 +3034,10 @@ require-uncached@^1.0.3:
caller-path "^0.1.0"
resolve-from "^1.0.0"
+requires-port@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+
reserved-words@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1"
@@ -2313,6 +3058,13 @@ resolve@^1.5.0, resolve@^1.6.0:
dependencies:
path-parse "^1.0.5"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ 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"
@@ -2411,6 +3163,16 @@ rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+rxjs@^5.0.0-beta.11:
+ version "5.5.10"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.10.tgz#fde02d7a614f6c8683d0d1957827f492e09db045"
+ dependencies:
+ symbol-observable "1.0.1"
+
+safe-buffer@^5.0.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -2447,12 +3209,22 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
slice-ansi@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
dependencies:
is-fullwidth-code-point "^2.0.0"
+sntp@1.x.x:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ dependencies:
+ hoek "2.x.x"
+
sort-keys@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
@@ -2497,6 +3269,24 @@ sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+sshpk@^1.7.0:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb"
+ dependencies:
+ asn1 "~0.2.3"
+ assert-plus "^1.0.0"
+ dashdash "^1.12.0"
+ getpass "^0.1.1"
+ optionalDependencies:
+ bcrypt-pbkdf "^1.0.0"
+ ecc-jsbn "~0.1.1"
+ jsbn "~0.1.0"
+ tweetnacl "~0.14.0"
+
+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"
+
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
@@ -2505,6 +3295,14 @@ string-hash@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -2518,7 +3316,11 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-strip-ansi@^3.0.0:
+stringstream@~0.0.4:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
+
+strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
dependencies:
@@ -2548,6 +3350,12 @@ supports-color@3.1.2:
dependencies:
has-flag "^1.0.0"
+supports-color@5.1.0, supports-color@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
+ dependencies:
+ has-flag "^2.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -2564,12 +3372,6 @@ supports-color@^4.0.0:
dependencies:
has-flag "^2.0.0"
-supports-color@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
- dependencies:
- has-flag "^2.0.0"
-
supports-color@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a"
@@ -2594,6 +3396,10 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
+symbol-observable@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+
table@4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
@@ -2609,16 +3415,42 @@ text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+throttleit@~0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf"
+
through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+tmp@0.0.31:
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7"
+ dependencies:
+ os-tmpdir "~1.0.1"
+
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
dependencies:
os-tmpdir "~1.0.2"
+tough-cookie@~2.3.0:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+ dependencies:
+ punycode "^1.4.1"
+
+tunnel-agent@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ dependencies:
+ safe-buffer "^5.0.1"
+
+tweetnacl@^0.14.3, tweetnacl@~0.14.0:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -2650,6 +3482,12 @@ uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+union@~0.4.3:
+ version "0.4.6"
+ resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0"
+ dependencies:
+ qs "~2.3.3"
+
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
@@ -2675,10 +3513,25 @@ universalify@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+url-join@^2.0.2:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
+
+url@0.11.0:
+ version "0.11.0"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+uuid@^3.0.0:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+
validate-npm-package-license@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
@@ -2690,6 +3543,14 @@ vendors@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+verror@1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ dependencies:
+ assert-plus "^1.0.0"
+ core-util-is "1.0.2"
+ extsprintf "^1.2.0"
+
viewport-dimensions@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz#de740747db5387fd1725f5175e91bac76afdf36c"
@@ -2708,6 +3569,10 @@ which@^1.2.9:
dependencies:
isexe "^2.0.0"
+wordwrap@~0.0.2:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+
wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
@@ -2725,3 +3590,16 @@ write@^0.2.1:
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+
+yauzl@2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+ dependencies:
+ fd-slicer "~1.0.1"
+
+yauzl@2.8.0:
+ version "2.8.0"
+ resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.8.0.tgz#79450aff22b2a9c5a41ef54e02db907ccfbf9ee2"
+ dependencies:
+ buffer-crc32 "~0.2.3"
+ fd-slicer "~1.0.1"