diff options
| author | Randy Ridge <randyridge@gmail.com> | 2018-09-14 20:01:25 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-14 20:01:25 -0400 |
| commit | 908180c77cd38011eeedcae949613da2a3391e5e (patch) | |
| tree | b59bf1aae819a04d453cde72f6e601f5561a740f /finished-application/frontend | |
| parent | 1f6667d233a4a2e9df977204d83a8f749c050c75 (diff) | |
| parent | b3bebda57ba187b7fa10398054b54c05d3fd3555 (diff) | |
Merge branch 'master' into randyridge/our
Diffstat (limited to 'finished-application/frontend')
91 files changed, 2457 insertions, 3881 deletions
diff --git a/finished-application/frontend/.vscode/settings.json b/finished-application/frontend/.vscode/settings.json deleted file mode 100644 index 2fd8efc..0000000 --- a/finished-application/frontend/.vscode/settings.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "workbench.colorCustomizations": { - "titleBar.activeForeground": "#000", - "titleBar.inactiveForeground": "#000000CC", - "titleBar.activeBackground": "#FFC600", - "titleBar.inactiveBackground": "#FFC600CC" - } diff --git a/finished-application/frontend/README.md b/finished-application/frontend/README.md deleted file mode 100644 index 9914799..0000000 --- a/finished-application/frontend/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# Advanced-React - -<!-- -## Marketing - -I love this look and feel: http://wes.io/lxQe -https://www.youtube.com/watch?v=Y0ePh9OxSWo - - - -Descriptions for Images - -Nudie Belt - -Our accessories are all about genuine leather and denim. Belts, leather wallets cases, denim bags, Knitted hats and scarves in wool or organic cotton. For our leather accessories, we only use vegetable tanned leather. Leather accessories will acquire a patina and become more beautiful the longer you use them. - -Triple Black Ultra Boost - -Ultraboost is the ultimate running shoe that delivers constant energy returns. The more you run the more energy you bring to your life. - -Patagonia Black Hole - -The Black Hole Duffle is highly weather-resistant, and protects your gear from rough handling. The U-shaped lid allows quick access to the main compartment, while 2 zippered internal mesh pockets keep small items organized. A padded bottom panel adds structure and helps cushion the load when it gets tossed out of the vehicle or dropped from the pack mule. - -Yeti cooler - -Keep your brie and bevies chilly. Heavy-duty insulation ensures cold temperatures persist. A self-stopping hinge and Yeti-tough details are durable. Non-slip rubber feet keep your drinks and snacks orderly through whitewater or rough approaches to the picnic site. - -Black Vapor Max - -With the radically reinvented VaporMax Air cushioning unit, the Nike Air VaporMax not only defies convention, it delivers a sensation that seems to defy gravity. - -Naked and Famous Jeans - -Naked & Famous Denim uses only the most unique and rare selvedge denim fabrics from Japan, with the best style and fits around. Made in Canada. - - -Rimowa Suitcase - -RIMOWA is one of Europe's leading manufacturers of premium travel and carry-on luggage made of aluminum and polycarbonate. - - -Canada goose Macmillian - -The MacMillan Parka offers active urban style with a quilt-through design and curved hem cut. Canada Goose. - -## The North Face Fanorak - -This versatile pullover offers wind and rain resistance, and packs into its own stylish fanny-pack-style kangaroo pocket. - - -Kith Hoodie - -Hat - -270s - ---> - diff --git a/finished-application/frontend/__tests__/AddToCart.test.js b/finished-application/frontend/__tests__/AddToCart.test.js index fe15f3f..cfc2e3e 100644 --- a/finished-application/frontend/__tests__/AddToCart.test.js +++ b/finished-application/frontend/__tests__/AddToCart.test.js @@ -1,12 +1,11 @@ -import React from 'react'; import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; -import { ApolloConsumer } from 'react-apollo'; import { MockedProvider } from 'react-apollo/test-utils'; -import wait from 'waait'; +import { ApolloConsumer } from 'react-apollo'; import AddToCart, { ADD_TO_CART_MUTATION } from '../components/AddToCart'; -import { fakeCartItem, fakeUser } from '../lib/testUtils'; import { CURRENT_USER_QUERY } from '../components/User'; +import { fakeUser, fakeCartItem } from '../lib/testUtils'; const mocks = [ { @@ -21,6 +20,17 @@ const mocks = [ }, }, { + request: { query: CURRENT_USER_QUERY }, + result: { + data: { + me: { + ...fakeUser(), + cart: [fakeCartItem()], + }, + }, + }, + }, + { request: { query: ADD_TO_CART_MUTATION, variables: { id: 'abc123' } }, result: { data: { @@ -33,8 +43,8 @@ const mocks = [ }, ]; -describe('<AddtoCart/>', () => { - it('renders and matches snapshot', async () => { +describe('<AddToCart/>', () => { + it('renders and matches the snap shot', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> <AddToCart id="abc123" /> @@ -42,14 +52,11 @@ describe('<AddtoCart/>', () => { ); await wait(); wrapper.update(); - expect(toJSON(wrapper.find('button'))).toMatchSnapshot(); }); - it('adds an item to the cart when clicked', async () => { - // 1. Grab a copy of the current client + it('adds an item to cart when clicked', async () => { let apolloClient; - // const wrapper = mountWithApollo(<RemoveFromCart id="abc123" />); const wrapper = mount( <MockedProvider mocks={mocks}> <ApolloConsumer> @@ -62,22 +69,20 @@ describe('<AddtoCart/>', () => { ); await wait(); wrapper.update(); - - const { me } = apolloClient.readQuery({ query: CURRENT_USER_QUERY }); + const { data: { me } } = await apolloClient.query({ query: CURRENT_USER_QUERY }); + // console.log(me); expect(me.cart).toHaveLength(0); - - // add to cart + // add an item to the cart wrapper.find('button').simulate('click'); await wait(); // check if the item is in the cart - const { me: me2 } = apolloClient.readQuery({ query: CURRENT_USER_QUERY }); - + const { data: { me: me2 } } = await apolloClient.query({ query: CURRENT_USER_QUERY }); expect(me2.cart).toHaveLength(1); expect(me2.cart[0].id).toBe('omg123'); - expect(me2.cart[0].quantity).toBe(1); + expect(me2.cart[0].quantity).toBe(3); }); - it('changes to adding when clicked', async () => { + it('changes from add to adding when clicked', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> <AddToCart id="abc123" /> @@ -85,8 +90,8 @@ describe('<AddtoCart/>', () => { ); await wait(); wrapper.update(); - expect(wrapper.text()).toContain('🛒 Add To Cart'); + expect(wrapper.text()).toContain('Add To Cart'); wrapper.find('button').simulate('click'); - expect(wrapper.text()).toContain('🛒 Adding To Cart'); + expect(wrapper.text()).toContain('Adding To Cart'); }); }); diff --git a/finished-application/frontend/__tests__/Cart.test.js b/finished-application/frontend/__tests__/Cart.test.js index 255183e..b8afc88 100644 --- a/finished-application/frontend/__tests__/Cart.test.js +++ b/finished-application/frontend/__tests__/Cart.test.js @@ -1,13 +1,10 @@ -import React from 'react'; -import { shallow, mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; -import mountOptions from '../lib/testUtils'; +import { mount } from 'enzyme'; import wait from 'waait'; -import Cart from '../components/Cart'; +import toJSON from 'enzyme-to-json'; import { MockedProvider } from 'react-apollo/test-utils'; -import { fakeCartItem, fakeUser } from '../lib/testUtils'; +import Cart, { LOCAL_STATE_QUERY } from '../components/Cart'; import { CURRENT_USER_QUERY } from '../components/User'; -import { LOCAL_STATE_QUERY } from '../components/Cart'; +import { fakeUser, fakeCartItem } from '../lib/testUtils'; const mocks = [ { @@ -23,16 +20,12 @@ const mocks = [ }, { request: { query: LOCAL_STATE_QUERY }, - result: { - data: { - cartOpen: true, - }, - }, + result: { data: { cartOpen: true } }, }, ]; describe('<Cart/>', () => { - it('renders', async () => { + it('renders and matches snappy', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> <Cart /> diff --git a/finished-application/frontend/__tests__/CartCount.test.js b/finished-application/frontend/__tests__/CartCount.test.js index dcb9ca8..8ace3da 100644 --- a/finished-application/frontend/__tests__/CartCount.test.js +++ b/finished-application/frontend/__tests__/CartCount.test.js @@ -1,19 +1,19 @@ -import React from 'react'; import { shallow, mount } from 'enzyme'; import toJSON from 'enzyme-to-json'; import CartCount from '../components/CartCount'; -describe('<CartCount></CartCount>', () => { - it('renders okay', () => { +describe('<CartCount/>', () => { + it('renders', () => { shallow(<CartCount count={10} />); }); - it('matches snapshot', () => { - const wrapper = shallow(<CartCount count={10} />); + it('matches the snapshot', () => { + const wrapper = shallow(<CartCount count={11} />); expect(toJSON(wrapper)).toMatchSnapshot(); }); + it('updates via props', () => { - const wrapper = mount(<CartCount count={50} />); + const wrapper = shallow(<CartCount count={50} />); expect(toJSON(wrapper)).toMatchSnapshot(); wrapper.setProps({ count: 10 }); expect(toJSON(wrapper)).toMatchSnapshot(); diff --git a/finished-application/frontend/__tests__/CartItem.test.js b/finished-application/frontend/__tests__/CartItem.test.js deleted file mode 100644 index 42dd39b..0000000 --- a/finished-application/frontend/__tests__/CartItem.test.js +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { shallow, mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; -import CartItem from '../components/CartItem'; - -const cartItem = { - item: { - price: 5000, - image: 'dog.jpg', - title: 'Fake Item', - }, - id: 'abc123', - quantity: 20, -}; - -describe('<CartItem>', () => { - it('renders and matches snapshot', () => { - const wrapper = shallow(<CartItem cartItem={cartItem} />); - expect(toJSON(wrapper)).toMatchSnapshot(); - }); - - it('renders a single quantity', () => { - const wrapper = shallow(<CartItem cartItem={{ ...cartItem, quantity: 1 }} />); - const p = wrapper.find('p'); - expect(p.text()).toBe('$50 — 1 × $50 each'); - }); - - it('renders multiples', () => { - const wrapper = shallow(<CartItem cartItem={{ ...cartItem, quantity: 23423 }} />); - const p = wrapper.find('p'); - expect(p.text()).toBe('$1,171,150 — 23423 × $50 each'); - }); -}); diff --git a/finished-application/frontend/__tests__/CreateItem.test.js b/finished-application/frontend/__tests__/CreateItem.test.js index 56c3f10..6e88d94 100644 --- a/finished-application/frontend/__tests__/CreateItem.test.js +++ b/finished-application/frontend/__tests__/CreateItem.test.js @@ -1,15 +1,14 @@ -import React from 'react'; import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; import Router from 'next/router'; import { MockedProvider } from 'react-apollo/test-utils'; import CreateItem, { CREATE_ITEM_MUTATION } from '../components/CreateItem'; -import wait from 'waait'; import { fakeItem } from '../lib/testUtils'; const dogImage = 'https://dog.com/dog.jpg'; -// Mock fetch to resolve data +// mock the global fetch API global.fetch = jest.fn().mockResolvedValue({ json: () => ({ secure_url: dogImage, @@ -17,14 +16,14 @@ global.fetch = jest.fn().mockResolvedValue({ }), }); -describe('<Createitem/>', () => { - it('renders and matches snapshot', () => { +describe('<CreateItem/>', () => { + it('renders and matches snapshot', async () => { const wrapper = mount( <MockedProvider> <CreateItem /> </MockedProvider> ); - const form = wrapper.find('form[data-test]'); + const form = wrapper.find('form[data-test="form"]'); expect(toJSON(form)).toMatchSnapshot(); }); @@ -34,14 +33,14 @@ describe('<Createitem/>', () => { <CreateItem /> </MockedProvider> ); - const component = wrapper.find('CreateItem').instance(); - const input = wrapper.find('input[type="file"]'); - // internally this does some setState() calls - input.simulate('change', { currentTarget: { files: ['fakedog.jpg'] } }); - await wait(0); + input.simulate('change', { target: { files: ['fakedog.jpg'] } }); + await wait(); + const component = wrapper.find('CreateItem').instance(); expect(component.state.image).toEqual(dogImage); expect(component.state.largeImage).toEqual(dogImage); + expect(global.fetch).toHaveBeenCalled(); + global.fetch.mockReset(); }); it('handles state updating', async () => { @@ -50,32 +49,21 @@ describe('<Createitem/>', () => { <CreateItem /> </MockedProvider> ); - wrapper.find('#title').simulate('change', { target: { value: 'Testing', name: 'title' } }); - wrapper.find('#price').simulate('change', { - target: { - value: 50000, - name: 'price', - type: 'number', - }, - }); - wrapper.find('#description').simulate('change', { - target: { - value: 'This is a really nice item', - name: 'description', - }, - }); - const component = wrapper.find('CreateItem').instance(); - expect(component.state).toMatchObject({ + wrapper + .find('#price') + .simulate('change', { target: { value: 50000, name: 'price', type: 'number' } }); + wrapper + .find('#description') + .simulate('change', { target: { value: 'This is a really nice item', name: 'description' } }); + + expect(wrapper.find('CreateItem').instance().state).toMatchObject({ title: 'Testing', - description: 'This is a really nice item', - image: '', - largeImage: '', price: 50000, + description: 'This is a really nice item', }); }); - - it('creates an item when form is submitted', async () => { + it('creates an item when the form is submitted', async () => { const item = fakeItem(); const mocks = [ { @@ -92,8 +80,9 @@ describe('<Createitem/>', () => { result: { data: { createItem: { - ...fakeItem(), - __typeName: 'Item', + ...fakeItem, + id: 'abc123', + __typename: 'Item', }, }, }, @@ -105,28 +94,19 @@ describe('<Createitem/>', () => { <CreateItem /> </MockedProvider> ); - + // simulate someone filling out the form wrapper.find('#title').simulate('change', { target: { value: item.title, name: 'title' } }); - wrapper.find('#price').simulate('change', { - target: { - value: item.price, - name: 'price', - type: 'number', - }, - }); - wrapper.find('#description').simulate('change', { - target: { - value: item.description, - name: 'description', - }, - }); - + wrapper + .find('#price') + .simulate('change', { target: { value: item.price, name: 'price', type: 'number' } }); + wrapper + .find('#description') + .simulate('change', { target: { value: item.description, name: 'description' } }); + // mock the router Router.router = { push: jest.fn() }; - // it submits and matches the mocks wrapper.find('form').simulate('submit'); - // it routes to the item page await wait(50); expect(Router.router.push).toHaveBeenCalled(); - expect(Router.router.push).toHaveBeenCalledWith({ pathname: '/item', query: { id: '123' } }); + expect(Router.router.push).toHaveBeenCalledWith({ pathname: '/item', query: { id: 'abc123' } }); }); }); diff --git a/finished-application/frontend/__tests__/EditUser.test.js b/finished-application/frontend/__tests__/EditUser.test.js deleted file mode 100644 index a98cbb5..0000000 --- a/finished-application/frontend/__tests__/EditUser.test.js +++ /dev/null @@ -1,75 +0,0 @@ -import React from 'react'; -import { mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; -import { MockedProvider } from 'react-apollo/test-utils'; -import wait from 'waait'; -import EditUser, { UPDATE_USER_MUTATION } from '../components/EditUser'; -import { fakeUser } from '../lib/testUtils'; -import { CURRENT_USER_QUERY } from '../components/User'; - -const mocks = [ - { - request: { query: CURRENT_USER_QUERY }, - result: { - data: { - me: fakeUser(), - }, - }, - }, - { - request: { - query: UPDATE_USER_MUTATION, - variables: { - name: 'Westopher', - }, - }, - result: { - updateUser: { - name: 'Westopher', - __typename: 'User', - }, - }, - }, -]; - -describe('<EditUser/>', () => { - it('renders', async () => { - const wrapper = mount( - <MockedProvider mocks={mocks}> - <EditUser /> - </MockedProvider> - ); - await wait(); - wrapper.update(); - expect(toJSON(wrapper.find('form'))).toMatchSnapshot(); - }); - - it('displays changes', async () => { - const wrapper = mount( - <MockedProvider mocks={mocks}> - <EditUser /> - </MockedProvider> - ); - await wait(); - wrapper.update(); - const nameInput = wrapper.find('[name="name"]'); - nameInput.simulate('change', { target: { name: 'name', value: 'Scott' } }); - const diff = wrapper.find('pre[data-test="change"]'); - expect(diff.text()).toBe('{"name":"Scott"}'); - }); - - it('calls update user when form is submitted', async () => { - const wrapper = mount( - <MockedProvider mocks={mocks}> - <EditUser /> - </MockedProvider> - ); - await wait(); - wrapper.update(); - const nameInput = wrapper.find('[name="name"]'); - nameInput.simulate('change', { target: { name: 'name', value: 'Westopher' } }); - wrapper.find('form').simulate('submit'); - wrapper.update(); - expect(wrapper.find('[data-test="updated"]').text()).toBe('Updated!'); - }); -}); diff --git a/finished-application/frontend/__tests__/Item.test.js b/finished-application/frontend/__tests__/Item.test.js index 129efa9..692b913 100644 --- a/finished-application/frontend/__tests__/Item.test.js +++ b/finished-application/frontend/__tests__/Item.test.js @@ -1,22 +1,39 @@ -/* eslint-env jest */ - -import React from 'react'; -import Enzyme, { shallow, mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; import ItemComponent from '../components/Item'; +import { shallow, mount } from 'enzyme'; +import toJSON from 'enzyme-to-json'; const fakeItem = { id: 'ABC123', title: 'A Cool Item', - price: 5000, + price: 4000, description: 'This item is really cool!', image: 'dog.jpg', largeImage: 'largedog.jpg', }; describe('<Item/>', () => { - it('Renders and matches snapshot', () => { + it('renders and matches the snapshot', () => { const wrapper = shallow(<ItemComponent item={fakeItem} />); expect(toJSON(wrapper)).toMatchSnapshot(); }); + // it('renders the image properly', () => { + // const wrapper = shallow(<ItemComponent item={fakeItem} />); + // const img = wrapper.find('img'); + // expect(img.props().src).toBe(fakeItem.image); + // expect(img.props().alt).toBe(fakeItem.title); + // }); + // it('renders the pricetag and title', () => { + // const wrapper = shallow(<ItemComponent item={fakeItem} />); + // const PriceTag = wrapper.find('PriceTag'); + // expect(PriceTag.children().text()).toBe('$50'); + // expect(wrapper.find('Title a').text()).toBe(fakeItem.title); + // }); + // it('renders out the buttons properly', () => { + // const wrapper = shallow(<ItemComponent item={fakeItem} />); + // const buttonList = wrapper.find('.buttonList'); + // expect(buttonList.children()).toHaveLength(3); + // expect(buttonList.find('Link')).toHaveLength(1); + // expect(buttonList.find('AddToCart').exists()).toBe(true); + // expect(buttonList.find('DeleteItem').exists()).toBe(true); + // }); }); diff --git a/finished-application/frontend/__tests__/Nav.test.js b/finished-application/frontend/__tests__/Nav.test.js index 5c61c56..d30cb39 100644 --- a/finished-application/frontend/__tests__/Nav.test.js +++ b/finished-application/frontend/__tests__/Nav.test.js @@ -1,66 +1,76 @@ -import React from 'react'; import { mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; import wait from 'waait'; -import Router from 'next/router'; +import toJSON from 'enzyme-to-json'; import Nav from '../components/Nav'; -import { MockedProvider } from 'react-apollo/test-utils'; -import { fakeUser } from '../lib/testUtils'; import { CURRENT_USER_QUERY } from '../components/User'; +import { MockedProvider } from 'react-apollo/test-utils'; +import { fakeUser, fakeCartItem } from '../lib/testUtils'; -// Mock the router -Router.router = { push() {} }; +const notSignedInMocks = [ + { + request: { query: CURRENT_USER_QUERY }, + result: { data: { me: null } }, + }, +]; -const loggedOutMocks = [ +const signedInMocks = [ { request: { query: CURRENT_USER_QUERY }, - delay: 0, - result: { - data: { - me: null, - }, - }, + result: { data: { me: fakeUser() } }, }, ]; -const loggedInMocks = [ +const signedInMocksWithCartItems = [ { request: { query: CURRENT_USER_QUERY }, result: { data: { - what: 'yah', me: { ...fakeUser(), - orders: [], - cart: [], + cart: [fakeCartItem(), fakeCartItem(), fakeCartItem()], }, }, }, }, ]; -describe('<Nav></Nav>', () => { - it('Renders minimal nav when logged out', () => { +describe('<Nav/>', () => { + it('renders a minimal nav when signed out', async () => { const wrapper = mount( - <MockedProvider mocks={loggedOutMocks}> + <MockedProvider mocks={notSignedInMocks}> <Nav /> </MockedProvider> ); + await wait(); + wrapper.update(); + // console.log(wrapper.debug()); const nav = wrapper.find('ul[data-test="nav"]'); expect(toJSON(nav)).toMatchSnapshot(); }); - it('renders full nav when logged in', async () => { + it('renders full nav when signed in', async () => { const wrapper = mount( - <MockedProvider mocks={loggedInMocks}> + <MockedProvider mocks={signedInMocks}> <Nav /> </MockedProvider> ); await wait(); wrapper.update(); const nav = wrapper.find('ul[data-test="nav"]'); - // account link - const accountLink = wrapper.find('a[href="/me"]'); - expect(accountLink.length).toBe(1); + expect(nav.children().length).toBe(6); + expect(nav.text()).toContain('Sign Out'); + }); + + it('renders the amount of items in the cart', async () => { + const wrapper = mount( + <MockedProvider mocks={signedInMocksWithCartItems}> + <Nav /> + </MockedProvider> + ); + await wait(); + wrapper.update(); + const nav = wrapper.find('[data-test="nav"]'); + const count = nav.find('div.count'); + expect(toJSON(count)).toMatchSnapshot(); }); }); diff --git a/finished-application/frontend/__tests__/Order.test.js b/finished-application/frontend/__tests__/Order.test.js index f3a4f06..71accfa 100644 --- a/finished-application/frontend/__tests__/Order.test.js +++ b/finished-application/frontend/__tests__/Order.test.js @@ -1,4 +1,3 @@ -import React from 'react'; import { mount } from 'enzyme'; import toJSON from 'enzyme-to-json'; import wait from 'waait'; @@ -8,32 +7,19 @@ import { fakeOrder } from '../lib/testUtils'; const mocks = [ { - request: { query: SINGLE_ORDER_QUERY, variables: { id: '123' } }, - result: { - data: { - order: fakeOrder(), - }, - }, + request: { query: SINGLE_ORDER_QUERY, variables: { id: 'ord123' } }, + result: { data: { order: fakeOrder() } }, }, ]; describe('<Order/>', () => { - it('Renders loading state', async () => { + it('renders the order', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> - <Order id="123" /> + <Order id="ord123" /> </MockedProvider> ); - expect(wrapper.text()).toContain('Loading...'); - }); - - it('Renders the order', async () => { - const wrapper = mount( - <MockedProvider mocks={mocks}> - <Order id="123" /> - </MockedProvider> - ); - await wait(50); + await wait(); wrapper.update(); const order = wrapper.find('div[data-test="order"]'); expect(toJSON(order)).toMatchSnapshot(); diff --git a/finished-application/frontend/__tests__/Pagination.test.js b/finished-application/frontend/__tests__/Pagination.test.js index 29a57f9..7117db8 100644 --- a/finished-application/frontend/__tests__/Pagination.test.js +++ b/finished-application/frontend/__tests__/Pagination.test.js @@ -1,20 +1,19 @@ -import React from 'react'; -import { shallow, mount } from 'enzyme'; +import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; +import Router from 'next/router'; import Pagination, { PAGINATION_QUERY } from '../components/Pagination'; import { MockedProvider } from 'react-apollo/test-utils'; -import wait from 'waait'; -import { fakeItem } from '../lib/testUtils'; - -import Router from 'next/router'; -// mock the router because there isn't really a router instance -Router.router = { push() {}, prefetch() {} }; +Router.router = { + push() {}, + prefetch() {}, +}; function makeMocksFor(length) { return [ { - request: { query: PAGINATION_QUERY, variables: { skip: 0, first: 4 } }, + request: { query: PAGINATION_QUERY }, result: { data: { itemsConnection: { @@ -31,15 +30,14 @@ function makeMocksFor(length) { } describe('<Pagination/>', () => { - it('displays loading message', async () => { + it('displays a loading message', () => { const wrapper = mount( <MockedProvider mocks={makeMocksFor(1)}> <Pagination page={1} /> </MockedProvider> ); - await wait(); - wrapper.update(); - expect(toJSON(wrapper.find('div[data-test="pagination"]'))).toMatchSnapshot(); + const pagination = wrapper.find('[data-test="pagination"]'); + expect(wrapper.text()).toContain('Loading...'); }); it('renders pagination for 18 items', async () => { @@ -51,6 +49,8 @@ describe('<Pagination/>', () => { await wait(); wrapper.update(); expect(wrapper.find('.totalPages').text()).toEqual('5'); + const pagination = wrapper.find('div[data-test="pagination"]'); + expect(toJSON(pagination)).toMatchSnapshot(); }); it('disables prev button on first page', async () => { @@ -61,11 +61,9 @@ describe('<Pagination/>', () => { ); await wait(); wrapper.update(); - // first page expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(true); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(false); }); - it('disables next button on last page', async () => { const wrapper = mount( <MockedProvider mocks={makeMocksFor(18)}> @@ -74,20 +72,17 @@ describe('<Pagination/>', () => { ); await wait(); wrapper.update(); - // first page expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(false); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(true); }); - it('enables all buttons on a middle page', async () => { const wrapper = mount( <MockedProvider mocks={makeMocksFor(18)}> - <Pagination page={2} /> + <Pagination page={3} /> </MockedProvider> ); await wait(); wrapper.update(); - // first page expect(wrapper.find('a.prev').prop('aria-disabled')).toEqual(false); expect(wrapper.find('a.next').prop('aria-disabled')).toEqual(false); }); diff --git a/finished-application/frontend/__tests__/PleaseSignIn.test.js b/finished-application/frontend/__tests__/PleaseSignIn.test.js index f516ea3..7d476b4 100644 --- a/finished-application/frontend/__tests__/PleaseSignIn.test.js +++ b/finished-application/frontend/__tests__/PleaseSignIn.test.js @@ -1,80 +1,51 @@ -import React from 'react'; import { mount } from 'enzyme'; import wait from 'waait'; import PleaseSignIn from '../components/PleaseSignIn'; +import { CURRENT_USER_QUERY } from '../components/User'; import { MockedProvider } from 'react-apollo/test-utils'; import { fakeUser } from '../lib/testUtils'; -import { CURRENT_USER_QUERY } from '../components/User'; const notSignedInMocks = [ { request: { query: CURRENT_USER_QUERY }, - result: { - data: { - me: null, - }, - }, + result: { data: { me: null } }, }, ]; const signedInMocks = [ { request: { query: CURRENT_USER_QUERY }, - result: { - data: { - me: { - ...fakeUser(), - permissions: ['VIEW_HEY'], - }, - }, - }, + result: { data: { me: fakeUser() } }, }, ]; -// some dummy child component -const Hey = () => <p>Hey!</p>; -describe('<PleaseSignIn />', () => { - it('renders sign in dialog to logged out users', async () => { +describe('<PleaseSignIn/>', () => { + it('renders the sign in dialog to logged out users', async () => { const wrapper = mount( <MockedProvider mocks={notSignedInMocks}> - <PleaseSignIn allowedPermissions={[]}> - <Hey /> - </PleaseSignIn> + <PleaseSignIn /> </MockedProvider> ); await wait(); wrapper.update(); - // find the error message - expect(wrapper.text()).toContain('Please sign in before continuing!'); - // show the sign in dialog - expect(wrapper.find('Signin').exists()).toBeTruthy(); + expect(wrapper.text()).toContain('Please Sign In before Continuing'); + const SignIn = wrapper.find('Signin'); + expect(SignIn.exists()).toBe(true); }); - it('renders child for correct permissions', async () => { - const wrapper = mount( - <MockedProvider mocks={signedInMocks}> - <PleaseSignIn allowedPermissions={['ADMIN', 'VIEW_HEY']}> - <Hey /> - </PleaseSignIn> - </MockedProvider> - ); - await wait(); - wrapper.update(); - expect(wrapper.find('Hey').exists()).toBeTruthy(); - }); - it("renders error when permissions aren't met", async () => { + it('renders the child component when the user is signed in', async () => { + const Hey = () => <p>Hey!</p>; const wrapper = mount( <MockedProvider mocks={signedInMocks}> - <PleaseSignIn allowedPermissions={['ADMIN']}> + <PleaseSignIn> <Hey /> </PleaseSignIn> </MockedProvider> ); + await wait(); wrapper.update(); - // should tell you you can't access it - expect(wrapper.text()).toContain('Insufficient Permissions'); - // it should not render the child component - expect(wrapper.find('Hey').exists()).toBeFalsy(); + // expect(wrapper.find('Hey').exists()).toBe(true); + expect(wrapper.contains(<Hey />)).toBe(true); }); }); diff --git a/finished-application/frontend/__tests__/RemoveFromCart.test.js b/finished-application/frontend/__tests__/RemoveFromCart.test.js index 34229a5..faacc91 100644 --- a/finished-application/frontend/__tests__/RemoveFromCart.test.js +++ b/finished-application/frontend/__tests__/RemoveFromCart.test.js @@ -1,12 +1,13 @@ -import React from 'react'; import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; -import { ApolloConsumer } from 'react-apollo'; import { MockedProvider } from 'react-apollo/test-utils'; -import wait from 'waait'; +import { ApolloConsumer } from 'react-apollo'; import RemoveFromCart, { REMOVE_FROM_CART_MUTATION } from '../components/RemoveFromCart'; -import { fakeCartItem, fakeUser } from '../lib/testUtils'; import { CURRENT_USER_QUERY } from '../components/User'; +import { fakeUser, fakeCartItem } from '../lib/testUtils'; + +global.alert = console.log; const mocks = [ { @@ -16,17 +17,12 @@ const mocks = [ me: { ...fakeUser(), cart: [fakeCartItem({ id: 'abc123' })], - orders: [], }, }, }, }, { - request: { - // This is the mutation - query: REMOVE_FROM_CART_MUTATION, - variables: { id: 'abc123' }, - }, + request: { query: REMOVE_FROM_CART_MUTATION, variables: { id: 'abc123' } }, result: { data: { removeFromCart: { @@ -39,19 +35,17 @@ const mocks = [ ]; describe('<RemoveFromCart/>', () => { - it('renders and matches snapshot', () => { + it('renders and matches snapshot', async () => { const wrapper = mount( - <MockedProvider mocks={mocks}> + <MockedProvider> <RemoveFromCart id="abc123" /> </MockedProvider> ); expect(toJSON(wrapper.find('button'))).toMatchSnapshot(); }); - it('removes an item from the cart', async () => { - // 1. Grab a copy of the current client + it('removes the item from cart', async () => { let apolloClient; - // const wrapper = mountWithApollo(<RemoveFromCart id="abc123" />); const wrapper = mount( <MockedProvider mocks={mocks}> <ApolloConsumer> @@ -62,17 +56,12 @@ describe('<RemoveFromCart/>', () => { </ApolloConsumer> </MockedProvider> ); - // Fire Off that first mock - await apolloClient.query({ query: CURRENT_USER_QUERY }); - // check if it worked - const { me } = apolloClient.readQuery({ query: CURRENT_USER_QUERY }); - expect(me.cart).toHaveLength(1); - expect(me.cart[0].item.price).toBe(5000); - - // simulate a click, which will fire REMOVE_FROM_CART mock + const res = await apolloClient.query({ query: CURRENT_USER_QUERY }); + expect(res.data.me.cart).toHaveLength(1); + expect(res.data.me.cart[0].item.price).toBe(5000); wrapper.find('button').simulate('click'); await wait(); - const { me: me2 } = apolloClient.readQuery({ query: CURRENT_USER_QUERY }); - expect(me2.cart).toHaveLength(0); + const res2 = await apolloClient.query({ query: CURRENT_USER_QUERY }); + expect(res2.data.me.cart).toHaveLength(0); }); }); diff --git a/finished-application/frontend/__tests__/ResetRequest.test.js b/finished-application/frontend/__tests__/RequestReset.test.js index 22a9508..345b365 100644 --- a/finished-application/frontend/__tests__/ResetRequest.test.js +++ b/finished-application/frontend/__tests__/RequestReset.test.js @@ -1,54 +1,46 @@ import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; import { MockedProvider } from 'react-apollo/test-utils'; -import wait from 'waait'; -import ResetRequest, { REQUEST_RESET_MUTATION } from '../components/ResetRequest'; +import RequestReset, { REQUEST_RESET_MUTATION } from '../components/RequestReset'; const mocks = [ { request: { query: REQUEST_RESET_MUTATION, - variables: { - email: 'wesbos@gmail.com', - }, + variables: { email: 'wesbos@gmail.com' }, }, result: { - data: { - requestReset: { id: 'abc123', __typename: 'User' }, - }, + data: { requestReset: { message: 'success', __typename: 'Message' } }, }, }, ]; -describe('<ResetRequest/>', () => { +describe('<RequestReset/>', () => { it('renders and matches snapshot', async () => { const wrapper = mount( <MockedProvider> - <ResetRequest /> + <RequestReset /> </MockedProvider> ); - const form = wrapper.find("form[data-test='ResetRequest']"); + const form = wrapper.find('form[data-test="form"]'); expect(toJSON(form)).toMatchSnapshot(); }); it('calls the mutation', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> - <ResetRequest /> + <RequestReset /> </MockedProvider> ); - - wrapper.find('input').simulate('change', { - target: { value: 'wesbos@gmail.com' }, - }); - + // simulate typing an email + wrapper + .find('input') + .simulate('change', { target: { name: 'email', value: 'wesbos@gmail.com' } }); // submit the form - const form = wrapper.find('form'); - console.log(form); - form.simulate('submit'); - + wrapper.find('form').simulate('submit'); await wait(); wrapper.update(); - expect(wrapper.find('p').text()).toContain('Success! Check Your Email!'); + expect(wrapper.find('p').text()).toContain('Success! Check your email for a reset link!'); }); }); diff --git a/finished-application/frontend/__tests__/Signup.test.js b/finished-application/frontend/__tests__/Signup.test.js index 2a668a6..e18bdee 100644 --- a/finished-application/frontend/__tests__/Signup.test.js +++ b/finished-application/frontend/__tests__/Signup.test.js @@ -1,29 +1,27 @@ -import React from 'react'; import { mount } from 'enzyme'; -import toJSON from 'enzyme-to-json'; import wait from 'waait'; -import { ApolloConsumer } from 'react-apollo'; +import toJSON from 'enzyme-to-json'; import { MockedProvider } from 'react-apollo/test-utils'; +import { ApolloConsumer } from 'react-apollo'; import Signup, { SIGNUP_MUTATION } from '../components/Signup'; -import { fakeUser } from '../lib/testUtils'; import { CURRENT_USER_QUERY } from '../components/User'; +import { fakeUser } from '../lib/testUtils'; function type(wrapper, name, value) { wrapper.find(`input[name="${name}"]`).simulate('change', { - target: { - name, - value, - }, + target: { name, value }, }); } + const me = fakeUser(); const mocks = [ + // signup mock mutation { request: { query: SIGNUP_MUTATION, variables: { - email: me.email, name: me.name, + email: me.email, password: 'wes', }, }, @@ -38,22 +36,15 @@ const mocks = [ }, }, }, + // current user query mock { request: { query: CURRENT_USER_QUERY }, - result: { - data: { - me: { - __typename: 'User', - ...me, - cart: [], - }, - }, - }, + result: { data: { me } }, }, ]; describe('<Signup/>', () => { - it('renders and matches snapshot', () => { + it('renders and matches snapshot', async () => { const wrapper = mount( <MockedProvider> <Signup /> @@ -62,7 +53,7 @@ describe('<Signup/>', () => { expect(toJSON(wrapper.find('form'))).toMatchSnapshot(); }); - it('calls mutation with correct data', async () => { + it('calls the mutation properly', async () => { let apolloClient; const wrapper = mount( <MockedProvider mocks={mocks}> @@ -74,17 +65,15 @@ describe('<Signup/>', () => { </ApolloConsumer> </MockedProvider> ); - await wait(); wrapper.update(); - type(wrapper, 'name', me.name); type(wrapper, 'email', me.email); type(wrapper, 'password', 'wes'); - wrapper.update(); wrapper.find('form').simulate('submit'); - + await wait(); + // query the user out of the apollo client const user = await apolloClient.query({ query: CURRENT_USER_QUERY }); expect(user.data.me).toMatchObject(me); }); diff --git a/finished-application/frontend/__tests__/SingleItem.test.js b/finished-application/frontend/__tests__/SingleItem.test.js index aeb8554..2963bde 100644 --- a/finished-application/frontend/__tests__/SingleItem.test.js +++ b/finished-application/frontend/__tests__/SingleItem.test.js @@ -1,26 +1,22 @@ -import React from 'react'; import { mount } from 'enzyme'; -import wait from 'waait'; import toJSON from 'enzyme-to-json'; +import wait from 'waait'; import SingleItem, { SINGLE_ITEM_QUERY } from '../components/SingleItem'; import { MockedProvider } from 'react-apollo/test-utils'; -import { fakeItem, fakeUser } from '../lib/testUtils'; -import { CURRENT_USER_QUERY } from '../components/User'; - -const data = { - items: [fakeItem()], -}; +import { fakeItem } from '../lib/testUtils'; describe('<SingleItem/>', () => { - it('Renders with Proper Data', async () => { + it('renders with proper data', async () => { const mocks = [ { + // when someone makes a request with this query and variable combo request: { query: SINGLE_ITEM_QUERY, variables: { id: '123' } }, - result: { data }, - }, - { - request: { query: CURRENT_USER_QUERY }, - result: { data: { me: fakeUser() } }, + // return this fake data (mocked data) + result: { + data: { + item: fakeItem(), + }, + }, }, ]; const wrapper = mount( @@ -28,27 +24,22 @@ describe('<SingleItem/>', () => { <SingleItem id="123" /> </MockedProvider> ); - // Check for loading state expect(wrapper.text()).toContain('Loading...'); - - // wait for response and refresh - await wait(55); + await wait(); wrapper.update(); - // Grab the piece we want + // console.log(wrapper.debug()); expect(toJSON(wrapper.find('h2'))).toMatchSnapshot(); expect(toJSON(wrapper.find('img'))).toMatchSnapshot(); expect(toJSON(wrapper.find('p'))).toMatchSnapshot(); }); - it('Errors with a not found Item', async () => { + it('Errors with a not found item', async () => { const mocks = [ { request: { query: SINGLE_ITEM_QUERY, variables: { id: '123' } }, - delay: 50, - // we can return data and an error - result: { data, errors: [{ message: 'Item not found!' }] }, - // or just an error! - // error: new Error('offline!'), + result: { + errors: [{ message: 'Items Not Found!' }], + }, }, ]; const wrapper = mount( @@ -56,12 +47,11 @@ describe('<SingleItem/>', () => { <SingleItem id="123" /> </MockedProvider> ); - - // wait for response - await wait(55); + await wait(); wrapper.update(); - - const Item = wrapper.find('[data-test="graphql-error"]'); - expect(toJSON(Item)).toMatchSnapshot(); + console.log(wrapper.debug()); + const item = wrapper.find('[data-test="graphql-error"]'); + expect(item.text()).toContain('Items Not Found!'); + expect(toJSON(item)).toMatchSnapshot(); }); }); diff --git a/finished-application/frontend/__tests__/TakeMyMoney.test.js b/finished-application/frontend/__tests__/TakeMyMoney.test.js index 1c41410..3d68502 100644 --- a/finished-application/frontend/__tests__/TakeMyMoney.test.js +++ b/finished-application/frontend/__tests__/TakeMyMoney.test.js @@ -1,12 +1,13 @@ import { mount } from 'enzyme'; +import wait from 'waait'; import toJSON from 'enzyme-to-json'; import NProgress from 'nprogress'; import Router from 'next/router'; -import wait from 'waait'; import { MockedProvider } from 'react-apollo/test-utils'; -import TakeMyMoney from '../components/TakeMyMoney'; -import { fakeUser, fakeCartItem } from '../lib/testUtils'; +import { ApolloConsumer } from 'react-apollo'; +import TakeMyMoney, { CREATE_ORDER_MUTATION } from '../components/TakeMyMoney'; import { CURRENT_USER_QUERY } from '../components/User'; +import { fakeUser, fakeCartItem } from '../lib/testUtils'; Router.router = { push() {} }; @@ -23,34 +24,33 @@ const mocks = [ }, }, ]; -describe('<TakeMyMoney />', () => { - it('renders', async () => { + +describe('<TakeMyMoney/>', () => { + it('renders and matches snapshot', async () => { const wrapper = mount( <MockedProvider mocks={mocks}> <TakeMyMoney /> </MockedProvider> ); - // wait for it to load await wait(); wrapper.update(); - // find the button const checkoutButton = wrapper.find('ReactStripeCheckout'); expect(toJSON(checkoutButton)).toMatchSnapshot(); }); - - it('creates an order onToken', async () => { - const createOrderSpy = jest.fn().mockResolvedValue({ data: { createOrder: { id: 'xyz789' } } }); - + it('creates an order ontoken', async () => { + const createOrderMock = jest.fn().mockResolvedValue({ + data: { createOrder: { id: 'xyz789' } }, + }); const wrapper = mount( <MockedProvider mocks={mocks}> <TakeMyMoney /> </MockedProvider> ); - const component = wrapper.find('TakeMyMoney'); - component.instance().onToken({ id: 'abc123' }, createOrderSpy); - // check it - expect(createOrderSpy).toBeCalled(); - expect(createOrderSpy).toBeCalledWith({ variables: { token: 'abc123' } }); + const component = wrapper.find('TakeMyMoney').instance(); + // manully call that onToken method + component.onToken({ id: 'abc123' }, createOrderMock); + expect(createOrderMock).toHaveBeenCalled(); + expect(createOrderMock).toHaveBeenCalledWith({ variables: { token: 'abc123' } }); }); it('turns the progress bar on', async () => { @@ -62,16 +62,16 @@ describe('<TakeMyMoney />', () => { await wait(); wrapper.update(); NProgress.start = jest.fn(); - - const createOrderSpy = jest.fn().mockResolvedValue({ data: { createOrder: { id: 'xyz789' } } }); - const component = wrapper.find('TakeMyMoney'); - component.instance().onToken({ id: 'abc123' }, createOrderSpy); - wrapper.find('button').simulate('click'); + const createOrderMock = jest.fn().mockResolvedValue({ + data: { createOrder: { id: 'xyz789' } }, + }); + const component = wrapper.find('TakeMyMoney').instance(); + // manully call that onToken method + component.onToken({ id: 'abc123' }, createOrderMock); expect(NProgress.start).toHaveBeenCalled(); }); it('routes to the order page when completed', async () => { - // Mount the wrapper const wrapper = mount( <MockedProvider mocks={mocks}> <TakeMyMoney /> @@ -79,20 +79,20 @@ describe('<TakeMyMoney />', () => { ); await wait(); wrapper.update(); - - // Spy on Router Push + const createOrderMock = jest.fn().mockResolvedValue({ + data: { createOrder: { id: 'xyz789' } }, + }); + const component = wrapper.find('TakeMyMoney').instance(); Router.router.push = jest.fn(); - const createOrderSpy = jest.fn().mockResolvedValue({ data: { createOrder: { id: 'xyz789' } } }); - - const component = wrapper.find('TakeMyMoney'); - component.instance().onToken({ id: 'abc123' }, createOrderSpy); - - // submit the form - wrapper.find('button').simulate('click'); + // manully call that onToken method + component.onToken({ id: 'abc123' }, createOrderMock); await wait(); + expect(Router.router.push).toHaveBeenCalled(); expect(Router.router.push).toHaveBeenCalledWith({ pathname: '/order', - query: { id: 'xyz789' }, + query: { + id: 'xyz789', + }, }); }); }); diff --git a/finished-application/frontend/__tests__/__snapshots__/AddToCart.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/AddToCart.test.js.snap index e3f8229..2f489d4 100644 --- a/finished-application/frontend/__tests__/__snapshots__/AddToCart.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/AddToCart.test.js.snap @@ -1,11 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<AddtoCart/> renders and matches snapshot 1`] = ` +exports[`<AddToCart/> renders and matches the snap shot 1`] = ` <button disabled={false} onClick={[Function]} > - 🛒 Add - To Cart + Add + To Cart 🛒 </button> `; diff --git a/finished-application/frontend/__tests__/__snapshots__/Cart.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Cart.test.js.snap index 9aeedfd..d5c0d92 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Cart.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Cart.test.js.snap @@ -1,31 +1,31 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Cart/> renders 1`] = ` +exports[`<Cart/> renders and matches snappy 1`] = ` <header> - <styled.button + <CloseButton onClick={[Function]} title="close" > <button - className="sc-EHOje jytiuo" + className="CloseButton-sc-1seb878-0 lbNKfp" onClick={[Function]} title="close" > × </button> - </styled.button> - <styled.h3> + </CloseButton> + <Supreme> <h3 - className="sc-ifAKCX imryuh" + className="Supreme-xv30qb-0 hpaXsq" > Miss Coleman Berge - 's Cart. + 's Cart </h3> - </styled.h3> + </Supreme> <p> - You have + You Have 1 - item + Item in your cart. </p> </header> diff --git a/finished-application/frontend/__tests__/__snapshots__/CartCount.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/CartCount.test.js.snap index 224141b..92ee89a 100644 --- a/finished-application/frontend/__tests__/__snapshots__/CartCount.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/CartCount.test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<CartCount></CartCount> matches snapshot 1`] = ` -<styled.span> +exports[`<CartCount/> matches the snapshot 1`] = ` +<CartCount__AnimationStyles> <TransitionGroup childFactory={[Function]} component="div" @@ -9,7 +9,7 @@ exports[`<CartCount></CartCount> matches snapshot 1`] = ` <CSSTransition className="count" classNames="count" - key="10" + key="11" timeout={ Object { "enter": 400, @@ -18,188 +18,62 @@ exports[`<CartCount></CartCount> matches snapshot 1`] = ` } unmountOnExit={true} > - <styled.div> - 10 - </styled.div> + <CartCount__Dot> + 11 + </CartCount__Dot> </CSSTransition> </TransitionGroup> -</styled.span> +</CartCount__AnimationStyles> `; -exports[`<CartCount></CartCount> updates via props 1`] = ` -<CartCount - count={50} -> - <styled.span> - <span - className="sc-bwzfXH fWZfOZ" +exports[`<CartCount/> updates via props 1`] = ` +<CartCount__AnimationStyles> + <TransitionGroup + childFactory={[Function]} + component="div" + > + <CSSTransition + className="count" + classNames="count" + key="50" + timeout={ + Object { + "enter": 400, + "exit": 400, + } + } + unmountOnExit={true} > - <TransitionGroup - childFactory={[Function]} - component="div" - > - <div> - <CSSTransition - className="count" - classNames="count" - in={true} - key=".$50" - onExited={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <Transition - appear={false} - className="count" - enter={true} - exit={true} - in={true} - mountOnEnter={false} - onEnter={[Function]} - onEntered={[Function]} - onEntering={[Function]} - onExit={[Function]} - onExited={[Function]} - onExiting={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <styled.div - className="count" - > - <div - className="count sc-bdVaJa ldHGxH" - > - 50 - </div> - </styled.div> - </Transition> - </CSSTransition> - </div> - </TransitionGroup> - </span> - </styled.span> -</CartCount> + <CartCount__Dot> + 50 + </CartCount__Dot> + </CSSTransition> + </TransitionGroup> +</CartCount__AnimationStyles> `; -exports[`<CartCount></CartCount> updates via props 2`] = ` -<CartCount - count={10} -> - <styled.span> - <span - className="sc-bwzfXH fWZfOZ" +exports[`<CartCount/> updates via props 2`] = ` +<CartCount__AnimationStyles> + <TransitionGroup + childFactory={[Function]} + component="div" + > + <CSSTransition + className="count" + classNames="count" + key="10" + timeout={ + Object { + "enter": 400, + "exit": 400, + } + } + unmountOnExit={true} > - <TransitionGroup - childFactory={[Function]} - component="div" - > - <div> - <CSSTransition - className="count" - classNames="count" - in={true} - key=".$10" - onExited={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <Transition - appear={false} - className="count" - enter={true} - exit={true} - in={true} - mountOnEnter={false} - onEnter={[Function]} - onEntered={[Function]} - onEntering={[Function]} - onExit={[Function]} - onExited={[Function]} - onExiting={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <styled.div - className="count" - > - <div - className="count sc-bdVaJa ldHGxH" - > - 10 - </div> - </styled.div> - </Transition> - </CSSTransition> - <CSSTransition - className="count" - classNames="count" - in={false} - key=".$50" - onExited={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <Transition - appear={false} - className="count" - enter={true} - exit={true} - in={false} - mountOnEnter={false} - onEnter={[Function]} - onEntered={[Function]} - onEntering={[Function]} - onExit={[Function]} - onExited={[Function]} - onExiting={[Function]} - timeout={ - Object { - "enter": 400, - "exit": 400, - } - } - unmountOnExit={true} - > - <styled.div - className="count" - > - <div - className="count sc-bdVaJa ldHGxH" - > - 50 - </div> - </styled.div> - </Transition> - </CSSTransition> - </div> - </TransitionGroup> - </span> - </styled.span> -</CartCount> + <CartCount__Dot> + 10 + </CartCount__Dot> + </CSSTransition> + </TransitionGroup> +</CartCount__AnimationStyles> `; diff --git a/finished-application/frontend/__tests__/__snapshots__/CartItem.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/CartItem.test.js.snap deleted file mode 100644 index b8f5ad3..0000000 --- a/finished-application/frontend/__tests__/__snapshots__/CartItem.test.js.snap +++ /dev/null @@ -1,33 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`<CartItem> renders and matches snapshot 1`] = ` -<styled.li - key="abc123" -> - <img - alt="Fake Item" - src="dog.jpg" - width="100" - /> - <div - className="cart-item-details" - > - <h3> - Fake Item - </h3> - <p> - $1,000 - — - <em> - 20 - × - $50 - each - </em> - </p> - </div> - <RemoveFromCart - id="abc123" - /> -</styled.li> -`; diff --git a/finished-application/frontend/__tests__/__snapshots__/CreateItem.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/CreateItem.test.js.snap index 89dbcd2..59d8557 100644 --- a/finished-application/frontend/__tests__/__snapshots__/CreateItem.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/CreateItem.test.js.snap @@ -1,14 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Createitem/> renders and matches snapshot 1`] = ` +exports[`<CreateItem/> renders and matches snapshot 1`] = ` <form - className="sc-bwzfXH ikCwBB" - data-test={true} + className="Form-sc-1xszr8q-0 krRxky" + data-test="form" onSubmit={[Function]} > - <h2> - Sell an Item. - </h2> <DisplayError error={Object {}} /> @@ -21,9 +18,10 @@ exports[`<Createitem/> renders and matches snapshot 1`] = ` > Image <input - accept=".png, .jpg, .jpeg" id="file" + name="file" onChange={[Function]} + placeholder="Upload an image" required={true} type="file" /> @@ -45,26 +43,30 @@ exports[`<Createitem/> renders and matches snapshot 1`] = ` <label htmlFor="price" > - Price - 0 + Price <input id="price" - min="0" name="price" onChange={[Function]} + placeholder="Price" required={true} type="number" value={0} /> </label> - <textarea - id="description" - name="description" - onChange={[Function]} - placeholder="The desc for this item" - required={true} - value="" - /> + <label + htmlFor="description" + > + Description + <textarea + id="description" + name="description" + onChange={[Function]} + placeholder="Enter A Description" + required={true} + value="" + /> + </label> <button type="submit" > diff --git a/finished-application/frontend/__tests__/__snapshots__/EditUser.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/EditUser.test.js.snap deleted file mode 100644 index bbb672d..0000000 --- a/finished-application/frontend/__tests__/__snapshots__/EditUser.test.js.snap +++ /dev/null @@ -1,47 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`<EditUser/> renders 1`] = ` -<form - className="sc-bdVaJa LHejR" - onSubmit={[Function]} -> - <DisplayError - error={Object {}} - /> - <fieldset - aria-busy={false} - disabled={false} - > - <label - htmlFor="name" - > - Name: - <input - defaultValue="Miss Coleman Berge" - name="name" - onChange={[Function]} - type="text" - /> - </label> - <button - type="submit" - > - Update - </button> - <strong> - me: - </strong> - <pre> - "Miss Coleman Berge" - </pre> - <strong> - Change: - </strong> - <pre - data-test="change" - > - {} - </pre> - </fieldset> -</form> -`; diff --git a/finished-application/frontend/__tests__/__snapshots__/Item.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Item.test.js.snap index 930c7a9..70e4aa8 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Item.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Item.test.js.snap @@ -1,14 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Item/> Renders and matches snapshot 1`] = ` -<styled.div - key="ABC123" -> +exports[`<Item/> renders and matches the snapshot 1`] = ` +<ItemStyles__Item> <img alt="A Cool Item" src="dog.jpg" /> - <styled.h3> + <Title> <Link href={ Object { @@ -23,10 +21,10 @@ exports[`<Item/> Renders and matches snapshot 1`] = ` A Cool Item </a> </Link> - </styled.h3> - <styled.span> - $50 - </styled.span> + </Title> + <PriceTag> + $40 + </PriceTag> <p> This item is really cool! </p> @@ -36,7 +34,7 @@ exports[`<Item/> Renders and matches snapshot 1`] = ` <Link href={ Object { - "pathname": "/update", + "pathname": "update", "query": Object { "id": "ABC123", }, @@ -52,7 +50,9 @@ exports[`<Item/> Renders and matches snapshot 1`] = ` /> <DeleteItem id="ABC123" - /> + > + Delete This Item + </DeleteItem> </div> -</styled.div> +</ItemStyles__Item> `; diff --git a/finished-application/frontend/__tests__/__snapshots__/Nav.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Nav.test.js.snap index 354fbc1..c3155a9 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Nav.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Nav.test.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Nav></Nav> Renders minimal nav when logged out 1`] = ` +exports[`<Nav/> renders a minimal nav when signed out 1`] = ` <ul - className="sc-dnqmqq kxZizK" + className="NavStyles-sc-11c0d2g-0 YVEeD" data-test="nav" > <Link @@ -16,16 +16,6 @@ exports[`<Nav></Nav> Renders minimal nav when logged out 1`] = ` </a> </Link> <Link - href="/sell" - > - <a - href="/sell" - onClick={[Function]} - > - Sell - </a> - </Link> - <Link href="/signup" > <a @@ -37,3 +27,11 @@ exports[`<Nav></Nav> Renders minimal nav when logged out 1`] = ` </Link> </ul> `; + +exports[`<Nav/> renders the amount of items in the cart 1`] = ` +<div + className="count CartCount__Dot-xxvp4g-1 fJsVOg" +> + 9 +</div> +`; diff --git a/finished-application/frontend/__tests__/__snapshots__/Order.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Order.test.js.snap index 8e76546..9dce80b 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Order.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Order.test.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Order/> Renders the order 1`] = ` +exports[`<Order/> renders the order 1`] = ` <div - className="sc-bwzfXH wJijb" + className="OrderStyles-sc-4oqalm-0 eDzsVm" data-test="order" > <SideEffect(Head)> @@ -10,7 +10,7 @@ exports[`<Order/> Renders the order 1`] = ` </SideEffect(Head)> <p> <span> - Order Id: + Order ID: </span> <span> ord123 @@ -29,7 +29,7 @@ exports[`<Order/> Renders the order 1`] = ` Date </span> <span> - March 90, 2018 8:00 A + March 31, 2018 8:00 PM </span> </p> <p> @@ -63,9 +63,7 @@ exports[`<Order/> Renders the order 1`] = ` className="item-details" > <h2> - soluta non omnis consequatur enim quia autem - </h2> <p> Qty: @@ -76,12 +74,8 @@ exports[`<Order/> Renders the order 1`] = ` $42.34 </p> <p> - Subtotal: - $42.34 - </p> - <p> SubTotal: - et modi tenetur amet modi reprehenderit omnis + $42.34 </p> <p> et modi tenetur amet modi reprehenderit omnis @@ -100,9 +94,7 @@ exports[`<Order/> Renders the order 1`] = ` className="item-details" > <h2> - quia sed exercitationem omnis laborum exercitationem est - </h2> <p> Qty: @@ -113,12 +105,8 @@ exports[`<Order/> Renders the order 1`] = ` $42.34 </p> <p> - Subtotal: - $42.34 - </p> - <p> SubTotal: - sapiente laudantium molestias assumenda quasi adipisci mollitia + $42.34 </p> <p> sapiente laudantium molestias assumenda quasi adipisci mollitia diff --git a/finished-application/frontend/__tests__/__snapshots__/Pagination.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Pagination.test.js.snap index c757968..110f59d 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Pagination.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Pagination.test.js.snap @@ -1,8 +1,8 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<Pagination/> displays loading message 1`] = ` +exports[`<Pagination/> renders pagination for 18 items 1`] = ` <div - className="sc-bdVaJa ijYKGd" + className="PaginationStyles-aduuar-0 ewJsCc" data-test="pagination" > <SideEffect(Head)> @@ -25,26 +25,22 @@ exports[`<Pagination/> displays loading message 1`] = ` href="items?page=0" onClick={[Function]} > - ←Prev + ← Prev </a> </Link> <p> Page - <strong> - 1 - - </strong> - of - <strong + 1 + of + <span className="totalPages" > - 1 - </strong> + 5 + </span> + ! </p> <p> - <strong> - 1 - </strong> + 18 Items Total </p> <Link @@ -59,7 +55,7 @@ exports[`<Pagination/> displays loading message 1`] = ` prefetch={true} > <a - aria-disabled={true} + aria-disabled={false} className="next" href="items?page=2" onClick={[Function]} diff --git a/finished-application/frontend/__tests__/__snapshots__/RemoveFromCart.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/RemoveFromCart.test.js.snap index a80b678..db8687b 100644 --- a/finished-application/frontend/__tests__/__snapshots__/RemoveFromCart.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/RemoveFromCart.test.js.snap @@ -2,10 +2,10 @@ exports[`<RemoveFromCart/> renders and matches snapshot 1`] = ` <button - className="sc-bdVaJa fXnNqM" + className="RemoveFromCart__BigButton-emvtd6-0 gPWNSn" disabled={false} onClick={[Function]} - title="Remove From Cart" + title="Delete Item" > × </button> diff --git a/finished-application/frontend/__tests__/__snapshots__/ResetRequest.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/RequestReset.test.js.snap index a6a0375..c0de705 100644 --- a/finished-application/frontend/__tests__/__snapshots__/ResetRequest.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/RequestReset.test.js.snap @@ -1,18 +1,22 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<ResetRequest/> renders and matches snapshot 1`] = ` +exports[`<RequestReset/> renders and matches snapshot 1`] = ` <form - className="sc-bdVaJa LHejR" - data-test="ResetRequest" + className="Form-sc-1xszr8q-0 krRxky" + data-test="form" + method="post" onSubmit={[Function]} > - <DisplayError - error={Object {}} - /> <fieldset aria-busy={false} disabled={false} > + <h2> + Request a password reset + </h2> + <DisplayError + error={Object {}} + /> <label htmlFor="email" > @@ -21,7 +25,7 @@ exports[`<ResetRequest/> renders and matches snapshot 1`] = ` name="email" onChange={[Function]} placeholder="email" - type="text" + type="email" value="" /> </label> diff --git a/finished-application/frontend/__tests__/__snapshots__/Signup.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/Signup.test.js.snap index b3c057e..bb61ff1 100644 --- a/finished-application/frontend/__tests__/__snapshots__/Signup.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/Signup.test.js.snap @@ -2,7 +2,7 @@ exports[`<Signup/> renders and matches snapshot 1`] = ` <form - className="sc-bdVaJa LHejR" + className="Form-sc-1xszr8q-0 krRxky" method="post" onSubmit={[Function]} > @@ -10,12 +10,12 @@ exports[`<Signup/> renders and matches snapshot 1`] = ` aria-busy={false} disabled={false} > + <h2> + Sign Up for An Account + </h2> <DisplayError error={Object {}} /> - <h2> - Sign Up for an Account - </h2> <label htmlFor="email" > @@ -24,7 +24,7 @@ exports[`<Signup/> renders and matches snapshot 1`] = ` name="email" onChange={[Function]} placeholder="email" - type="text" + type="email" value="" /> </label> @@ -41,12 +41,10 @@ exports[`<Signup/> renders and matches snapshot 1`] = ` /> </label> <label - htmlFor="signupPassword" + htmlFor="password" > Password <input - className="password" - id="signupPassword" name="password" onChange={[Function]} placeholder="password" @@ -57,7 +55,7 @@ exports[`<Signup/> renders and matches snapshot 1`] = ` <button type="submit" > - Submit + Sign Up! </button> </fieldset> </form> diff --git a/finished-application/frontend/__tests__/__snapshots__/SingleItem.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/SingleItem.test.js.snap index 28e9174..2f41d4c 100644 --- a/finished-application/frontend/__tests__/__snapshots__/SingleItem.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/SingleItem.test.js.snap @@ -1,31 +1,31 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<SingleItem/> Errors with a not found Item 1`] = ` +exports[`<SingleItem/> Errors with a not found item 1`] = ` <p data-test="graphql-error" > <strong> Shoot! </strong> - Item not found! + Items Not Found! </p> `; -exports[`<SingleItem/> Renders with Proper Data 1`] = ` +exports[`<SingleItem/> renders with proper data 1`] = ` <h2> Viewing dogs are best </h2> `; -exports[`<SingleItem/> Renders with Proper Data 2`] = ` +exports[`<SingleItem/> renders with proper data 2`] = ` <img alt="dogs are best" src="dog.jpg" /> `; -exports[`<SingleItem/> Renders with Proper Data 3`] = ` +exports[`<SingleItem/> renders with proper data 3`] = ` <p> dogs </p> diff --git a/finished-application/frontend/__tests__/__snapshots__/TakeMyMoney.test.js.snap b/finished-application/frontend/__tests__/__snapshots__/TakeMyMoney.test.js.snap index 00863d3..02a112e 100644 --- a/finished-application/frontend/__tests__/__snapshots__/TakeMyMoney.test.js.snap +++ b/finished-application/frontend/__tests__/__snapshots__/TakeMyMoney.test.js.snap @@ -1,19 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`<TakeMyMoney /> renders 1`] = ` +exports[`<TakeMyMoney/> renders and matches snapshot 1`] = ` <ReactStripeCheckout ComponentClass="span" amount={15000} className="StripeCheckout" currency="USD" - description="Order of 3 Items From Sick Fits" + description="Order of 3 items!" email="Delmer.Smith@yahoo.com" image="dog-small.jpg" label="Pay With Card" locale="auto" - name="Sick Fits Haul" + name="Sick Fits" reconfigureOnUpdate={false} - stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" + stripeKey="pk_test_Vtknn6vSdcZWSG2JWvEiWSqC" token={[Function]} triggerEvent="onClick" > diff --git a/finished-application/frontend/__tests__/formatMoney.test.js b/finished-application/frontend/__tests__/formatMoney.test.js index c5c79b6..23d8183 100644 --- a/finished-application/frontend/__tests__/formatMoney.test.js +++ b/finished-application/frontend/__tests__/formatMoney.test.js @@ -1,9 +1,11 @@ import formatMoney from '../lib/formatMoney'; -describe('formatMoney', () => { +describe('formatMoney Function', () => { it('works with fractional dollars', () => { expect(formatMoney(1)).toEqual('$0.01'); expect(formatMoney(10)).toEqual('$0.10'); + expect(formatMoney(9)).toEqual('$0.09'); + expect(formatMoney(40)).toEqual('$0.40'); }); it('leaves cents off for whole dollars', () => { @@ -16,6 +18,6 @@ describe('formatMoney', () => { expect(formatMoney(5012)).toEqual('$50.12'); expect(formatMoney(101)).toEqual('$1.01'); expect(formatMoney(110)).toEqual('$1.10'); - expect(formatMoney(54345345)).toEqual('$543,453.45'); + expect(formatMoney(20893749823749823749)).toEqual('$208,937,498,237,498,240.00'); }); }); diff --git a/finished-application/frontend/__tests__/mocking.test.js b/finished-application/frontend/__tests__/mocking.test.js new file mode 100644 index 0000000..d0a05bf --- /dev/null +++ b/finished-application/frontend/__tests__/mocking.test.js @@ -0,0 +1,36 @@ +function Person(name, foods) { + this.name = name; + this.foods = foods; +} + +Person.prototype.fetchFavFoods = function() { + return new Promise((resolve, reject) => { + // Simulate an API + setTimeout(() => resolve(this.foods), 2000); + }); +}; + +describe('mocking learning', () => { + it('mocks a reg function', () => { + const fetchDogs = jest.fn(); + fetchDogs('snickers'); + expect(fetchDogs).toHaveBeenCalled(); + expect(fetchDogs).toHaveBeenCalledWith('snickers'); + fetchDogs('hugo'); + expect(fetchDogs).toHaveBeenCalledTimes(2); + }); + + it('can create a person', () => { + const me = new Person('Wes', ['pizza', 'burgs']); + expect(me.name).toBe('Wes'); + }); + + it('can fetch foods', async () => { + const me = new Person('Wes', ['pizza', 'burgs']); + // mock the favFoods function + me.fetchFavFoods = jest.fn().mockResolvedValue(['sushi', 'ramen']); + const favFoods = await me.fetchFavFoods(); + console.log(favFoods); + expect(favFoods).toContain('sushi'); + }); +}); diff --git a/finished-application/frontend/__tests__/sample.test.js b/finished-application/frontend/__tests__/sample.test.js new file mode 100644 index 0000000..dbed94f --- /dev/null +++ b/finished-application/frontend/__tests__/sample.test.js @@ -0,0 +1,19 @@ +describe('sample test 101', () => { + it('works as expected', () => { + const age = 100; + expect(1).toEqual(1); + expect(age).toEqual(100); + }); + + it('handles ranges just fine', () => { + const age = 200; + expect(age).toBeGreaterThan(100); + }); + + it('makes a list of dog names', () => { + const dogs = ['snickers', 'hugo']; + expect(dogs).toEqual(dogs); + expect(dogs).toContain('snickers'); + expect(dogs).toContain('snickers'); + }); +}); diff --git a/finished-application/frontend/components/AddToCart.js b/finished-application/frontend/components/AddToCart.js index 03242a4..8a71cc3 100644 --- a/finished-application/frontend/components/AddToCart.js +++ b/finished-application/frontend/components/AddToCart.js @@ -1,68 +1,36 @@ -import { Component } from 'react'; +import React from 'react'; import { Mutation } from 'react-apollo'; -import PropTypes from 'prop-types'; import gql from 'graphql-tag'; -import User, { CURRENT_USER_QUERY } from './User'; +import { CURRENT_USER_QUERY } from './User'; const ADD_TO_CART_MUTATION = gql` mutation addToCart($id: ID!) { addToCart(id: $id) { id quantity - item { - id - price - description - image - title - } } } `; -class AddToCart extends Component { - static propTypes = { - id: PropTypes.string.isRequired, - }; - - update = (cache, payload) => { - const newCartItem = payload.data.addToCart; - const data = cache.readQuery({ query: CURRENT_USER_QUERY }); - - const existingIndex = data.me.cart.findIndex(cartItem => cartItem.id === newCartItem.id); - if (existingIndex >= 0) { - // already in cache, just replace it - data.me.cart = [ - ...data.me.cart.slice(0, existingIndex), - newCartItem, - ...data.me.cart.slice(existingIndex + 1), - ]; - } else { - data.me.cart = [...data.me.cart, newCartItem]; - } - cache.writeQuery({ query: CURRENT_USER_QUERY, data }); - }; - +class AddToCart extends React.Component { render() { const { id } = this.props; return ( - <User> - {({ data: { me }, loading }) => { - if (!me || loading) return null; - return ( - <Mutation mutation={ADD_TO_CART_MUTATION} variables={{ id }} update={this.update}> - {(addToCart, { loading }) => ( - <button disabled={loading} onClick={addToCart}> - 🛒 Add{loading && 'ing'} To Cart - </button> - )} - </Mutation> - ); + <Mutation + mutation={ADD_TO_CART_MUTATION} + variables={{ + id, }} - </User> + refetchQueries={[{ query: CURRENT_USER_QUERY }]} + > + {(addToCart, { loading }) => ( + <button disabled={loading} onClick={addToCart}> + Add{loading && 'ing'} To Cart 🛒 + </button> + )} + </Mutation> ); } } - export default AddToCart; export { ADD_TO_CART_MUTATION }; diff --git a/finished-application/frontend/components/Cart.js b/finished-application/frontend/components/Cart.js index 7e8a9c5..2a72b38 100644 --- a/finished-application/frontend/components/Cart.js +++ b/finished-application/frontend/components/Cart.js @@ -1,17 +1,16 @@ import React from 'react'; -import { Mutation, Query } from 'react-apollo'; -import { adopt } from 'react-adopt'; +import { Query, Mutation } from 'react-apollo'; import gql from 'graphql-tag'; -import TakeMyMoney from './TakeMyMoney'; -import formatMoney from '../lib/formatMoney'; -import CartItem from './CartItem'; -import { CURRENT_USER_QUERY } from './User'; -import calcTotalPrice from '../lib/calcTotalPrice'; -import Error from './ErrorMessage'; +import { adopt } from 'react-adopt'; +import User from './User'; import CartStyles from './styles/CartStyles'; import Supreme from './styles/Supreme'; import CloseButton from './styles/CloseButton'; import SickButton from './styles/SickButton'; +import CartItem from './CartItem'; +import calcTotalPrice from '../lib/calcTotalPrice'; +import formatMoney from '../lib/formatMoney'; +import TakeMyMoney from './TakeMyMoney'; const LOCAL_STATE_QUERY = gql` query { @@ -24,45 +23,38 @@ const TOGGLE_CART_MUTATION = gql` toggleCart @client } `; - +/* eslint-disable */ const Composed = adopt({ - toggleCart: ({ render }) => ( - <Mutation mutation={TOGGLE_CART_MUTATION}> - {(mutate, result) => render({ mutate, result })} - </Mutation> - ), - localState: ({ render }) => <Query query={LOCAL_STATE_QUERY} children={render} />, - currentUser: ({ render }) => ( - <Query children={render} query={CURRENT_USER_QUERY} data-test="cart" /> - ), + user: ({ render }) => <User>{render}</User>, + toggleCart: ({ render }) => <Mutation mutation={TOGGLE_CART_MUTATION}>{render}</Mutation>, + localState: ({ render }) => <Query query={LOCAL_STATE_QUERY}>{render}</Query>, }); +/* eslint-enable */ const Cart = () => ( <Composed> - {({ toggleCart, localState, currentUser }) => { - const { data: { me }, error, loading } = currentUser; - if (loading) return <p>Loading...</p>; - if (error) return <Error error={error} />; + {({ user, toggleCart, localState }) => { + const me = user.data.me; if (!me) return null; return ( <CartStyles open={localState.data.cartOpen}> <header> - <CloseButton title="close" onClick={toggleCart.mutate}> + <CloseButton onClick={toggleCart} title="close"> × </CloseButton> - - <Supreme>{me.name}'s Cart.</Supreme> + <Supreme>{me.name}'s Cart</Supreme> <p> - You have {me.cart.length} item{me.cart.length === 1 ? '' : 's'} in your cart. + You Have {me.cart.length} Item{me.cart.length === 1 ? '' : 's'} in your cart. </p> </header> - <ul>{me.cart.map(cartItem => <CartItem key={cartItem.id} cartItem={cartItem} />)}</ul> <footer> <p>{formatMoney(calcTotalPrice(me.cart))}</p> - <TakeMyMoney> - <SickButton>Checkout</SickButton> - </TakeMyMoney> + {me.cart.length && ( + <TakeMyMoney> + <SickButton>Checkout</SickButton> + </TakeMyMoney> + )} </footer> </CartStyles> ); diff --git a/finished-application/frontend/components/CartCount.js b/finished-application/frontend/components/CartCount.js index ae51f20..c202d74 100644 --- a/finished-application/frontend/components/CartCount.js +++ b/finished-application/frontend/components/CartCount.js @@ -1,19 +1,7 @@ -import styled from 'styled-components'; -import { TransitionGroup, CSSTransition } from 'react-transition-group'; +import React from 'react'; import PropTypes from 'prop-types'; - -const Dot = styled.div` - background: ${props => props.theme.red}; - color: white; - border-radius: 50%; - padding: 0.5rem; - line-height: 2rem; - min-width: 3rem; - margin-left: 1rem; - font-weight: 100; - font-feature-settings: 'tnum'; - font-variant-numeric: tabular-nums; -`; +import { TransitionGroup, CSSTransition } from 'react-transition-group'; +import styled from 'styled-components'; const AnimationStyles = styled.span` position: relative; @@ -23,25 +11,36 @@ const AnimationStyles = styled.span` transition: all 0.4s; backface-visibility: hidden; } + /* Intial State of the entered Dot */ .count-enter { - transform: rotateX(0.5turn); + transform: scale(4) rotateX(0.5turn); } - .count-enter-active { transform: rotateX(0); } - .count-exit { top: 0; position: absolute; transform: rotateX(0); } - .count-exit-active { - transform: rotateX(0.5turn); + transform: scale(4) rotateX(0.5turn); } `; +const Dot = styled.div` + background: ${props => props.theme.red}; + color: white; + border-radius: 50%; + padding: 0.5rem; + line-height: 2rem; + min-width: 3rem; + margin-left: 1rem; + font-weight: 100; + font-feature-settings: 'tnum'; + font-variant-numeric: tabular-nums; +`; + const CartCount = ({ count }) => ( <AnimationStyles> <TransitionGroup> @@ -58,7 +57,4 @@ const CartCount = ({ count }) => ( </AnimationStyles> ); -CartCount.propTypes = { - count: PropTypes.number.isRequired, -}; export default CartCount; diff --git a/finished-application/frontend/components/CartItem.js b/finished-application/frontend/components/CartItem.js index 6c6d575..b0ce62e 100644 --- a/finished-application/frontend/components/CartItem.js +++ b/finished-application/frontend/components/CartItem.js @@ -1,3 +1,4 @@ +import React from 'react'; import styled from 'styled-components'; import PropTypes from 'prop-types'; import formatMoney from '../lib/formatMoney'; @@ -12,30 +13,29 @@ const CartItemStyles = styled.li` img { margin-right: 10px; } - h3 { - margin: 0; - } + h3, p { margin: 0; } `; const CartItem = ({ cartItem }) => { + // first check if that item exists if (!cartItem.item) return ( - <CartItemStyles key={cartItem.id}> - <p>Ack! That Item is gone!</p> + <CartItemStyles> + <p>This Item has been removed</p> <RemoveFromCart id={cartItem.id} /> </CartItemStyles> ); return ( - <CartItemStyles key={cartItem.id}> + <CartItemStyles> <img width="100" src={cartItem.item.image} alt={cartItem.item.title} /> <div className="cart-item-details"> <h3>{cartItem.item.title}</h3> <p> - {formatMoney(cartItem.quantity * cartItem.item.price)} - {' — '} + {formatMoney(cartItem.item.price * cartItem.quantity)} + {' - '} <em> {cartItem.quantity} × {formatMoney(cartItem.item.price)} each </em> diff --git a/finished-application/frontend/components/CreateItem.js b/finished-application/frontend/components/CreateItem.js index 503b3cb..c115eac 100644 --- a/finished-application/frontend/components/CreateItem.js +++ b/finished-application/frontend/components/CreateItem.js @@ -1,25 +1,22 @@ import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; -import Router from 'next/router'; -import wait from 'waait'; import gql from 'graphql-tag'; -import Error from './ErrorMessage'; +import Router from 'next/router'; import Form from './styles/Form'; import formatMoney from '../lib/formatMoney'; -import { ALL_ITEMS_QUERY } from './Items'; -import { PAGINATION_QUERY } from './Pagination'; +import Error from './ErrorMessage'; const CREATE_ITEM_MUTATION = gql` mutation CREATE_ITEM_MUTATION( - $description: String! $title: String! + $description: String! $price: Int! $image: String $largeImage: String ) { createItem( - description: $description title: $title + description: $description price: $price image: $image largeImage: $largeImage @@ -37,22 +34,19 @@ class CreateItem extends Component { largeImage: '', price: 0, }; - handleChange = e => { - const { name, value, type } = e.target; + const { name, type, value } = e.target; const val = type === 'number' ? parseFloat(value) : value; this.setState({ [name]: val }); }; uploadFile = async e => { - this.setState({ loading: true }); - const files = e.currentTarget.files; + const files = e.target.files; const data = new FormData(); data.append('file', files[0]); data.append('upload_preset', 'sickfits'); - // use the file endpoint - const res = await fetch('https://api.cloudinary.com/v1_1/wesbos/image/upload', { + const res = await fetch('https://api.cloudinary.com/v1_1/wesbostutorial/image/upload', { method: 'POST', body: data, }); @@ -60,82 +54,82 @@ class CreateItem extends Component { this.setState({ image: file.secure_url, largeImage: file.eager[0].secure_url, - loading: false, }); }; - render() { return ( - <Mutation - mutation={CREATE_ITEM_MUTATION} - variables={this.state} - refetchQueries={[{ query: ALL_ITEMS_QUERY }, { query: PAGINATION_QUERY }]} - > + <Mutation mutation={CREATE_ITEM_MUTATION} variables={this.state}> {(createItem, { loading, error }) => ( <Form - data-test + data-test="form" onSubmit={async e => { + // Stop the form from submitting e.preventDefault(); - const { data: { createItem: item } } = await createItem(); - // we wait 0 ms so it puts the router push at the end of the call stack. This ensures that refetchQueries runs before we unmount the component :) - await wait(); + // call the mutation + const res = await createItem(); + // change them to the single item page + console.log(res); Router.push({ - pathname: `/item`, - query: { id: item.id }, + pathname: '/item', + query: { id: res.data.createItem.id }, }); }} > - <h2>Sell an Item.</h2> <Error error={error} /> <fieldset disabled={loading} aria-busy={loading}> <label htmlFor="file"> Image <input - required + type="file" id="file" + name="file" + placeholder="Upload an image" + required onChange={this.uploadFile} - type="file" - accept=".png, .jpg, .jpeg" /> - {this.state.image ? ( - <img src={this.state.image} width="100" alt={this.state.title} /> - ) : null} + {this.state.image && ( + <img width="200" src={this.state.image} alt="Upload Preview" /> + )} </label> + <label htmlFor="title"> Title <input - required - value={this.state.title} - onChange={this.handleChange} type="text" - name="title" id="title" + name="title" placeholder="Title" + required + value={this.state.title} + onChange={this.handleChange} /> </label> + <label htmlFor="price"> - Price {this.state.price && formatMoney(this.state.price)} + Price <input - required type="number" id="price" name="price" - min="0" + placeholder="Price" + required value={this.state.price} onChange={this.handleChange} /> </label> - <textarea - id="description" - required - name="description" - value={this.state.description} - onChange={this.handleChange} - placeholder="The desc for this item" - /> - <button disabled={this.state.loading} type="submit"> - Submit - </button> + + <label htmlFor="description"> + Description + <textarea + id="description" + name="description" + placeholder="Enter A Description" + required + value={this.state.description} + onChange={this.handleChange} + /> + </label> + <button type="submit">Submit</button> </fieldset> </Form> )} diff --git a/finished-application/frontend/components/DeleteItem.js b/finished-application/frontend/components/DeleteItem.js index 4d68d5e..e5e4752 100644 --- a/finished-application/frontend/components/DeleteItem.js +++ b/finished-application/frontend/components/DeleteItem.js @@ -1,65 +1,45 @@ -import React from 'react'; +import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; -import PropTypes, { number } from 'prop-types'; import gql from 'graphql-tag'; -import { withRouter } from 'next/router'; import { ALL_ITEMS_QUERY } from './Items'; -import { PAGINATION_QUERY } from './Pagination'; -import { perPage } from '../config'; const DELETE_ITEM_MUTATION = gql` - mutation deleteItem($id: ID!) { + mutation DELETE_ITEM_MUTATION($id: ID!) { deleteItem(id: $id) { id - title - description } } `; -class DeleteItem extends React.Component { - static propTypes = { - id: PropTypes.string.isRequired, - }; - +class DeleteItem extends Component { update = (cache, payload) => { - const deletedItem = payload.data.deleteItem; - let { page = 1 } = this.props.router.query; - page = parseFloat(page); - const skip = page * perPage - perPage; - const variables = { skip }; - const data = cache.readQuery({ query: ALL_ITEMS_QUERY, variables }); - // filter this one out - data.items = data.items.filter(item => item.id !== deletedItem.id); - // write the data back to the cache - console.log(data.items); - cache.writeQuery({ query: ALL_ITEMS_QUERY, data, variables }); - // FYI Pagination is broken with Apollo currently - will make a followup video + // manually update the cache on the client, so it matches the server + // 1. Read the cache for the items we want + const data = cache.readQuery({ query: ALL_ITEMS_QUERY }); + console.log(data, payload); + // 2. Filter the deleted itemout of the page + data.items = data.items.filter(item => item.id !== payload.data.deleteItem.id); + // 3. Put the items back! + cache.writeQuery({ query: ALL_ITEMS_QUERY, data }); }; - render() { return ( <Mutation mutation={DELETE_ITEM_MUTATION} variables={{ id: this.props.id }} - refetchQueries={[ - { - query: ALL_ITEMS_QUERY, - variables: { skip: (this.props.router.query.page || 1) * perPage - perPage }, - }, - { query: PAGINATION_QUERY }, - ]} update={this.update} > - {(removeItem, { error }) => ( + {(deleteItem, { error }) => ( <button onClick={() => { if (confirm('Are you sure you want to delete this item?')) { - removeItem(); + deleteItem().catch(err => { + alert(err.message); + }); } }} > - {error ? error.message : '× Delete Item'} + {this.props.children} </button> )} </Mutation> @@ -67,5 +47,4 @@ class DeleteItem extends React.Component { } } -export default withRouter(DeleteItem); -export { DELETE_ITEM_MUTATION }; +export default DeleteItem; diff --git a/finished-application/frontend/components/Dump.js b/finished-application/frontend/components/Dump.js deleted file mode 100644 index f281281..0000000 --- a/finished-application/frontend/components/Dump.js +++ /dev/null @@ -1,19 +0,0 @@ -const Dump = props => ( - <div - style={{ - fontSize: 20, - border: '1px solid #efefef', - padding: 10, - background: 'white', - }} - > - {Object.keys(props).map(prop => ( - <pre key={prop}> - <strong style={{ color: 'white', background: 'red' }}>{prop} 💩</strong> - {JSON.stringify(props[prop], '', ' ')} - </pre> - ))} - </div> -); - -export default Dump; diff --git a/finished-application/frontend/components/EditUser.js b/finished-application/frontend/components/EditUser.js deleted file mode 100644 index 1bb8e5b..0000000 --- a/finished-application/frontend/components/EditUser.js +++ /dev/null @@ -1,81 +0,0 @@ -import React from 'react'; -import { Query, Mutation } from 'react-apollo'; -import gql from 'graphql-tag'; -import Form from './styles/Form'; -import { CURRENT_USER_QUERY } from './User'; -import Error from './ErrorMessage'; -import User from './User'; - -const UPDATE_USER_MUTATION = gql` - mutation updateUser($name: String!) { - updateUser(name: $name) { - name - } - } -`; - -class EditUser extends React.Component { - state = { - changes: {}, - }; - - handleChange = e => { - const { name, value } = e.target; - const changes = { - ...this.state.changes, - [name]: value, - }; - this.setState({ changes }); - }; - - handleSubmit = async (e, updateUser) => { - e.preventDefault(); - // only submit if there are real changes - if (Object.keys(this.state.changes).length === 0) return; - await updateUser(); - this.setState({ changes: {} }); - }; - - render() { - return ( - <User> - {({ data: { me }, loading }) => { - if (loading) return <p>Loading...</p>; - return ( - <Mutation - mutation={UPDATE_USER_MUTATION} - refetchQueries={[{ query: CURRENT_USER_QUERY }]} - variables={this.state.changes} - > - {(updateUser, { error, called }) => ( - <Form onSubmit={e => this.handleSubmit(e, updateUser)}> - <Error error={error} /> - <fieldset disabled={loading} aria-busy={loading}> - {called && !error && <p data-test="updated">Updated!</p>} - <label htmlFor="name"> - Name: - <input - type="text" - name="name" - defaultValue={me.name} - onChange={this.handleChange} - /> - </label> - <button type="submit">Update</button> - <strong>me:</strong> - <pre>{JSON.stringify(me.name)}</pre> - <strong>Change:</strong> - <pre data-test="change">{JSON.stringify(this.state.changes)}</pre> - </fieldset> - </Form> - )} - </Mutation> - ); - }} - </User> - ); - } -} - -export default EditUser; -export { UPDATE_USER_MUTATION }; diff --git a/finished-application/frontend/components/Header.js b/finished-application/frontend/components/Header.js index bb05c34..797eb8e 100644 --- a/finished-application/frontend/components/Header.js +++ b/finished-application/frontend/components/Header.js @@ -1,36 +1,21 @@ -import React from 'react'; +import Link from 'next/link'; +import styled from 'styled-components'; import NProgress from 'nprogress'; import Router from 'next/router'; -import styled from 'styled-components'; -import Link from 'next/link'; +import Nav from './Nav'; import Cart from './Cart'; import Search from './Search'; -import Nav from './Nav'; Router.onRouteChangeStart = () => { NProgress.start(); }; -Router.onRouteChangeComplete = () => NProgress.done(); -Router.onRouteChangeError = () => NProgress.done(); +Router.onRouteChangeComplete = () => { + NProgress.done(); +}; -const StyledHeader = styled.header` - .bar { - border-bottom: 10px solid ${props => props.theme.black}; - display: grid; - grid-template-columns: auto 1fr; - justify-content: space-between; - align-items: stretch; - @media (max-width: 1300px) { - grid-template-columns: 1fr; - justify-content: center; - } - } - .sub-bar { - display: grid; - grid-template-columns: 1fr auto; - border-bottom: 1px solid ${props => props.theme.lightgrey}; - } -`; +Router.onRouteChangeError = () => { + NProgress.done(); +}; const Logo = styled.h1` font-size: 4rem; @@ -42,8 +27,8 @@ const Logo = styled.h1` padding: 0.5rem 1rem; background: ${props => props.theme.red}; color: white; - letter-spacing: -2px; text-transform: uppercase; + text-decoration: none; } @media (max-width: 1300px) { margin: 0; @@ -51,12 +36,31 @@ const Logo = styled.h1` } `; +const StyledHeader = styled.header` + .bar { + border-bottom: 10px solid ${props => props.theme.black}; + display: grid; + grid-template-columns: auto 1fr; + justify-content: space-between; + align-items: stretch; + @media (max-width: 1300px) { + grid-template-columns: 1fr; + justify-content: center; + } + } + .sub-bar { + display: grid; + grid-template-columns: 1fr auto; + border-bottom: 1px solid ${props => props.theme.lightgrey}; + } +`; + const Header = () => ( <StyledHeader> <div className="bar"> <Logo> <Link href="/"> - <a>Sick Fits!</a> + <a>Sick Fits</a> </Link> </Logo> <Nav /> diff --git a/finished-application/frontend/components/Item.js b/finished-application/frontend/components/Item.js index d6b339e..2741dcf 100644 --- a/finished-application/frontend/components/Item.js +++ b/finished-application/frontend/components/Item.js @@ -1,23 +1,24 @@ -import React from 'react'; +import React, { Component } from 'react'; import PropTypes from 'prop-types'; import Link from 'next/link'; import Title from './styles/Title'; -import AddToCart from './AddToCart'; -import DeleteItem from './DeleteItem'; -import formatMoney from '../lib/formatMoney'; import ItemStyles from './styles/ItemStyles'; import PriceTag from './styles/PriceTag'; +import formatMoney from '../lib/formatMoney'; +import DeleteItem from './DeleteItem'; +import AddToCart from './AddToCart'; -class Item extends React.Component { +export default class Item extends Component { static propTypes = { item: PropTypes.object.isRequired, }; render() { - const item = this.props.item; + const { item } = this.props; return ( - <ItemStyles key={item.id}> + <ItemStyles> {item.image && <img src={item.image} alt={item.title} />} + <Title> <Link href={{ @@ -28,26 +29,22 @@ class Item extends React.Component { <a>{item.title}</a> </Link> </Title> - <PriceTag>{formatMoney(item.price)}</PriceTag> - <p>{item.description}</p> <div className="buttonList"> <Link href={{ - pathname: '/update', + pathname: 'update', query: { id: item.id }, }} > <a>Edit ✏️</a> </Link> <AddToCart id={item.id} /> - <DeleteItem id={item.id} /> + <DeleteItem id={item.id}>Delete This Item</DeleteItem> </div> </ItemStyles> ); } } - -export default Item; diff --git a/finished-application/frontend/components/Items.js b/finished-application/frontend/components/Items.js index 5694d0b..9b5426c 100644 --- a/finished-application/frontend/components/Items.js +++ b/finished-application/frontend/components/Items.js @@ -1,17 +1,14 @@ -import React from 'react'; +import React, { Component } from 'react'; import { Query } from 'react-apollo'; -import styled from 'styled-components'; -import PropTypes from 'prop-types'; import gql from 'graphql-tag'; -import Pagination from './Pagination'; +import styled from 'styled-components'; import Item from './Item'; -import LoadingItem from './LoadingItem'; +import Pagination from './Pagination'; import { perPage } from '../config'; const ALL_ITEMS_QUERY = gql` query ALL_ITEMS_QUERY($skip: Int = 0, $first: Int = ${perPage}) { - items(orderBy: createdAt_DESC, first: $first, skip: $skip) { - __typename + items(first: $first, skip: $skip, orderBy: createdAt_DESC) { id title price @@ -22,7 +19,11 @@ const ALL_ITEMS_QUERY = gql` } `; -const Items = styled.div` +const Center = styled.div` + text-align: center; +`; + +const ItemsList = styled.div` display: grid; grid-template-columns: 1fr 1fr; grid-gap: 60px; @@ -30,38 +31,24 @@ const Items = styled.div` margin: 0 auto; `; -const Center = styled.div` - text-align: center; -`; - -class ItemList extends React.Component { - static propTypes = { - page: PropTypes.number.isRequired, - }; +class Items extends Component { render() { return ( - <Center key={this.props.page}> + <Center> <Pagination page={this.props.page} /> <Query query={ALL_ITEMS_QUERY} + // fetchPolicy="network-only" variables={{ skip: this.props.page * perPage - perPage, - first: perPage, }} - // fetchPolicy="network-only" > {({ data, error, loading }) => { - if (loading) { - return ( - <Items> - {Array.from({ length: 4 }) - .map((x, id) => ({ id })) - .map(x => <LoadingItem key={x.id} />)} - </Items> - ); - } - if (error) return <div>Error</div>; - return <Items>{data.items.map(item => <Item key={item.id} item={item} />)}</Items>; + if (loading) return <p>Loading...</p>; + if (error) return <p>Error: {error.message}</p>; + return ( + <ItemsList>{data.items.map(item => <Item item={item} key={item.id} />)}</ItemsList> + ); }} </Query> <Pagination page={this.props.page} /> @@ -70,5 +57,5 @@ class ItemList extends React.Component { } } -export default ItemList; +export default Items; export { ALL_ITEMS_QUERY }; diff --git a/finished-application/frontend/components/LoadingItem.js b/finished-application/frontend/components/LoadingItem.js deleted file mode 100644 index 5736337..0000000 --- a/finished-application/frontend/components/LoadingItem.js +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import Title from './styles/Title'; -import ItemStyles from './styles/ItemStyles'; - -class LoadingItem extends React.Component { - render() { - return ( - <ItemStyles> - <img - src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" - alt="Loading..." - />> - <Title> - <a>Loading...</a> - </Title> - <p>Please Wait</p> - </ItemStyles> - ); - } -} - -export default LoadingItem; diff --git a/finished-application/frontend/components/Meta.js b/finished-application/frontend/components/Meta.js index fe9c29f..2b98f92 100644 --- a/finished-application/frontend/components/Meta.js +++ b/finished-application/frontend/components/Meta.js @@ -1,16 +1,13 @@ -import React from 'react'; import Head from 'next/head'; const Meta = () => ( - <div> - <Head> - <meta name="viewport" content="width=device-width, initial-scale=1" /> - <meta charSet="utf-8" /> - <link rel="shortcut icon" href="/static/favicon.png" /> - <link rel="stylesheet" type="text/css" href="/static/nprogress.css" /> - <title>Sick Fits!</title> - </Head> - </div> + <Head> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta charSet="utf-8" /> + <link rel="shortcut icon" href="/static/favicon.png" /> + <link rel="stylesheet" type="text/css" href="/static/nprogress.css" /> + <title>Sick Fits!</title> + </Head> ); export default Meta; diff --git a/finished-application/frontend/components/Nav.js b/finished-application/frontend/components/Nav.js index b483376..118db5a 100644 --- a/finished-application/frontend/components/Nav.js +++ b/finished-application/frontend/components/Nav.js @@ -1,59 +1,49 @@ -import React, { Fragment } from 'react'; import Link from 'next/link'; -import { Query, Mutation } from 'react-apollo'; +import { Mutation } from 'react-apollo'; import { TOGGLE_CART_MUTATION } from './Cart'; +import NavStyles from './styles/NavStyles'; import User from './User'; import CartCount from './CartCount'; import Signout from './Signout'; -import NavStyles from './styles/NavStyles'; -class Nav extends React.Component { - render() { - // below we set the fetchPolicy to network only so it forces re-fetch on the server - return ( - <User> - {({ data: { me }, error }) => ( - <NavStyles data-test="nav"> - <Link href="/items"> - <a>Shop</a> - </Link> +const Nav = () => ( + <User> + {({ data: { me } }) => ( + <NavStyles data-test="nav"> + <Link href="/items"> + <a>Shop</a> + </Link> + {me && ( + <> <Link href="/sell"> <a>Sell</a> </Link> + <Link href="/orders"> + <a>Orders</a> + </Link> + <Link href="/me"> + <a>Account</a> + </Link> + <Signout /> + <Mutation mutation={TOGGLE_CART_MUTATION}> + {(toggleCart) => ( + <button onClick={toggleCart}> + My Cart + <CartCount count={me.cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0)}></CartCount> + </button> + )} + </Mutation> + </> + )} + {!me && ( + <Link href="/signup"> + <a>Sign In</a> + </Link> - {!me && ( - <Link href="/signup"> - <a>Sign In</a> - </Link> - )} - - {me && ( - <Fragment> - <Link href="/orders"> - <a>Orders</a> - </Link> - <Link href="/me"> - <a>My Account</a> - </Link> - <Signout /> - <Mutation mutation={TOGGLE_CART_MUTATION}> - {toggleCart => ( - <button onClick={toggleCart}> - My Cart - <CartCount - className="cart-count" - count={me.cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0)} - /> - </button> - )} - </Mutation> - </Fragment> - )} - </NavStyles> )} - </User> - ); - } -} + </NavStyles> + )} + </User> +); export default Nav; diff --git a/finished-application/frontend/components/Order.js b/finished-application/frontend/components/Order.js index b4a0a0e..5177c0a 100644 --- a/finished-application/frontend/components/Order.js +++ b/finished-application/frontend/components/Order.js @@ -1,8 +1,8 @@ -import { Component } from 'react'; +import React from 'react'; +import PropTypes from 'prop-types'; import { Query } from 'react-apollo'; import { format } from 'date-fns'; import Head from 'next/head'; -import PropTypes from 'prop-types'; import gql from 'graphql-tag'; import formatMoney from '../lib/formatMoney'; import Error from './ErrorMessage'; @@ -21,8 +21,8 @@ const SINGLE_ORDER_QUERY = gql` items { id title - price description + price image quantity } @@ -30,21 +30,16 @@ const SINGLE_ORDER_QUERY = gql` } `; -class Order extends Component { +class Order extends React.Component { static propTypes = { id: PropTypes.string.isRequired, }; - render() { return ( - <Query - query={SINGLE_ORDER_QUERY} - variables={{ id: this.props.id }} - fetchPolicy="network-only" - > - {({ data, error, loading, refetch }) => { + <Query query={SINGLE_ORDER_QUERY} variables={{ id: this.props.id }}> + {({ data, error, loading }) => { + if (error) return <Error error={error} />; if (loading) return <p>Loading...</p>; - if (error) return <Error error={error} refetch={refetch} />; const order = data.order; return ( <OrderStyles data-test="order"> @@ -52,8 +47,8 @@ class Order extends Component { <title>Sick Fits - Order {order.id}</title> </Head> <p> - <span>Order Id:</span> - <span>{order.id}</span> + <span>Order ID:</span> + <span>{this.props.id}</span> </p> <p> <span>Charge</span> @@ -61,7 +56,7 @@ class Order extends Component { </p> <p> <span>Date</span> - <span>{format(order.createdAt, 'MMMM D, YYYY h:mm A')}</span> + <span>{format(order.createdAt, 'MMMM d, YYYY h:mm a')}</span> </p> <p> <span>Order Total</span> @@ -76,11 +71,10 @@ class Order extends Component { <div className="order-item" key={item.id}> <img src={item.image} alt={item.title} /> <div className="item-details"> - <h2> {item.title} </h2> + <h2>{item.title}</h2> <p>Qty: {item.quantity}</p> <p>Each: {formatMoney(item.price)}</p> - <p>Subtotal: {formatMoney(item.price * item.quantity)}</p> - <p>SubTotal: {item.description}</p> + <p>SubTotal: {formatMoney(item.price * item.quantity)}</p> <p>{item.description}</p> </div> </div> diff --git a/finished-application/frontend/components/OrderList.js b/finished-application/frontend/components/OrderList.js index 5886ad7..e2e22ff 100644 --- a/finished-application/frontend/components/OrderList.js +++ b/finished-application/frontend/components/OrderList.js @@ -4,16 +4,16 @@ import { formatDistance } from 'date-fns'; import Link from 'next/link'; import styled from 'styled-components'; import gql from 'graphql-tag'; +import Error from './ErrorMessage'; import formatMoney from '../lib/formatMoney'; import OrderItemStyles from './styles/OrderItemStyles'; const USER_ORDERS_QUERY = gql` - query orders { + query USER_ORDERS_QUERY { orders(orderBy: createdAt_DESC) { id total createdAt - updatedAt items { id title @@ -26,7 +26,7 @@ const USER_ORDERS_QUERY = gql` } `; -const OrderUl = styled.ul` +const orderUl = styled.ul` display: grid; grid-gap: 4rem; grid-template-columns: repeat(auto-fit, minmax(40%, 1fr)); @@ -37,13 +37,13 @@ class OrderList extends React.Component { return ( <Query query={USER_ORDERS_QUERY}> {({ data: { orders }, loading, error }) => { - if (loading) return <p>Loading...</p>; - if (error) return <p>Error...</p>; - if (!orders || !orders.length) return <p>No Orders Yet!</p>; + if (loading) return <p>loading...</p>; + if (error) return <Error erorr={error} />; + console.log(orders); return ( <div> - <h2>You have {orders.length} Orders</h2> - <OrderUl> + <h2>You have {orders.length} orders</h2> + <orderUl> {orders.map(order => ( <OrderItemStyles key={order.id}> <Link @@ -54,22 +54,10 @@ class OrderList extends React.Component { > <a> <div className="order-meta"> - <p> - <strong>{order.items.reduce((a, b) => a + b.quantity, 0)}</strong> - Items - </p> - <p> - <strong>{order.items.length}</strong> - Products - </p> - <p> - <strong>{formatDistance(order.createdAt, new Date())}</strong> - ago - </p> - <p> - <strong>{formatMoney(order.total)}</strong> - Total - </p> + <p>{order.items.reduce((a, b) => a + b.quantity, 0)} Items</p> + <p>{order.items.length} Products</p> + <p>{formatDistance(order.createdAt, new Date())}</p> + <p>{formatMoney(order.total)}</p> </div> <div className="images"> {order.items.map(item => ( @@ -80,7 +68,7 @@ class OrderList extends React.Component { </Link> </OrderItemStyles> ))} - </OrderUl> + </orderUl> </div> ); }} @@ -90,4 +78,3 @@ class OrderList extends React.Component { } export default OrderList; -export { USER_ORDERS_QUERY }; diff --git a/finished-application/frontend/components/Page.js b/finished-application/frontend/components/Page.js index c3e04ac..75ab84a 100644 --- a/finished-application/frontend/components/Page.js +++ b/finished-application/frontend/components/Page.js @@ -1,8 +1,7 @@ -import React from 'react'; +import React, { Component } from 'react'; import styled, { ThemeProvider, injectGlobal } from 'styled-components'; -import PropTypes from 'prop-types'; -import Header from './Header'; -import Meta from './Meta'; +import Header from '../components/Header'; +import Meta from '../components/Meta'; const theme = { red: '#FF0000', @@ -10,47 +9,49 @@ const theme = { grey: '#3A3A3A', lightgrey: '#E1E1E1', offWhite: '#EDEDED', - maxWidth: '1300px', + maxWidth: '1000px', bs: '0 12px 24px 0 rgba(0, 0, 0, 0.09)', }; +const StyledPage = styled.div` + background: white; + color: ${props => props.theme.black}; +`; + +const Inner = styled.div` + max-width: ${props => props.theme.maxWidth}; + margin: 0 auto; + padding: 2rem; +`; + injectGlobal` - html { - box-sizing: border-box; - font-size: 10px; + @font-face { + font-family: 'radnika_next'; + src: url('/static/radnikanext-medium-webfont.woff2') format('woff2'); + font-weight: normal; + font-style: normal; } - body { - font-family: 'radnika next', sans-serif; - padding: 0; - background-color: #ffffff; - margin: 0; - font-size: 1.5rem; - line-height: 2; + html { + box-sizing: border-box; + font-size: 10px; } *, *:before, *:after { box-sizing: inherit; } + body { + padding: 0; + margin: 0; + font-size: 1.5rem; + line-height: 2; + font-family: 'radnika_next'; + } a { - color: ${theme.black}; text-decoration: none; + color: ${theme.black}; } `; -const Inner = styled.div` - max-width: 1000px; - margin: 0 auto; - padding: 2rem; -`; - -const StyledPage = styled.div` - color: ${props => props.theme.black}; - background: white; -`; - -class Page extends React.Component { - static propTypes = { - children: PropTypes.node.isRequired, - }; +class Page extends Component { render() { return ( <ThemeProvider theme={theme}> diff --git a/finished-application/frontend/components/Pagination.js b/finished-application/frontend/components/Pagination.js index f684840..b84af76 100644 --- a/finished-application/frontend/components/Pagination.js +++ b/finished-application/frontend/components/Pagination.js @@ -1,18 +1,14 @@ import React from 'react'; -import { Query } from 'react-apollo'; -import styled from 'styled-components'; -import Link from 'next/link'; -import PropTypes from 'prop-types'; import gql from 'graphql-tag'; +import { Query } from 'react-apollo'; import Head from 'next/head'; -import { perPage } from '../config'; +import Link from 'next/link'; import PaginationStyles from './styles/PaginationStyles'; - - +import { perPage } from '../config'; const PAGINATION_QUERY = gql` - query itemsConnection($skip: Int = 0, $first: Int = 4) { - itemsConnection(orderBy: createdAt_DESC, first: $first, skip: $skip) { + query PAGINATION_QUERY { + itemsConnection { aggregate { count } @@ -23,10 +19,10 @@ const PAGINATION_QUERY = gql` const Pagination = props => ( <Query query={PAGINATION_QUERY}> {({ data, loading, error }) => { - if (loading || error) return null; - const { aggregate } = data.itemsConnection; - const { page } = props; - const pages = Math.ceil(aggregate.count / perPage); + if (loading) return <p>Loading...</p>; + const count = data.itemsConnection.aggregate.count; + const pages = Math.ceil(count / perPage); + const page = props.page; return ( <PaginationStyles data-test="pagination"> <Head> @@ -42,15 +38,14 @@ const Pagination = props => ( }} > <a className="prev" aria-disabled={page <= 1}> - ←Prev + ← Prev </a> </Link> <p> - Page <strong>{page} </strong> of <strong className="totalPages">{pages}</strong> - </p> - <p> - <strong>{aggregate.count}</strong> Items Total + Page {props.page} of + <span className="totalPages">{pages}</span>! </p> + <p>{count} Items Total</p> <Link prefetch href={{ @@ -68,9 +63,5 @@ const Pagination = props => ( </Query> ); -Pagination.propTypes = { - page: PropTypes.number.isRequired, -}; - export default Pagination; export { PAGINATION_QUERY }; diff --git a/finished-application/frontend/components/Permissions.js b/finished-application/frontend/components/Permissions.js index 52a6acf..4b08c39 100644 --- a/finished-application/frontend/components/Permissions.js +++ b/finished-application/frontend/components/Permissions.js @@ -1,57 +1,84 @@ -import React from 'react'; import { Query, Mutation } from 'react-apollo'; -import PropTypes from 'prop-types'; -import gql from 'graphql-tag'; import Error from './ErrorMessage'; -import SickButton from './styles/SickButton'; +import gql from 'graphql-tag'; import Table from './styles/Table'; +import SickButton from './styles/SickButton'; +import PropTypes from 'prop-types'; -const ALL_USERS_QUERY = gql` - query { - users { +const possiblePermissions = [ + 'ADMIN', + 'USER', + 'ITEMCREATE', + 'ITEMUPDATE', + 'ITEMDELETE', + 'PERMISSIONUPDATE', +]; + +const UPDATE_PERMISSIONS_MUTATION = gql` + mutation updatePermissions($permissions: [Permission], $userId: ID!) { + updatePermissions(permissions: $permissions, userId: $userId) { id + permissions name email - permissions } } `; -const UPDATE_PERMISSIONS_MUTATION = gql` - mutation updatePermissions($permissions: [Permission], $userId: ID!) { - updatePermissions(permissions: $permissions, userId: $userId) { +const ALL_USERS_QUERY = gql` + query { + users { id - permissions name email + permissions } } `; -const possiblePermissions = [ - 'ADMIN', - 'USER', - 'ITEMCREATE', - 'ITEMUPDATE', - 'ITEMDELETE', - 'PERMISSIONUPDATE', -]; +const Permissions = props => ( + <Query query={ALL_USERS_QUERY}> + {({ data, loading, error }) => ( + <div> + <Error error={error} /> + <div> + <h2>Manage Permissions</h2> + <Table> + <thead> + <tr> + <th>Name</th> + <th>Email</th> + {possiblePermissions.map(permission => <th key={permission}>{permission}</th>)} + <th>👇🏻</th> + </tr> + </thead> + <tbody>{data.users.map(user => <UserPermissions user={user} key={user.id} />)}</tbody> + </Table> + </div> + </div> + )} + </Query> +); -class User extends React.Component { +class UserPermissions extends React.Component { static propTypes = { user: PropTypes.shape({ - permissions: PropTypes.array.isRequired, - id: PropTypes.string.isRequired, + name: PropTypes.string, + email: PropTypes.string, + id: PropTypes.string, + permissions: PropTypes.array, }).isRequired, }; state = { permissions: this.props.user.permissions, }; - handlePermissionsChange = e => { + handlePermissionChange = (e) => { const checkbox = e.target; + // take a copy of the current permissions let updatedPermissions = [...this.state.permissions]; + // figure out if we need to remove or add this permission if (checkbox.checked) { - // add it in + // add it in! updatedPermissions.push(checkbox.value); } else { updatedPermissions = updatedPermissions.filter(permission => permission !== checkbox.value); @@ -59,75 +86,46 @@ class User extends React.Component { this.setState({ permissions: updatedPermissions }); }; render() { - const { user } = this.props; + const user = this.props.user; return ( - <Mutation mutation={UPDATE_PERMISSIONS_MUTATION}> + <Mutation + mutation={UPDATE_PERMISSIONS_MUTATION} + variables={{ + permissions: this.state.permissions, + userId: this.props.user.id, + }} + > {(updatePermissions, { loading, error }) => ( - <tr key={user.id} className="user"> - <Error error={error} /> - <td>{user.name}</td> - <td>{user.email}</td> - {possiblePermissions.map(permission => ( + <> + {error && <tr><td colspan="8"><Error error={error} /></td></tr>} + < tr > + <td>{user.name}</td> + <td>{user.email}</td> + {possiblePermissions.map(permission => ( + <td key={permission}> + <label htmlFor={`${user.id}-permission-${permission}`}> + <input + id={`${user.id}-permission-${permission}`} + type="checkbox" + checked={this.state.permissions.includes(permission)} + value={permission} + onChange={this.handlePermissionChange} + /> + </label> + </td> + ))} <td> - <label key={permission} htmlFor={`${user.id}-permission-${permission}`}> - <input - type="checkbox" - checked={this.state.permissions.includes(permission)} - name={`permission-${permission}`} - id={`${user.id}-permission-${permission}`} - onChange={this.handlePermissionsChange} - value={permission} - /> - </label> + <SickButton type="button" disabled={loading} onClick={updatePermissions}> + Updat{loading ? 'ing' : 'e'} + </SickButton> </td> - ))} - <td> - <SickButton - type="button" - disabled={loading} - onClick={async () => { - await updatePermissions({ - variables: { - permissions: this.state.permissions, - userId: this.props.user.id, - }, - }); - }} - > - Updat{loading ? 'ing' : 'e'} - </SickButton> - </td> - </tr> - )} + </tr> + </> + ) + } </Mutation> ); } } -const Permissions = () => ( - <Query query={ALL_USERS_QUERY}> - {({ data, error, loading }) => { - if (loading) return <div>Loading</div>; - if (error) return <Error error={error} />; - return ( - <div> - <h1>Manage User Permissions</h1> - <Table> - <thead> - <tr> - <th>Name</th> - <th>Email</th> - {possiblePermissions.map(p => <th>{p}</th>)} - <th>👇🏻</th> - </tr> - </thead> - <tbody>{data.users.map(user => <User key={user.id} user={user} />)}</tbody> - </Table> - </div> - ); - }} - </Query> -); - export default Permissions; -export { ALL_USERS_QUERY, UPDATE_PERMISSIONS_MUTATION }; diff --git a/finished-application/frontend/components/PleaseSignIn.js b/finished-application/frontend/components/PleaseSignIn.js index 5646749..80cfdbf 100644 --- a/finished-application/frontend/components/PleaseSignIn.js +++ b/finished-application/frontend/components/PleaseSignIn.js @@ -1,5 +1,4 @@ import { Query } from 'react-apollo'; -import PropTypes from 'prop-types'; import { CURRENT_USER_QUERY } from './User'; import Signin from './Signin'; @@ -7,40 +6,17 @@ const PleaseSignIn = props => ( <Query query={CURRENT_USER_QUERY}> {({ data, loading }) => { if (loading) return <p>Loading...</p>; - // check if they are signed in if (!data.me) { return ( <div> - <p>Please sign in before continuing!</p> + <p>Please Sign In before Continuing</p> <Signin /> </div> ); } - // check if they need permissions - if (props.allowedPermissions) { - // check if they NO permissions, or they don't meet the requmrenets - if ( - !data.me.permissions || - !props.allowedPermissions.some(permission => data.me.permissions.includes(permission)) - ) { - return ( - <p> - Insufficient Permissions. You have: - <strong>{data.me.permissions}</strong> - and you need - <strong>{props.allowedPermissions.join(' OR ')}</strong> - </p> - ); - } - } return props.children; }} </Query> ); -PleaseSignIn.propTypes = { - allowedPermissions: PropTypes.array, - children: PropTypes.any.isRequired, -}; - export default PleaseSignIn; diff --git a/finished-application/frontend/components/RemoveFromCart.js b/finished-application/frontend/components/RemoveFromCart.js index d29cbf1..025dae5 100644 --- a/finished-application/frontend/components/RemoveFromCart.js +++ b/finished-application/frontend/components/RemoveFromCart.js @@ -1,4 +1,4 @@ -import { Component } from 'react'; +import React from 'react'; import { Mutation } from 'react-apollo'; import styled from 'styled-components'; import PropTypes from 'prop-types'; @@ -23,29 +23,43 @@ const BigButton = styled.button` } `; -class RemoveFromCart extends Component { +class RemoveFromCart extends React.Component { static propTypes = { id: PropTypes.string.isRequired, }; - + // This gets called as soon as we get a response back from the server after a mutation has been performed update = (cache, payload) => { + // 1. first read the cache const data = cache.readQuery({ query: CURRENT_USER_QUERY }); - // console.log(data.me.cart[0]); + // 2. remove that item from the cart const cartItemId = payload.data.removeFromCart.id; data.me.cart = data.me.cart.filter(cartItem => cartItem.id !== cartItemId); + // 3. write it back to the cache cache.writeQuery({ query: CURRENT_USER_QUERY, data }); }; - render() { return ( <Mutation mutation={REMOVE_FROM_CART_MUTATION} variables={{ id: this.props.id }} update={this.update} + optimisticResponse={{ + __typename: 'Mutation', + removeFromCart: { + __typename: 'CartItem', + id: this.props.id, + }, + }} > - {(removeFromCart, { loading }) => ( - <BigButton disabled={loading} title="Remove From Cart" onClick={() => removeFromCart}> - × + {(removeFromCart, { loading, error }) => ( + <BigButton + disabled={loading} + onClick={() => { + removeFromCart().catch(err => alert(err.message)); + }} + title="Delete Item" + > + × </BigButton> )} </Mutation> diff --git a/finished-application/frontend/components/ResetRequest.js b/finished-application/frontend/components/RequestReset.js index 6aedcc1..be21639 100644 --- a/finished-application/frontend/components/ResetRequest.js +++ b/finished-application/frontend/components/RequestReset.js @@ -1,44 +1,49 @@ -import React from 'react'; +import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; import gql from 'graphql-tag'; import Form from './styles/Form'; import Error from './ErrorMessage'; const REQUEST_RESET_MUTATION = gql` - mutation requestReset($email: String!) { + mutation REQUEST_RESET_MUTATION($email: String!) { requestReset(email: $email) { - id + message } } `; -class ResetRequest extends React.Component { +class RequestReset extends Component { state = { email: '', }; - + saveToState = e => { + this.setState({ [e.target.name]: e.target.value }); + }; render() { return ( <Mutation mutation={REQUEST_RESET_MUTATION} variables={this.state}> - {(resetMutation, { loading, error, called }) => ( + {(reset, { error, loading, called }) => ( <Form + method="post" + data-test="form" onSubmit={async e => { e.preventDefault(); - await resetMutation(); + await reset(); + this.setState({ email: '' }); }} - data-test="ResetRequest" > - <Error error={error} /> - {!error && called && !loading && <p>Success! Check Your Email!</p>} <fieldset disabled={loading} aria-busy={loading}> + <h2>Request a password reset</h2> + <Error error={error} /> + {!error && !loading && called && <p>Success! Check your email for a reset link!</p>} <label htmlFor="email"> Email <input - value={this.state.email} - onChange={e => this.setState({ email: e.target.value })} + type="email" name="email" - type="text" placeholder="email" + value={this.state.email} + onChange={this.saveToState} /> </label> @@ -51,5 +56,5 @@ class ResetRequest extends React.Component { } } -export default ResetRequest; +export default RequestReset; export { REQUEST_RESET_MUTATION }; diff --git a/finished-application/frontend/components/Reset.js b/finished-application/frontend/components/Reset.js index bb2ece0..a132f03 100644 --- a/finished-application/frontend/components/Reset.js +++ b/finished-application/frontend/components/Reset.js @@ -1,7 +1,7 @@ -import React from 'react'; +import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; -import PropTypes from 'prop-types'; import gql from 'graphql-tag'; +import PropTypes from 'prop-types'; import Form from './styles/Form'; import Error from './ErrorMessage'; import { CURRENT_USER_QUERY } from './User'; @@ -16,26 +16,17 @@ const RESET_MUTATION = gql` } `; -class Reset extends React.Component { +class Reset extends Component { static propTypes = { resetToken: PropTypes.string.isRequired, }; - state = { - confirmPassword: '', password: '', + confirmPassword: '', }; - saveToState = e => { - const { name, value } = e.target; - this.setState({ [name]: value }); - }; - - resetPassword = async (e, resetMutation) => { - e.preventDefault(); - await resetMutation(); + this.setState({ [e.target.name]: e.target.value }); }; - render() { return ( <Mutation @@ -47,32 +38,41 @@ class Reset extends React.Component { }} refetchQueries={[{ query: CURRENT_USER_QUERY }]} > - {(resetMutation, { error, loading }) => ( - <Form onSubmit={e => this.resetPassword(e, resetMutation)}> - <Error error={error} /> + {(reset, { error, loading, called }) => ( + <Form + method="post" + onSubmit={async e => { + e.preventDefault(); + await reset(); + this.setState({ password: '', confirmPassword: '' }); + }} + > <fieldset disabled={loading} aria-busy={loading}> + <h2>Reset Your Password</h2> + <Error error={error} /> <label htmlFor="password"> - password + Password <input + type="password" + name="password" + placeholder="password" value={this.state.password} onChange={this.saveToState} - name="password" - type="password" - id="password" /> </label> - <label htmlFor="confirm"> - Confirm: + + <label htmlFor="confirmPassword"> + Confirm Your Password <input + type="password" + name="confirmPassword" + placeholder="confirmPassword" value={this.state.confirmPassword} onChange={this.saveToState} - name="confirmPassword" - type="password" - id="confirmPassword" /> </label> - <button type="submit">Request Reset!</button> + <button type="submit">Reset Your Password!</button> </fieldset> </Form> )} @@ -82,4 +82,3 @@ class Reset extends React.Component { } export default Reset; -export { RESET_MUTATION }; diff --git a/finished-application/frontend/components/Search.js b/finished-application/frontend/components/Search.js index a972db2..c29f93e 100644 --- a/finished-application/frontend/components/Search.js +++ b/finished-application/frontend/components/Search.js @@ -1,10 +1,10 @@ import React from 'react'; -import Downshift from 'downshift'; +import Downshift, { resetIdCounter } from 'downshift'; import Router from 'next/router'; import { ApolloConsumer } from 'react-apollo'; import gql from 'graphql-tag'; -import styled, { keyframes } from 'styled-components'; import debounce from 'lodash.debounce'; +import { DropDown, DropDownItem, SearchStyles } from './styles/DropDown'; const SEARCH_ITEMS_QUERY = gql` query SEARCH_ITEMS_QUERY($searchTerm: String!) { @@ -15,6 +15,7 @@ const SEARCH_ITEMS_QUERY = gql` } } `; + function routeToItem(item) { Router.push({ pathname: '/item', @@ -24,83 +25,38 @@ function routeToItem(item) { }); } -const DropDown = styled.div` - position: absolute; - width: 100%; - z-index: 2; - border: 1px solid ${props => props.theme.lightgrey}; -`; - -const DropDownItem = styled.div` - border-bottom: 1px solid ${props => props.theme.lightgrey}; - background: ${props => (props.highlighted ? '#f7f7f7' : 'white')}; - padding: 1rem; - transition: all 0.2s; - ${props => (props.highlighted ? 'padding-left: 2rem;' : null)}; - display: flex; - align-items: center; - border-left: 10px solid ${props => (props.highlighted ? props.theme.lightgrey : 'white')}; - img { - margin-right: 10px; - } -`; - -const glow = keyframes` - from { - box-shadow: 0 0 0px yellow; - } - - to { - box-shadow: 0 0 10px 1px yellow; - } -`; - -const SearchStyles = styled.div` - position: relative; - input { - width: 100%; - padding: 10px; - border: 0; - font-size: 2rem; - &.loading { - animation: ${glow} 0.5s ease-in-out infinite alternate; - } - } -`; - class AutoComplete extends React.Component { state = { items: [], loading: false, }; - onChange = async (e, client) => { - if (!e.target.value) { - return this.setState({ items: [] }); - } + onChange = debounce(async (e, client) => { + console.log('Searching...'); + // turn loading on this.setState({ loading: true }); - this.search(client, e.target.value); - }; - - search = debounce(async (client, searchTerm) => { + // Manually query apollo client const res = await client.query({ query: SEARCH_ITEMS_QUERY, - variables: { searchTerm }, + variables: { searchTerm: e.target.value }, + }); + this.setState({ + items: res.data.items, + loading: false, }); - this.setState({ items: res.data.items, loading: false }); }, 350); - render() { + resetIdCounter(); return ( <SearchStyles> - <Downshift onChange={routeToItem} itemToString={i => (i === null ? '' : i.title)}> + <Downshift onChange={routeToItem} itemToString={item => (item === null ? '' : item.title)}> {({ getInputProps, getItemProps, isOpen, inputValue, highlightedIndex }) => ( <div> - {/* This is the searchInput */} <ApolloConsumer> {client => ( <input {...getInputProps({ - placeholder: 'Search For Item', + type: 'search', + placeholder: 'Search For An Item', id: 'search', className: this.state.loading ? 'loading' : '', onChange: e => { @@ -111,24 +67,20 @@ class AutoComplete extends React.Component { /> )} </ApolloConsumer> - {/* This is the Dropdown */} {isOpen && ( <DropDown> {this.state.items.map((item, index) => ( <DropDownItem {...getItemProps({ item })} key={item.id} - highlighted={highlightedIndex === index} + highlighted={index === highlightedIndex} > <img width="50" src={item.image} alt={item.title} /> {item.title} </DropDownItem> ))} - {/* Found Nothing State */} {!this.state.items.length && - !this.state.loading && ( - <DropDownItem>Nothing Found for {inputValue}...</DropDownItem> - )} + !this.state.loading && <DropDownItem> Nothing Found {inputValue}</DropDownItem>} </DropDown> )} </div> @@ -140,4 +92,3 @@ class AutoComplete extends React.Component { } export default AutoComplete; -export { SEARCH_ITEMS_QUERY }; diff --git a/finished-application/frontend/components/Signin.js b/finished-application/frontend/components/Signin.js index 53cdb76..4fd3013 100644 --- a/finished-application/frontend/components/Signin.js +++ b/finished-application/frontend/components/Signin.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; import gql from 'graphql-tag'; -import { CURRENT_USER_QUERY } from './User'; -import Error from './ErrorMessage'; import Form from './styles/Form'; +import Error from './ErrorMessage'; +import { CURRENT_USER_QUERY } from './User'; const SIGNIN_MUTATION = gql` mutation SIGNIN_MUTATION($email: String!, $password: String!) { @@ -17,15 +17,13 @@ const SIGNIN_MUTATION = gql` class Signin extends Component { state = { - email: '', + name: '', password: '', + email: '', }; - saveToState = e => { - const { name, value } = e.target; - this.setState({ [name]: value }); + this.setState({ [e.target.name]: e.target.value }); }; - render() { return ( <Mutation @@ -33,33 +31,33 @@ class Signin extends Component { variables={this.state} refetchQueries={[{ query: CURRENT_USER_QUERY }]} > - {(signin, { loading, error }) => ( + {(signup, { error, loading }) => ( <Form - onSubmit={e => { + method="post" + onSubmit={async e => { e.preventDefault(); - signin(); + await signup(); + this.setState({ name: '', email: '', password: '' }); }} > - <Error error={error} /> <fieldset disabled={loading} aria-busy={loading}> + <h2>Sign into your account</h2> + <Error error={error} /> <label htmlFor="email"> Email <input - value={this.state.email} - onChange={this.saveToState} + type="email" name="email" - type="text" placeholder="email" + value={this.state.email} + onChange={this.saveToState} /> </label> - <label htmlFor="password"> Password <input type="password" name="password" - id="password" - className="password" placeholder="password" value={this.state.password} onChange={this.saveToState} @@ -76,4 +74,3 @@ class Signin extends Component { } export default Signin; -export { SIGNIN_MUTATION }; diff --git a/finished-application/frontend/components/Signout.js b/finished-application/frontend/components/Signout.js index ae87631..f852531 100644 --- a/finished-application/frontend/components/Signout.js +++ b/finished-application/frontend/components/Signout.js @@ -11,15 +11,9 @@ const SIGN_OUT_MUTATION = gql` } `; -class Signout extends Component { - render() { - return ( - <Mutation mutation={SIGN_OUT_MUTATION} refetchQueries={[{ query: CURRENT_USER_QUERY }]}> - {signout => <button onClick={signout}>Sign Out</button>} - </Mutation> - ); - } -} - +const Signout = props => ( + <Mutation mutation={SIGN_OUT_MUTATION} refetchQueries={[{ query: CURRENT_USER_QUERY }]}> + {signout => <button onClick={signout}>Sign Out</button>} + </Mutation> +); export default Signout; -export { SIGN_OUT_MUTATION }; diff --git a/finished-application/frontend/components/Signup.js b/finished-application/frontend/components/Signup.js index 9164e67..e2f1a3f 100644 --- a/finished-application/frontend/components/Signup.js +++ b/finished-application/frontend/components/Signup.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; import { Mutation } from 'react-apollo'; import gql from 'graphql-tag'; -import { CURRENT_USER_QUERY } from './User'; import Form from './styles/Form'; import Error from './ErrorMessage'; +import { CURRENT_USER_QUERY } from './User'; const SIGNUP_MUTATION = gql` mutation SIGNUP_MUTATION($email: String!, $name: String!, $password: String!) { @@ -17,16 +17,13 @@ const SIGNUP_MUTATION = gql` class Signup extends Component { state = { - email: '', name: '', + email: '', password: '', }; - saveToState = e => { - const { name, value } = e.target; - this.setState({ [name]: value }); + this.setState({ [e.target.name]: e.target.value }); }; - render() { return ( <Mutation @@ -34,28 +31,28 @@ class Signup extends Component { variables={this.state} refetchQueries={[{ query: CURRENT_USER_QUERY }]} > - {(signup, { loading, error }) => ( + {(signup, { error, loading }) => ( <Form method="post" onSubmit={async e => { e.preventDefault(); - const res = await signup(); + await signup(); + this.setState({ name: '', email: '', password: '' }); }} > <fieldset disabled={loading} aria-busy={loading}> + <h2>Sign Up for An Account</h2> <Error error={error} /> - <h2>Sign Up for an Account</h2> <label htmlFor="email"> Email <input - value={this.state.email} - onChange={this.saveToState} + type="email" name="email" - type="text" placeholder="email" + value={this.state.email} + onChange={this.saveToState} /> </label> - <label htmlFor="name"> Name <input @@ -66,21 +63,18 @@ class Signup extends Component { onChange={this.saveToState} /> </label> - - <label htmlFor="signupPassword"> + <label htmlFor="password"> Password <input type="password" name="password" - id="signupPassword" - className="password" placeholder="password" value={this.state.password} onChange={this.saveToState} /> </label> - <button type="submit">Submit</button> + <button type="submit">Sign Up!</button> </fieldset> </Form> )} diff --git a/finished-application/frontend/components/SingleItem.js b/finished-application/frontend/components/SingleItem.js index 83ef8a0..145b5ae 100644 --- a/finished-application/frontend/components/SingleItem.js +++ b/finished-application/frontend/components/SingleItem.js @@ -1,23 +1,9 @@ +import React, { Component } from 'react'; +import gql from 'graphql-tag'; import { Query } from 'react-apollo'; -import PropTypes from 'prop-types'; +import Error from './ErrorMessage'; import styled from 'styled-components'; import Head from 'next/head'; -import Link from 'next/link'; -import gql from 'graphql-tag'; -import Error from './ErrorMessage'; -import AddToCart from './AddToCart'; - -const SINGLE_ITEM_QUERY = gql` - query SINGLE_ITEM_QUERY($id: ID!) { - items(where: { id: $id }) { - id - title - description - largeImage - image - } - } -`; const SingleItemStyles = styled.div` max-width: 1200px; @@ -38,40 +24,47 @@ const SingleItemStyles = styled.div` } `; -const SingleItem = props => ( - <Query query={SINGLE_ITEM_QUERY} variables={{ id: props.id }}> - {({ data, loading, error }) => { - if (loading) return <p>Loading...</p>; - if (error) return <Error error={error} />; - const [item] = data.items; - return ( - <SingleItemStyles data-test="SingleItem"> - <Head> - <title>{item.title}</title> - </Head> - <img src={item.largeImage || item.image} alt={item.title} /> - <div className="details"> - <h2>Viewing {item.title}</h2> - <p>{item.description}</p> - <Link - href={{ - pathname: '/update', - query: { id: item.id }, - }} - > - <a>Edit ✏️</a> - </Link> - <AddToCart id={item.id} /> - </div> - </SingleItemStyles> - ); - }} - </Query> -); - -SingleItem.propTypes = { - id: PropTypes.string.isRequired, -}; +const SINGLE_ITEM_QUERY = gql` + query SINGLE_ITEM_QUERY($id: ID!) { + item(where: { id: $id }) { + id + title + description + largeImage + } + } +`; +class SingleItem extends Component { + render() { + return ( + <Query + query={SINGLE_ITEM_QUERY} + variables={{ + id: this.props.id, + }} + > + {({ error, loading, data }) => { + if (error) return <Error error={error} />; + if (loading) return <p>Loading...</p>; + if (!data.item) return <p>No Item Found for {this.props.id}</p>; + const item = data.item; + return ( + <SingleItemStyles> + <Head> + <title>Sick Fits | {item.title}</title> + </Head> + <img src={item.largeImage} alt={item.title} /> + <div className="details"> + <h2>Viewing {item.title}</h2> + <p>{item.description}</p> + </div> + </SingleItemStyles> + ); + }} + </Query> + ); + } +} export default SingleItem; export { SINGLE_ITEM_QUERY }; diff --git a/finished-application/frontend/components/TakeMyMoney.js b/finished-application/frontend/components/TakeMyMoney.js index b9e42ea..ca87832 100644 --- a/finished-application/frontend/components/TakeMyMoney.js +++ b/finished-application/frontend/components/TakeMyMoney.js @@ -1,6 +1,6 @@ -import { Component } from 'react'; +import React from 'react'; import StripeCheckout from 'react-stripe-checkout'; -import { Mutation, Query } from 'react-apollo'; +import { Mutation } from 'react-apollo'; import Router from 'next/router'; import NProgress from 'nprogress'; import PropTypes from 'prop-types'; @@ -27,28 +27,27 @@ function totalItems(cart) { return cart.reduce((tally, cartItem) => tally + cartItem.quantity, 0); } -class TakeMyMoney extends Component { +class TakeMyMoney extends React.Component { onToken = async (res, createOrder) => { NProgress.start(); + // manually call the mutation once we have the stripe token const order = await createOrder({ variables: { token: res.id, }, + }).catch(err => { + alert(err.message); }); - console.log(order); - // Route them to that order page - const { id } = order.data.createOrder; Router.push({ - pathname: `/order`, - query: { id }, + pathname: '/order', + query: { id: order.data.createOrder.id }, }); }; render() { return ( <User> - {({ data: { me }, error }) => { - if (!me || !me.cart.length) return null; - if (error) return <Error error={error} />; + {({ data: { me }, loading }) => { + if (loading) return null; return ( <Mutation mutation={CREATE_ORDER_MUTATION} @@ -57,13 +56,13 @@ class TakeMyMoney extends Component { {createOrder => ( <StripeCheckout amount={calcTotalPrice(me.cart)} - name="Sick Fits Haul" - description={`Order of ${totalItems(me.cart)} Items From Sick Fits`} - image={me.cart[0].item && me.cart[0].item.image} - token={res => this.onToken(res, createOrder)} - stripeKey="pk_lclTtThFp8CnO3QtEZSd8HA9mFUps" + name="Sick Fits" + description={`Order of ${totalItems(me.cart)} items!`} + image={me.cart.length && me.cart[0].item && me.cart[0].item.image} + stripeKey="pk_test_Vtknn6vSdcZWSG2JWvEiWSqC" currency="USD" email={me.email} + token={res => this.onToken(res, createOrder)} > {this.props.children} </StripeCheckout> @@ -76,8 +75,5 @@ class TakeMyMoney extends Component { } } -TakeMyMoney.propTypes = { - children: PropTypes.any, -}; - export default TakeMyMoney; +export { CREATE_ORDER_MUTATION }; diff --git a/finished-application/frontend/components/UpdateItem.js b/finished-application/frontend/components/UpdateItem.js index 08ba254..11aef32 100644 --- a/finished-application/frontend/components/UpdateItem.js +++ b/finished-application/frontend/components/UpdateItem.js @@ -1,82 +1,79 @@ import React, { Component } from 'react'; -import { Query, Mutation } from 'react-apollo'; -import PropTypes from 'prop-types'; +import { Mutation, Query } from 'react-apollo'; import gql from 'graphql-tag'; -import { SINGLE_ITEM_QUERY } from './SingleItem'; +import Router from 'next/router'; import Form from './styles/Form'; +import formatMoney from '../lib/formatMoney'; import Error from './ErrorMessage'; +const SINGLE_ITEM_QUERY = gql` + query SINGLE_ITEM_QUERY($id: ID!) { + item(where: { id: $id }) { + id + title + description + price + } + } +`; const UPDATE_ITEM_MUTATION = gql` - mutation updateItem($id: ID!, $title: String, $description: String, $price: Int) { - updateItem(id: $id, description: $description, title: $title, price: $price) { + mutation UPDATE_ITEM_MUTATION($id: ID!, $title: String, $description: String, $price: Int) { + updateItem(id: $id, title: $title, description: $description, price: $price) { id + title + description + price } } `; class UpdateItem extends Component { - static propTypes = { - id: PropTypes.string.isRequired, - }; - state = { - item: {}, - }; - - saveToState = e => { - let { name, value, type } = e.target; - if (type === 'number') { - value = parseInt(value); - } - const item = { ...this.state.item }; - item[name] = value; - this.setState({ item }); + state = {}; + handleChange = e => { + const { name, type, value } = e.target; + const val = type === 'number' ? parseFloat(value) : value; + this.setState({ [name]: val }); }; - updateItem = async (e, updateItemMutation) => { - console.log('Updating Item'); e.preventDefault(); - + console.log('Updating Item!!'); + console.log(this.state); const res = await updateItemMutation({ - // pass in those variables from state variables: { id: this.props.id, - ...this.state.item, + ...this.state, }, }); - console.log(res); + console.log('Updated!!'); }; render() { return ( - <Query query={SINGLE_ITEM_QUERY} variables={{ id: this.props.id }}> - {({ data: { items }, loading }) => { + <Query + query={SINGLE_ITEM_QUERY} + variables={{ + id: this.props.id, + }} + > + {({ data, loading }) => { if (loading) return <p>Loading...</p>; - if (!items || !items.length) return <p>Item Not Found</p>; - const [item] = items; + if (!data.item) return <p>No Item Found for ID {this.props.id}</p>; return ( - <Mutation mutation={UPDATE_ITEM_MUTATION}> - {(updateItemMutation, { error }) => ( - <Form onSubmit={e => this.updateItem(e, updateItemMutation)}> + <Mutation mutation={UPDATE_ITEM_MUTATION} variables={this.state}> + {(updateItem, { loading, error }) => ( + <Form onSubmit={e => this.updateItem(e, updateItem)}> <Error error={error} /> - <h2>Edit {item.title}</h2> <fieldset disabled={loading} aria-busy={loading}> <label htmlFor="title"> Title <input + type="text" id="title" - defaultValue={item.title} name="title" - onChange={this.saveToState} - type="text" - /> - </label> - - <label htmlFor="description"> - Description - <textarea - defaultValue={item.description} - name="description" - onChange={this.saveToState} + placeholder="Title" + required + defaultValue={data.item.title} + onChange={this.handleChange} /> </label> @@ -84,12 +81,27 @@ class UpdateItem extends Component { Price <input type="number" + id="price" name="price" - onChange={this.saveToState} - defaultValue={item.price} + placeholder="Price" + required + defaultValue={data.item.price} + onChange={this.handleChange} + /> + </label> + + <label htmlFor="description"> + Description + <textarea + id="description" + name="description" + placeholder="Enter A Description" + required + defaultValue={data.item.description} + onChange={this.handleChange} /> </label> - <button type="submit">Save...</button> + <button type="submit">Sav{loading ? 'ing' : 'e'} Changes</button> </fieldset> </Form> )} diff --git a/finished-application/frontend/components/User.js b/finished-application/frontend/components/User.js index 19c568d..6f8a4fb 100644 --- a/finished-application/frontend/components/User.js +++ b/finished-application/frontend/components/User.js @@ -11,20 +11,16 @@ const CURRENT_USER_QUERY = gql` permissions orders { id - charge - total } cart { id quantity item { - __typename id - title price - description image - largeImage + title + description } } } @@ -33,7 +29,7 @@ const CURRENT_USER_QUERY = gql` const User = props => ( <Query {...props} query={CURRENT_USER_QUERY}> - {result => props.children(result)} + {payload => props.children(payload)} </Query> ); diff --git a/finished-application/frontend/components/styles/DropDown.js b/finished-application/frontend/components/styles/DropDown.js new file mode 100644 index 0000000..df86aee --- /dev/null +++ b/finished-application/frontend/components/styles/DropDown.js @@ -0,0 +1,47 @@ +import styled, { keyframes } from 'styled-components'; + +const DropDown = styled.div` + position: absolute; + width: 100%; + z-index: 2; + border: 1px solid ${props => props.theme.lightgrey}; +`; + +const DropDownItem = styled.div` + border-bottom: 1px solid ${props => props.theme.lightgrey}; + background: ${props => (props.highlighted ? '#f7f7f7' : 'white')}; + padding: 1rem; + transition: all 0.2s; + ${props => (props.highlighted ? 'padding-left: 2rem;' : null)}; + display: flex; + align-items: center; + border-left: 10px solid ${props => (props.highlighted ? props.theme.lightgrey : 'white')}; + img { + margin-right: 10px; + } +`; + +const glow = keyframes` + from { + box-shadow: 0 0 0px yellow; + } + + to { + box-shadow: 0 0 10px 1px yellow; + } +`; + +const SearchStyles = styled.div` + position: relative; + input { + width: 100%; + padding: 10px; + border: 0; + font-size: 2rem; + &.loading { + animation: ${glow} 0.5s ease-in-out infinite alternate; + } + } +`; + +export { DropDown, DropDownItem, SearchStyles }; diff --git a/finished-application/frontend/components/styles/NavStyles.js b/finished-application/frontend/components/styles/NavStyles.js index 41523df..fe4abda 100644 --- a/finished-application/frontend/components/styles/NavStyles.js +++ b/finished-application/frontend/components/styles/NavStyles.js @@ -18,6 +18,8 @@ const NavStyles = styled.ul` background: none; border: 0; cursor: pointer; + color: ${props => props.theme.black}; + font-weight: 800; @media (max-width: 700px) { font-size: 10px; padding: 0 10px; diff --git a/finished-application/frontend/components/styles/OrderStyles.js b/finished-application/frontend/components/styles/OrderStyles.js index 4a2d804..f461b70 100644 --- a/finished-application/frontend/components/styles/OrderStyles.js +++ b/finished-application/frontend/components/styles/OrderStyles.js @@ -30,7 +30,6 @@ const OrderStyles = styled.div` padding-bottom: 2rem; img { width: 100%; - height: 100%; object-fit: cover; } } diff --git a/finished-application/frontend/components/styles/Table.js b/finished-application/frontend/components/styles/Table.js index e9d0673..b2cd6c4 100644 --- a/finished-application/frontend/components/styles/Table.js +++ b/finished-application/frontend/components/styles/Table.js @@ -11,7 +11,7 @@ const Table = styled.table` th { border-bottom: 1px solid ${props => props.theme.offWhite}; border-right: 1px solid ${props => props.theme.offWhite}; - padding: 10px 5px; + padding: 5px; position: relative; &:last-child { border-right: none; @@ -20,6 +20,10 @@ const Table = styled.table` width: 100%; } } + label { + padding: 10px 5px; + display: block; + } } tr { &:hover { diff --git a/finished-application/frontend/config.js b/finished-application/frontend/config.js index 53e05ed..ae41c54 100644 --- a/finished-application/frontend/config.js +++ b/finished-application/frontend/config.js @@ -1,3 +1,4 @@ // This is client side config only - don't put anything in here that shouldn't be public! -export const endpoint = `http://localhost:5555`; +export const endpoint = `http://localhost:4444`; +export const prodEndpoint = `https://sickfits-yoga-prod.herokuapp.com/`; export const perPage = 4; diff --git a/finished-application/frontend/lib/withData.js b/finished-application/frontend/lib/withData.js index 0256ba9..c5cce8d 100644 --- a/finished-application/frontend/lib/withData.js +++ b/finished-application/frontend/lib/withData.js @@ -1,11 +1,11 @@ import withApollo from 'next-with-apollo'; import ApolloClient from 'apollo-boost'; +import { endpoint, prodEndpoint } from '../config'; import { LOCAL_STATE_QUERY } from '../components/Cart'; -import { endpoint } from '../config'; function createClient({ headers }) { return new ApolloClient({ - uri: process.env.NODE_ENV === 'development' ? endpoint : endpoint, + uri: process.env.NODE_ENV === 'development' ? endpoint : prodEndpoint, request: operation => { operation.setContext({ fetchOptions: { @@ -14,12 +14,19 @@ function createClient({ headers }) { headers, }); }, + // local data clientState: { resolvers: { Mutation: { toggleCart(_, variables, { cache }) { - const { cartOpen } = cache.readQuery({ query: LOCAL_STATE_QUERY }); - const data = { data: { cartOpen: !cartOpen } }; + // read the cartOpen value from the cache + const { cartOpen } = cache.readQuery({ + query: LOCAL_STATE_QUERY, + }); + // Write the cart State to the opposite + const data = { + data: { cartOpen: !cartOpen }, + }; cache.writeData(data); return data; }, diff --git a/finished-application/frontend/package-lock.json b/finished-application/frontend/package-lock.json index aba4448..592eccb 100644 --- a/finished-application/frontend/package-lock.json +++ b/finished-application/frontend/package-lock.json @@ -6,7 +6,7 @@ "dependencies": { "@babel/code-frame": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz", "integrity": "sha512-L8i94FLSyaLQpRfDo/qqSm8Ndb44zMtXParXo0MebJICG1zoCCL4+GkzUOlB4BNTRSXXQdb3feam/qw7bKPipQ==", "requires": { "@babel/highlight": "7.0.0-beta.42" @@ -14,7 +14,7 @@ }, "@babel/core": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/core/-/core-7.0.0-beta.42.tgz", "integrity": "sha512-jcjZRewF/xqROfbk8EGyWlykaIR3IwrcefjWHu8xh4QnULSv3nfkjPM35v1itDgAT4/Jj5b4mPf4eZSC2HoRQA==", "requires": { "@babel/code-frame": "7.0.0-beta.42", @@ -32,23 +32,11 @@ "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/generator": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.42.tgz", "integrity": "sha512-9x3zS4nG/6GAvJWB8fAK+5g/Di36xdubB43dMNSucNJTwPvmyfCippir/0I8zyG+ID66hLCLi8V9bomlWRYaHA==", "requires": { "@babel/types": "7.0.0-beta.42", @@ -56,221 +44,101 @@ "lodash": "^4.2.0", "source-map": "^0.5.0", "trim-right": "^1.0.1" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.47.tgz", - "integrity": "sha512-Pjxb/PrxyKWc7jcAXlawvNAQMxxY+tSSNC5wxJstJjpO10mocmGzBOqNYjxdvVhMb3d0BEPQ8mR+D65fFpZ+TA==", + "version": "7.0.0-beta.42", + "resolved": "http://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz", + "integrity": "sha512-2lmcB7mHRSXZjDV9fdnWGRco+5fbI0PdUtsL7mNA2GtJs0GPoKdV3sCx0N4cpzG2YRR4dNCiB2riYIrzWjmQ1Q==", "requires": { - "@babel/types": "7.0.0-beta.47" + "@babel/types": "7.0.0-beta.42" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.42.tgz", "integrity": "sha512-lI14OS85dMAvsjTNTLrk3qqqvmy4CNxgXGpWkjMuKlYzwnC7LQvdrdH7wf3CBl8C0GSZHbgvADMUtrKiNjxJ5w==", "requires": { "@babel/helper-explode-assignable-expression": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-builder-react-jsx": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0-beta.42.tgz", "integrity": "sha512-pgy7el3TV5u4SdWB9w1No5X0fooc8pWcVujbOzey+b9CQU5cf64CGct01bs+k7vGoKwoTYWizZD9MeFk2JLawg==", "requires": { "@babel/types": "7.0.0-beta.42", "esutils": "^2.0.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-call-delegate": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.42.tgz", "integrity": "sha512-iGZJrRSKIvla9m8VJNv8wlbPReOLmVqFTpefl07v6e5cMPvP2XOgVWR2B4HZ9UwVo7Lx8rPAQ8/UZgjvq+pJ+A==", "requires": { "@babel/helper-hoist-variables": "7.0.0-beta.42", "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-define-map": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.42.tgz", "integrity": "sha512-MKaHNaciAiPc7q4AS2XRqk+I0d2ADryuIxd6r0EykkQ57w2nQxFx/CTWWQEnob9OSAP5dPO1stWIZ9j/VeKtIQ==", "requires": { "@babel/helper-function-name": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-explode-assignable-expression": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.42.tgz", "integrity": "sha512-fT1kVF2PoogggBT9QBgb4IXjbpC3VzFh1sJ6p/k3fZhOXbyqqco7oQ6lzvcIAO6rA7b15/iaIyLj0E+SLCHbwQ==", "requires": { "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-function-name": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz", "integrity": "sha512-6IZ+kkPypwJrnmNzI3y31qAps2kXoPtCE241SvBva2YzB0n/YORWx2YM0jHPYOJBU9Xx5KkUhOKuWkeXZQgtTA==", "requires": { "@babel/helper-get-function-arity": "7.0.0-beta.42", "@babel/template": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-get-function-arity": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz", "integrity": "sha512-hF5KKcn+V/5PwU7KZ1aVwo535woLC9eV+djaoyNPZeMMJ2s+8bZlEa66Tarei0T68VRL5LXIs1Ao4hSabSkpBg==", "requires": { "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-hoist-variables": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.42.tgz", "integrity": "sha512-07NJrcvE2a5oOYiQUzSzih21R6nOpfoIe9saelKxORKXr9cOXcpoLXDi9XIAbRJoww8hqp57JbQxRK09FltZhQ==", "requires": { "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-module-imports": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.42.tgz", "integrity": "sha512-0kTX0cjuVKUKDJmHjmAb504kNrwae0Ja32hGii7zSHDKm0tVZvvpT8Cc1yYHo6UsIkUmzEvfGwIrNYemx1jTtQ==", "requires": { "@babel/types": "7.0.0-beta.42", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-module-transforms": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.42.tgz", "integrity": "sha512-XfCGsf6ijExiXw+oKL1Cp7VJttvgq8qalTGRqz4pviVNEjHU89Pfjsi1K/shdy5x4x+PiTSqn4zZ2PKfVp+vgg==", "requires": { "@babel/helper-module-imports": "7.0.0-beta.42", @@ -279,48 +147,24 @@ "@babel/template": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-optimise-call-expression": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.42.tgz", "integrity": "sha512-4Sssg3iFnLH/1fZQFCPNJ7ISZzrRwq/X8/T5OaURGP3NMVTR4mnEUqrc3v8/SfL3pfa57q3Fe4zIC2h7FuPkww==", "requires": { "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-plugin-utils": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.42.tgz", "integrity": "sha512-hZLw8Iz9/YOxI9mgWyPOP1S84OcdQo1WFkZrS1sSf45g16sEb4dVslds2uvZgmx9BiG94PoWyABGf48Py6D6CA==" }, "@babel/helper-regex": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0-beta.42.tgz", "integrity": "sha512-QdwTsTPjJ63StltU6cEtqmB0Lc+L/OkK9Pz2bL9rylDF3UloyXinBA+SI/FkVyXi5HhDbBRf4T/OeVhWrsK68A==", "requires": { "lodash": "^4.2.0" @@ -328,7 +172,7 @@ }, "@babel/helper-remap-async-to-generator": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.42.tgz", "integrity": "sha512-At+ipbHRYoN0AaafqPvTPqyVYi+beantKZ2orCYSb/AzP2+JywaWlOPH0wyXLOGzjkJX548Is4cV2wGbEG7++Q==", "requires": { "@babel/helper-annotate-as-pure": "7.0.0-beta.42", @@ -336,151 +180,78 @@ "@babel/template": "7.0.0-beta.42", "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz", - "integrity": "sha512-2lmcB7mHRSXZjDV9fdnWGRco+5fbI0PdUtsL7mNA2GtJs0GPoKdV3sCx0N4cpzG2YRR4dNCiB2riYIrzWjmQ1Q==", - "requires": { - "@babel/types": "7.0.0-beta.42" - } - }, - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-replace-supers": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.42.tgz", "integrity": "sha512-5OwdkTm7TaEBiBMOUV97j8a2goD3+avek9EOl/UdE/CYdtdQ/8RPdUPqtqXApay30aZ/EjIpBItcNlBtt29WBw==", "requires": { "@babel/helper-optimise-call-expression": "7.0.0-beta.42", "@babel/template": "7.0.0-beta.42", "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-simple-access": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.42.tgz", "integrity": "sha512-SK1nb/sx+Q/0N8USPR+/5G1D1U9tCo82MzJknmK7X4yexDacHmDHtqNP7xqUlSSo3xfMfyHgT7mAH17Cwik/gA==", "requires": { "@babel/template": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-split-export-declaration": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz", "integrity": "sha512-2r8pZG6SAJTTaI2OhxCmz5PKlMUPY5adOHrHtb1gM3ibJPDOzPAeOQNzItdxNnM33jjRakEGitXX6iYg7Sz73w==", "requires": { "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helper-wrap-function": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.42.tgz", "integrity": "sha512-jpZDbZROEw2HfmlImLXDB7BFoyo6M/Wn8jOOc1+JfCpg2uaZ+n6Q0C3sA6mCN6o7ZgpJkgT7IHQwdB3RMV6KLA==", "requires": { "@babel/helper-function-name": "7.0.0-beta.42", "@babel/template": "7.0.0-beta.42", "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/helpers": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/helpers/-/helpers-7.0.0-beta.42.tgz", "integrity": "sha512-att9SiG9GxOUdjai87LqjSstgNsdo1nXiGu+Eh078zwRiN8bM5Ww8vrbYkAm9PF4HaW6OzOKqyKxv595RT79bA==", "requires": { "@babel/template": "7.0.0-beta.42", "@babel/traverse": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/highlight": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.42.tgz", "integrity": "sha512-X3Ur/A/lIbbP8W0pmwgqtDXIxhQmxPaiwY9SKP7kF9wvZfjZRwMvbJE92ozUhF3UDK3DCKaV7oGqmI1rP/zqWA==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^3.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + } } }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.42.tgz", "integrity": "sha512-fPPsSCajWzefDSb49JEeZfd/UeMK3xEQSRAz/H3BZ1uaRatwNNZoOJq4/WRH/xDeISmYUdkLRtqs39VPWLKYVg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -490,7 +261,7 @@ }, "@babel/plugin-proposal-class-properties": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.42.tgz", "integrity": "sha512-VXRmo/t2nAVciXxEgPTAfcUBXj0UXNPIvX2aj3lzHL51N+uh+rtgsIF0nuZwGE4u89WvBDH66yjAu60Ra674kw==", "requires": { "@babel/helper-function-name": "7.0.0-beta.42", @@ -500,7 +271,7 @@ }, "@babel/plugin-proposal-object-rest-spread": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.42.tgz", "integrity": "sha512-L4z5R8k3GxQKVYE2zGwftQ9K/IIIXMZKnY4C0lDyyMJAVk+H+cFUD0NfD4KTyZACc8DPqjkw6aEtC/AKCKUvEA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -509,7 +280,7 @@ }, "@babel/plugin-proposal-optional-catch-binding": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.42.tgz", "integrity": "sha512-hD8HTOKzLqMXwKkqX+Qiig8aqsCoZ9k9Y0I3zLjkpYh7HBPoPhUhlN6McxtPHGRjM/qBCNcLCwtWuJetK/cNZg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -518,7 +289,7 @@ }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.42.tgz", "integrity": "sha512-aUEpQFuQydhs20dQSkz7edWkRaNHt8rVfcqHy5ykR4dqflq7+EclnuljuzIS+MJ3V8i5cyLMEXv/W1uWWf7UGg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -528,7 +299,7 @@ }, "@babel/plugin-syntax-async-generators": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.42.tgz", "integrity": "sha512-k6oVMsmY/mcp+rPRcK4dJL/J1ahtIRucXtNHNvAVRV9WFc7G3r1rrb1GlM4iNHareXBNdRlf7mkxyVaVpyJ3TQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -536,7 +307,7 @@ }, "@babel/plugin-syntax-class-properties": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.42.tgz", "integrity": "sha512-nG0XCeuni6GgjxOqtxVtnfSoRFeXdqY6cja83cmFpC1klw8f6XShbeDmK7xX1mUYBHkEqLTDurlX+fuua9siCg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -544,7 +315,7 @@ }, "@babel/plugin-syntax-dynamic-import": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.42.tgz", "integrity": "sha512-N+XpzyZviWu+MJA7Cgi+LtMj1CMLkZyjuy4qbSZauqm6gIrNioMtirLDt4+NrCFx7kZG/T4ic6jLUpWdH5SlXg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -552,7 +323,7 @@ }, "@babel/plugin-syntax-jsx": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.42.tgz", "integrity": "sha512-NWlawLcYkxMpH2QK4CbYg1ctTuFaKYRVBZGiGkgcO7xD59bNUu2HTG/BXynuaheQiGX96ItoK1igV6vuS9BK/w==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -560,7 +331,7 @@ }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.42.tgz", "integrity": "sha512-Zhz6MdSpEviY3UFh/DUlrvf/Tn4wWosHXrnR52PBRtP/8ESWVaFuk57xWcBon3jJh0z5hYyRUr+D0wR7W7ZmnQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -568,7 +339,7 @@ }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.42.tgz", "integrity": "sha512-TXJpGMX/M9r0tkJPgZtoaBCdrhFMeAZtOiwNtVf5dWoA6TOmDwnnnbaUqynbBZm16jE7quWW5VhfFjDlOP1vMA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -576,7 +347,7 @@ }, "@babel/plugin-transform-arrow-functions": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.42.tgz", "integrity": "sha512-/tpAo2Ur8m32U9pBcGQ6JKplWNEh462zxCnwVKL9yVwG02lttC4QSYBvreRK1wBidDz8JgRZFGGeB9N4l23/Sg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -584,7 +355,7 @@ }, "@babel/plugin-transform-async-to-generator": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.42.tgz", "integrity": "sha512-TTu8z0xz/mS8H98nCVw3wp86RSzdvUhtM4hX32sItrauJX1X8shVZDKbDtG8ZdA1FMKLgfvmn/hxtPOqjOkkpw==", "requires": { "@babel/helper-module-imports": "7.0.0-beta.42", @@ -594,7 +365,7 @@ }, "@babel/plugin-transform-block-scoped-functions": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.42.tgz", "integrity": "sha512-Ib3bSf7pYLbqe+46RrJFJae1DrNYvIrGleYjzaN/MFYNaG9ePaOevSBmFHPxuW1SM5l2tTloeu5a7mhs9h0oxg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -602,7 +373,7 @@ }, "@babel/plugin-transform-block-scoping": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.42.tgz", "integrity": "sha512-qvlAR1L7gZ1gqdj81a2AEfuar3lFsr7FSad4JrN5CJinQlVn/1eJe8oB1DQ7U8ocAzDDjn3tGit9lN7uKBWZsQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -611,7 +382,7 @@ }, "@babel/plugin-transform-classes": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.42.tgz", "integrity": "sha512-0GCv1wNyfMXKuaulype6+TF02Bxq/zQZ4NUbn2w9aQxzIZviAe1jcA7IRrNN2eVQL9L4oi8N6B26Wf8xFoBNrQ==", "requires": { "@babel/helper-annotate-as-pure": "7.0.0-beta.42", @@ -622,31 +393,11 @@ "@babel/helper-replace-supers": "7.0.0-beta.42", "@babel/helper-split-export-declaration": "7.0.0-beta.42", "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz", - "integrity": "sha512-2lmcB7mHRSXZjDV9fdnWGRco+5fbI0PdUtsL7mNA2GtJs0GPoKdV3sCx0N4cpzG2YRR4dNCiB2riYIrzWjmQ1Q==", - "requires": { - "@babel/types": "7.0.0-beta.42" - } - }, - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-computed-properties": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.42.tgz", "integrity": "sha512-WYGXfe2uo2FdACubMhwV6Oq1Zx3SNSeBUHRe2X53WKbIKLMZlxRR5GfoLv4V2CeDGHL3mb97wYhmXSb56bIXeg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -654,7 +405,7 @@ }, "@babel/plugin-transform-destructuring": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.42.tgz", "integrity": "sha512-G3hwLdgeKCZ8EWqwMqeOEoXxRBc5aJthMUD5kN7sAIko+lvwIVQ0do9Op/+DAGVnrvC+g0Ool2Mihcej2NsCPQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -662,7 +413,7 @@ }, "@babel/plugin-transform-dotall-regex": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.42.tgz", "integrity": "sha512-g/XbJzib6qmbHOJv/2n/bVKLcfJUBRSo9zO73O7lvJEYh8JvHWM/oVU829ztVPpdPT3xgHMiTVhnV/O5r5dYNA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -672,7 +423,7 @@ }, "@babel/plugin-transform-duplicate-keys": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.42.tgz", "integrity": "sha512-Nze+na6pnoZdrMtQv5Ct/i3031ib+kctDwt8KgcrtnOr52qUlbogPe1jY2WxpwSMtiowdPY93XsRFZeq6ogMTA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -680,7 +431,7 @@ }, "@babel/plugin-transform-exponentiation-operator": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.42.tgz", "integrity": "sha512-ylnAziSEho282hxQROK5tbNtxm0sSoQaQS74OCSE52eFeDNqSNGapyiNiWMZ71gqs8q5aqYsPgfa/vTccLT7uA==", "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "7.0.0-beta.42", @@ -689,7 +440,7 @@ }, "@babel/plugin-transform-for-of": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.42.tgz", "integrity": "sha512-pn+fmrr6pfXeEUMyx7JrKAOG/XCiABvXFOmQYqLoCl0POcW8sE75r8w/Lu2wHFayrNgDqR7/RCb7RW4h/U2u1Q==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -697,7 +448,7 @@ }, "@babel/plugin-transform-function-name": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.42.tgz", "integrity": "sha512-OopJXZQAgBsPUAHr49Z4S4X24XJa9Iu0zPUPCML9weHloyFnkw5SGQIDLC6BxxPOmqfiB49gfIuHjbtJfUsOJw==", "requires": { "@babel/helper-function-name": "7.0.0-beta.42", @@ -706,7 +457,7 @@ }, "@babel/plugin-transform-literals": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.42.tgz", "integrity": "sha512-mWEayRwUCY3/u8LZpcdR96TiWqofP60jjfVZUJ6agK6ifwEBgamv1Db8syIwUCjaZww5bjyZqX61AmP4fx3dvQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -714,7 +465,7 @@ }, "@babel/plugin-transform-modules-amd": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.42.tgz", "integrity": "sha512-JCNM+WPKImpNHVLZG6x9F87AyX+K8KpMCkuCqyE7YgxAJWB+5FHVnpkdF6lprDilE/LXGwplmNb9OrWulMss2g==", "requires": { "@babel/helper-module-transforms": "7.0.0-beta.42", @@ -723,7 +474,7 @@ }, "@babel/plugin-transform-modules-commonjs": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.42.tgz", "integrity": "sha512-tCN0FFdTHaXpuJokvW8iWtbDpjKDNDO2dIyb8rr0GMQxsA62914e8oclcDUPEbC5iF5SCDEF0CmVHXbxnvANfQ==", "requires": { "@babel/helper-module-transforms": "7.0.0-beta.42", @@ -733,7 +484,7 @@ }, "@babel/plugin-transform-modules-systemjs": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.42.tgz", "integrity": "sha512-IEN3HVHpMPWrnI2EAEHg0248+Axkg2nrdspajefIyeZMlrN0dUt0gDgVsZtza5PK/1a+RZlpli7dDgcA7heTMg==", "requires": { "@babel/helper-hoist-variables": "7.0.0-beta.42", @@ -742,7 +493,7 @@ }, "@babel/plugin-transform-modules-umd": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.42.tgz", "integrity": "sha512-yOA2qnk4snRxkdgKDp6xN+by3V3z8q14cDf/aB0j36Jv2YqpDWUWMMWLQjabCEE/l7ptePBS4qbFH8dffCm4Tg==", "requires": { "@babel/helper-module-transforms": "7.0.0-beta.42", @@ -751,7 +502,7 @@ }, "@babel/plugin-transform-new-target": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.42.tgz", "integrity": "sha512-P2zwIIeTOev0Xjo//4p7ugtsWazIsycbs/T6I/ghiV2lREFxo9s93fygbXNXt5ALRPRWDthiAYIDA9n1vrgkVg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -759,7 +510,7 @@ }, "@babel/plugin-transform-object-super": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.42.tgz", "integrity": "sha512-d+gki0bYQtlleX4LnvpwjIkjmZScKQuHhDsD3N3nHLpwxbANp3YGtIfuf8dbY/PIbUKtd55/ErCvdsyuGlxAlw==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -768,7 +519,7 @@ }, "@babel/plugin-transform-parameters": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.42.tgz", "integrity": "sha512-z2iXwael/zMHkOvvkJSirg1jIxGA00JOIwdERB+x+VGxLfLb+1IdyiytVw9+w5RTNSVAGYt6R4jhvUdAeQwMiQ==", "requires": { "@babel/helper-call-delegate": "7.0.0-beta.42", @@ -778,7 +529,7 @@ }, "@babel/plugin-transform-react-display-name": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0-beta.42.tgz", "integrity": "sha512-0oyVkjXLkxXSt21mPdfRNwKZ/sIEjcDx5/LqMS+KtMUxsCcB2BFhtzaESd8xLdXb7Zi2otMjt2DsDK+IUeitxA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -786,7 +537,7 @@ }, "@babel/plugin-transform-react-jsx": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0-beta.42.tgz", "integrity": "sha512-XT8M4cZmr/Gaw6Cp2UELhYajB/PT6xNERtv8d+Eu08fULfAbtZJBFVxmm68T9LT+JZkcI35O1gTP17yJz5PJrA==", "requires": { "@babel/helper-builder-react-jsx": "7.0.0-beta.42", @@ -796,7 +547,7 @@ }, "@babel/plugin-transform-react-jsx-self": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0-beta.42.tgz", "integrity": "sha512-bpG/Z6D8RtckyYPbqMfU/DaV7H/xHaTNAJLzYLHqQhtQT70pwmLVQ8E6ara18yp7k+6OJytrrmJm9F6ClT4pnA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -805,7 +556,7 @@ }, "@babel/plugin-transform-react-jsx-source": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0-beta.42.tgz", "integrity": "sha512-vLKqNyFDx4bESdy7dTWLmAhCTk8zszsxhYGKL/0FaFacksSQye5conP68j8jMEMn9M/JBGgxfFqL6tPbOn2uVw==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -814,7 +565,7 @@ }, "@babel/plugin-transform-regenerator": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.42.tgz", "integrity": "sha512-E1s/MBk8ztbXqxbeUvFH26x8vAWq/7qX3UdbB8fKoN3EX2Wg9+yXWyuI50jOhXOq7jfmbOrVe0BWoUOjCOqWPQ==", "requires": { "regenerator-transform": "^0.12.3" @@ -822,7 +573,7 @@ }, "@babel/plugin-transform-runtime": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.42.tgz", "integrity": "sha512-4LcNdjMvKzCwK/eqfbUiXFAZht8OTx0Gv2Ok42o+zhb8DvNUaYUndgW9AU4Q6nbpxzw2vTWNUXSIRvdGsxpgQQ==", "requires": { "@babel/helper-module-imports": "7.0.0-beta.42", @@ -831,7 +582,7 @@ }, "@babel/plugin-transform-shorthand-properties": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.42.tgz", "integrity": "sha512-GID8z2s6R/XOHgaoxrKBH+zdBOBqFJTDYDS91w30fJGiHxVM4qFVOpYDNIMxmsjqW6bKVHyLeHBezp0OHv+9QQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -839,7 +590,7 @@ }, "@babel/plugin-transform-spread": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.42.tgz", "integrity": "sha512-ZzWt7RvGcV+9DcOTBwE6ArNqDpUMpzZhCToj3UNtULol9gGBbrGgUK/LdGwGInj+Z2aIdOjbAMFtEuC6626lJg==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -847,7 +598,7 @@ }, "@babel/plugin-transform-sticky-regex": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.42.tgz", "integrity": "sha512-zQI5NhVfnSNNFiG8JhoXXzTV89aLTfHW22inWefATRmtqe64iHZ4bivBTkDbxt6X/St1yH0aZB+4XtBDZjzcKQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -856,36 +607,16 @@ }, "@babel/plugin-transform-template-literals": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.42.tgz", "integrity": "sha512-sCQmaa8fd3uPdy/J/qOkvPtxo3RtiH6SyW5bzdnUSOQ3+ND3Bj4OfJNziZxJwZZ8Y40lHrM0dKxZ8YnihlCETQ==", "requires": { "@babel/helper-annotate-as-pure": "7.0.0-beta.42", "@babel/helper-plugin-utils": "7.0.0-beta.42" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz", - "integrity": "sha512-2lmcB7mHRSXZjDV9fdnWGRco+5fbI0PdUtsL7mNA2GtJs0GPoKdV3sCx0N4cpzG2YRR4dNCiB2riYIrzWjmQ1Q==", - "requires": { - "@babel/types": "7.0.0-beta.42" - } - }, - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/plugin-transform-typeof-symbol": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.42.tgz", "integrity": "sha512-cuDOzCv7kpMqaLypTEN90ErVmKUV3vjTuO8qzCGlmJMZwCcteTpxCiwISJLnAxcGtj++fMVY0vntbcj4nXf9XQ==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42" @@ -893,7 +624,7 @@ }, "@babel/plugin-transform-unicode-regex": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.42.tgz", "integrity": "sha512-iqQ8bhkRPZE2Vl5gR7GF0x4xUVlkncMxr7ve7Rjp/TMzNbO3S2XLr+1SPu+B+U3fIPDDA4I97enw5YL5V7QFOA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -903,7 +634,7 @@ }, "@babel/preset-env": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/preset-env/-/preset-env-7.0.0-beta.42.tgz", "integrity": "sha512-DawmnYYDbOpMqq0H64iwtZJ7C1xjdwqJXBvAjRKv9WVnKPqZbMMli4JhwO30WnPELzOMGRwtLFAchPcEeyyCpQ==", "requires": { "@babel/helper-module-imports": "7.0.0-beta.42", @@ -949,7 +680,7 @@ }, "@babel/preset-react": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0-beta.42.tgz", "integrity": "sha512-2o+5MXAzGMnjlZlxsYv08Joh+T4IDd2NIrpeVB+5GgeboU6k0964pObdZxMjB9A2dOweLSCOHwP21JwO6bDUbA==", "requires": { "@babel/helper-plugin-utils": "7.0.0-beta.42", @@ -962,7 +693,7 @@ }, "@babel/runtime": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0-beta.42.tgz", "integrity": "sha512-iOGRzUoONLOtmCvjUsZv3mZzgCT6ljHQY5fr1qG1QIiJQwtM7zbPWGGpa3QWETq+UqwWyJnoi5XZDZRwZDFciQ==", "requires": { "core-js": "^2.5.3", @@ -971,30 +702,18 @@ }, "@babel/template": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.42.tgz", "integrity": "sha512-EK7YdTe47j4VxlwNvz5bnlk5Jx/wWublnqfgOY2IuSNdxCQgXrLD34PfTnabGxywNSkJkcSo6jwr2JGT+S48dA==", "requires": { "@babel/code-frame": "7.0.0-beta.42", "@babel/types": "7.0.0-beta.42", "babylon": "7.0.0-beta.42", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/traverse": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.42.tgz", "integrity": "sha512-DZwMuZBfYVIn/cxpXZzHDgKmarW/MWqplLv1k7QJYhK5r5l6GAac/DkKl75A0CjPYrD3VGco6H6ZQp12QaYKSw==", "requires": { "@babel/code-frame": "7.0.0-beta.42", @@ -1007,27 +726,15 @@ "globals": "^11.1.0", "invariant": "^2.2.0", "lodash": "^4.2.0" - }, - "dependencies": { - "@babel/types": { - "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", - "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^2.0.0" - } - } } }, "@babel/types": { - "version": "7.0.0-beta.47", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.47.tgz", - "integrity": "sha512-MOP5pOosg7JETrVGg8OQyzmUmbyoSopT5j2HlblHsto89mPz3cmxzn1IA4UNUmnWKgeticSwfhS+Gdy25IIlBQ==", + "version": "7.0.0-beta.42", + "resolved": "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.42.tgz", + "integrity": "sha512-+pmpISmTHQqMMpHHtDLxcvtRhmn53bAxy8goJfHipS/uy/r3PLcuSdPizLW7DhtBWbtgIKZufLObfnIMoyMNsw==", "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.5", + "lodash": "^4.2.0", "to-fast-properties": "^2.0.0" } }, @@ -1039,45 +746,58 @@ }, "@types/graphql": { "version": "0.12.6", - "resolved": "https://registry.npmjs.org/@types/graphql/-/graphql-0.12.6.tgz", + "resolved": "http://registry.npmjs.org/@types/graphql/-/graphql-0.12.6.tgz", "integrity": "sha512-wXAVyLfkG1UMkKOdMijVWFky39+OD/41KftzqfX1Oejd0Gm6dOIKjCihSVECg6X7PHjftxXmfOKA/d1H79ZfvQ==" }, "@types/next": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@types/next/-/next-2.4.11.tgz", - "integrity": "sha512-+CvydrdSxS8QCFL1SnkilS6z3sNvDrTny/jHNQnH3nrpsKKEwuDf3ygdnA9E58u6nqvwZiAmieGt8fTrTPm3mA==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/next/-/next-6.1.4.tgz", + "integrity": "sha512-F1BjAghnDlDMJ4X96E+Ft63d7EqJgN6IBOvALG26yv0P+gZsRa/M9trsHzfPbEZKXs08QwVTeoQcjI7Cnci5yg==", "requires": { "@types/node": "*", + "@types/node-fetch": "*", "@types/react": "*" } }, "@types/node": { - "version": "9.6.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.18.tgz", - "integrity": "sha512-lywCnJQRSsu0kitHQ5nkb7Ay/ScdJPQjhWRtuf+G1DmNKJnPcdVyP0pYvdiDFKjzReC6NLWLgSyimno3kKfIig==" + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.9.4.tgz", + "integrity": "sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==" + }, + "@types/node-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.1.2.tgz", + "integrity": "sha512-XroxUzLpKuL+CVkQqXlffRkEPi4Gh3Oui/mWyS7ztKiyqVxiU+h3imCW5I2NQmde5jK+3q++36/Q96cyRWsweg==", + "requires": { + "@types/node": "*" + } }, "@types/prop-types": { - "version": "15.5.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.3.tgz", - "integrity": "sha512-sfjHrNF4zWRv3fJUGyZW46wVxhYJ/GeWIPdKxbnLIhY3bWR0Ncl2kIhZI7rpjY9KtUQAkDP8jWEmaGQGFFvruA==" + "version": "15.5.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.5.5.tgz", + "integrity": "sha512-mOrlCEdwX3seT3n0AXNt4KNPAZZxcsABUHwBgFXOt+nvFUXkxCAO6UBJHPrDxWEa2KDMil86355fjo8jbZ+K0Q==", + "requires": { + "@types/react": "*" + } }, "@types/react": { - "version": "16.3.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.3.14.tgz", - "integrity": "sha512-wNUGm49fPl7eE2fnYdF0v5vSOrUMdKMQD/4NwtQRnb6mnPwtkhabmuFz37eq90+hhyfz0pWd38jkZHOcaZ6LGw==", + "version": "16.4.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.4.14.tgz", + "integrity": "sha512-Gh8irag2dbZ2K6vPn+S8+LNrULuG3zlCgJjVUrvuiUK7waw9d9CFk2A/tZFyGhcMDUyO7tznbx1ZasqlAGjHxA==", "requires": { + "@types/prop-types": "*", "csstype": "^2.2.0" } }, "@types/zen-observable": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.5.3.tgz", - "integrity": "sha512-aDvGDAHcVfUqNmd8q4//cHAP+HGxsbChbBbuk3+kMVk5TTxfWLpQWvVN3+UPjohLnwMYN7jr6BWNn2cYNqdm7g==" + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.0.tgz", + "integrity": "sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==" }, "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", "dev": true }, "abbrev": { @@ -1086,9 +806,9 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -1115,14 +835,14 @@ } }, "ajv": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.0.tgz", - "integrity": "sha512-VDUX1oSajablmiyFyED9L1DFndg0P9h7p1F+NO8FkIzei6EPrR6Zu1n18rd5P8PqaSRd/FrWv3G1TVBqpM83gA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^4.2.1" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -1140,12 +860,6 @@ "repeat-string": "^1.5.2" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -1443,12 +1157,13 @@ } }, "apollo-boost": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.1.6.tgz", - "integrity": "sha512-z29fxgaNV7HLCcjgS7MgqPKdMc9is1pf4gaVk2ma9JvMZEwq7d5mAc1sBSq+u6de/oUdElES6f1wc1v1HruU+A==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.1.15.tgz", + "integrity": "sha512-cKKr//5MERno1+ZdPcppGwLVMoRWyvoiTe1YC/kJqfciHgBGIb89w9EjAPnUfyvXpmpNhAk4WWb52FcMETRrcA==", "requires": { - "apollo-cache-inmemory": "^1.2.1", - "apollo-client": "^2.3.1", + "apollo-cache": "^1.1.16", + "apollo-cache-inmemory": "^1.2.9", + "apollo-client": "^2.4.1", "apollo-link": "^1.0.6", "apollo-link-error": "^1.0.3", "apollo-link-http": "^1.3.1", @@ -1457,34 +1172,34 @@ } }, "apollo-cache": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.8.tgz", - "integrity": "sha512-w2dzVVxosPK+9HQUBJ/P0fQMdAslWr/a1NHPubtN/Guwe93/k56IV0jDcJedMxXWzICuuI/gjZSYNAdb91WNWw==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/apollo-cache/-/apollo-cache-1.1.16.tgz", + "integrity": "sha512-gVWKYyXF0SlpMyZ/i//AthzyPjjmAVYciEjwepLqMzIf0+7bzIwekpHDuzME8jf4XQepXcNNY571+BRyYHysmg==", "requires": { - "apollo-utilities": "^1.0.12" + "apollo-utilities": "^1.0.20" } }, "apollo-cache-inmemory": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.2.1.tgz", - "integrity": "sha512-WZ5EGmJqellVX+PPmq0QeqeQJiZCjjfmkp3x+MV3DRMwTzT2jeJYQAYGIzJuq8PjG4V0vljVJK/Ad93PHqzgdQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/apollo-cache-inmemory/-/apollo-cache-inmemory-1.2.9.tgz", + "integrity": "sha512-Z4m4NpT2eboM4qUww/46CsjOyITavxrKPBrsCugDlmwSzonqMLZmAyZEQgnYXCj8L5q5epnOuf0sqyYK/6sGIQ==", "requires": { - "apollo-cache": "^1.1.8", - "apollo-utilities": "^1.0.12", - "graphql-anywhere": "^4.1.10" + "apollo-cache": "^1.1.16", + "apollo-utilities": "^1.0.20", + "graphql-anywhere": "^4.1.18" } }, "apollo-client": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.3.1.tgz", - "integrity": "sha512-f+692AEAY0XYUPAO4nuSOIAy7jgqNw94bXuvMvKmFYdMwJLRIr5gOPUXgOwCYwwVo+NqWF6cy20dkZ4gkCWZ+Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/apollo-client/-/apollo-client-2.4.1.tgz", + "integrity": "sha512-E6pQD+BwI1zboM9oX83yzH9BmBjJWU5pL36CpGC2+XaaBDc6UvrPtacxQsg/h7Fq5T5IKJoIhuBEWtefJIb9xg==", "requires": { "@types/async": "2.0.49", - "@types/zen-observable": "^0.5.3", - "apollo-cache": "^1.1.8", + "@types/zen-observable": "^0.8.0", + "apollo-cache": "1.1.16", "apollo-link": "^1.0.0", "apollo-link-dedup": "^1.0.0", - "apollo-utilities": "^1.0.12", + "apollo-utilities": "1.0.20", "symbol-observable": "^1.0.2", "zen-observable": "^0.8.0" } @@ -1508,9 +1223,9 @@ } }, "apollo-link-error": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.0.9.tgz", - "integrity": "sha512-82qgIH0UC039kcvcFDJkY8GuUOgPFrkYe/0zNFkA0AXvuvL4RHxWb8SWRiPwtP8jKaKEOedyjopfyH84aLiu7Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/apollo-link-error/-/apollo-link-error-1.1.0.tgz", + "integrity": "sha512-4Vu/IUn6Kn6+Fthym4iuqypCKcLdwTg3MaCvtLdaLbt9X2hNCq3y8mv6vuWIlAY51X8wKhCgYghQSOs5R/embQ==", "requires": { "apollo-link": "^1.2.2" } @@ -1542,9 +1257,12 @@ } }, "apollo-utilities": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.12.tgz", - "integrity": "sha512-3mSen+NLouRwhmzCSHbMICfLBa6J+QJOc+M8zzLyo10jAYsOK+A2VgR63q4mcQJmAp8LumC5VAyah1zw6enMcg==" + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.0.20.tgz", + "integrity": "sha512-2M4BJCyX/9UXGJFoV4sTnVTZ4Q29aM18Z1avDrwvlCGGwoRTz50sGBAfTiWnUnnNQyPIIJEYElScw46DgIu0Rg==", + "requires": { + "fast-json-stable-stringify": "^2.0.0" + } }, "append-transform": { "version": "0.4.0", @@ -1616,6 +1334,16 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, + "array.prototype.flat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", + "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.10.0", + "function-bind": "^1.1.1" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -1627,10 +1355,13 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } }, "asn1.js": { "version": "4.10.1", @@ -1648,6 +1379,21 @@ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", "requires": { "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } } }, "assert-plus": { @@ -1693,9 +1439,9 @@ "dev": true }, "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sign2": { "version": "0.7.0", @@ -1704,9 +1450,9 @@ "dev": true }, "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, "babel-code-frame": { @@ -1728,7 +1474,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -1739,6 +1485,12 @@ "supports-color": "^2.0.0" } }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -1787,23 +1539,24 @@ } }, "babel-jest": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.0.0.tgz", - "integrity": "sha1-Djg6KqazU14ZfbKSlXCiGCvQhOg=", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-23.6.0.tgz", + "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", "dev": true, "requires": { "babel-plugin-istanbul": "^4.1.6", - "babel-preset-jest": "^23.0.0" + "babel-preset-jest": "^23.2.0" } }, "babel-loader": { - "version": "8.0.0-beta.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.0-beta.2.tgz", - "integrity": "sha512-P1zch1DvQy3RGmp/1CH78uPg5gTPQQ01S9r6ipCOWVamO0UIC8gnrx7m7LsUsXa470yB6IOZxhtEEwIUclRLNw==", + "version": "8.0.0-beta.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.0-beta.3.tgz", + "integrity": "sha512-yvaAx7cBEjh+R2oGL2vIPmveO6daS5TYP2FSPq4b6CUYjU/ilD4HHyfLIa9KUj6OKBcR9fQcl1NvUOTWNaJ6mw==", "requires": { "find-cache-dir": "^1.0.0", "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.1", + "util.promisify": "^1.0.0" } }, "babel-messages": { @@ -1817,7 +1570,7 @@ }, "babel-plugin-istanbul": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz", "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { @@ -1828,9 +1581,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.0.0.tgz", - "integrity": "sha1-5h5oeZ90M5Gh5jBu4nBHeqz5Rsg=", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz", + "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=", "dev": true }, "babel-plugin-module-resolver": { @@ -1852,23 +1605,21 @@ "integrity": "sha1-Lk57RJa5OmVKHIAEInbeTk7rIOM=" }, "babel-plugin-styled-components": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.5.1.tgz", - "integrity": "sha1-MdvraW0TVNFYXmDWbHkF9eR0r80=", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.6.4.tgz", + "integrity": "sha512-WRbUn/3aDlyE0+pQ4k9oaXoCytZxSuAW1zieNUKFMO+g89giwv1soV3TsK9RgeBIZ1mmtNEPwwUuQwIlowUhxg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0-beta.37", - "babel-types": "^6.26.0", - "stylis": "^3.0.0" + "lodash": "^4.17.10" } }, "babel-plugin-syntax-jsx": { "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", "dev": true }, @@ -1878,12 +1629,12 @@ "integrity": "sha1-Mxz8BQmagII4MR14MZwnRg1IEYk=" }, "babel-preset-jest": { - "version": "23.0.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.0.0.tgz", - "integrity": "sha1-Sd4DA/G2h13K1hY+qn64Mw1Ugk0=", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz", + "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^23.0.0", + "babel-plugin-jest-hoist": "^23.2.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, @@ -1943,15 +1694,6 @@ "requires": { "ms": "2.0.0" } - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } } } }, @@ -2045,7 +1787,7 @@ }, "babylon": { "version": "7.0.0-beta.42", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", + "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.42.tgz", "integrity": "sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw==" }, "balanced-match": { @@ -2119,9 +1861,9 @@ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "optional": true, "requires": { @@ -2139,9 +1881,9 @@ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" }, "bn.js": { "version": "4.11.8", @@ -2151,8 +1893,7 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "brace-expansion": { "version": "1.1.11", @@ -2185,9 +1926,9 @@ "dev": true }, "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", "dev": true, "requires": { "resolve": "1.1.7" @@ -2225,13 +1966,14 @@ } }, "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -2285,7 +2027,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { "base64-js": "^1.0.2", @@ -2294,9 +2036,9 @@ } }, "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-xor": { "version": "1.0.3", @@ -2368,9 +2110,9 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, "caniuse-lite": { - "version": "1.0.30000844", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000844.tgz", - "integrity": "sha512-UpKQE7y6dLHhlv75UyBCRiun34Q+bmxyX3zS+ve9M07YG52tRafOvop9N9d5jC+sikKuG7UMweJKJNts4FVehA==" + "version": "1.0.30000885", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", + "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==" }, "capture-exit": { "version": "1.2.0", @@ -2425,7 +2167,6 @@ "version": "1.0.0-rc.2", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, "requires": { "css-select": "~1.2.0", "dom-serializer": "~0.1.0", @@ -2436,22 +2177,23 @@ } }, "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.0", "braces": "^2.3.0", - "fsevents": "^1.1.2", + "fsevents": "^1.2.2", "glob-parent": "^3.1.0", "inherits": "^2.0.1", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", "normalize-path": "^2.1.1", "path-is-absolute": "^1.0.0", "readdirp": "^2.0.0", - "upath": "^1.0.0" + "upath": "^1.0.5" }, "dependencies": { "array-unique": { @@ -2548,9 +2290,9 @@ "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.5.1.tgz", + "integrity": "sha512-fKFIKXaYiL1exImwJ0AhR/6jxFPSKQBk2ayV5NiNoruUs2+rxC2kNw0EG+1Z9dugZRdCrppskQ8DN2cyaUM1Hw==", "dev": true }, "cipher-base": { @@ -2618,11 +2360,11 @@ } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -2633,8 +2375,7 @@ "colors": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", - "dev": true + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" }, "combined-stream": { "version": "1.0.6", @@ -2655,17 +2396,16 @@ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" }, - "compare-versions": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.2.1.tgz", - "integrity": "sha512-2y2nHcopMG/NAyk6vWXlLs86XeM9sik4jmx1tKIgzMi9/RQ2eo758RGpxQO3ErihHmg0RlQITPqgz73y6s7quA==", - "dev": true - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, + "compute-scroll-into-view": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.8.tgz", + "integrity": "sha512-iAUjocygqXSGQb3zUHvAHwcf3BiMihlnphNSKCAqS6v9wNHlFe7260zNqoFjS/YBKJjbbvrXwY6/Wdg5mJ91Lw==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2696,9 +2436,12 @@ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" }, "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "requires": { + "safe-buffer": "~5.1.1" + } }, "copy-concurrently": { "version": "1.0.5", @@ -2719,9 +2462,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" }, "core-util-is": { "version": "1.0.2", @@ -2799,7 +2542,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, "requires": { "boolbase": "~1.0.0", "css-what": "2.1", @@ -2808,9 +2550,9 @@ } }, "css-to-react-native": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.2.0.tgz", - "integrity": "sha512-SWG8+tsVRBHpxn1cSDmx7B95DJCiKwUecBbboGpm2znDCnJDMGkcoYR73w1p2IZMab6iNqVms8VC+4TrSqoFeQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.2.1.tgz", + "integrity": "sha512-v++LRcf633phJiYZBDqtmGPj3+BVof0isd2jgwYLWZJ5YSuhCkrfYtDsNhM6oJthiEco0f9tDVJ1vUkDJNgGEA==", "requires": { "css-color-keywords": "^1.0.0", "fbjs": "^0.8.5", @@ -2820,28 +2562,27 @@ "css-what": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" }, "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", "dev": true }, "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", + "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", "dev": true, "requires": { "cssom": "0.3.x" } }, "csstype": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.2.tgz", - "integrity": "sha512-epoHrKPywwUhFTXadQNA5PPx4GChtkM03SkBeFZTaFtJcn6QfXpBkX2IAc4J9Oe18nha5NrTOo2OMOge+qH1mw==" + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.6.tgz", + "integrity": "sha512-tKPyhy0FmfYD2KQYXD5GzkvAYLYj96cMLXr648CKGd3wBe0QqoPipImjGiLze9c8leJK8J3n7ap90tpk3E6HGQ==" }, "cyclist": { "version": "0.2.2", @@ -2866,20 +2607,33 @@ } }, "data-urls": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.0.tgz", - "integrity": "sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz", + "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==", "dev": true, "requires": { - "abab": "^1.0.4", - "whatwg-mimetype": "^2.0.0", - "whatwg-url": "^6.4.0" + "abab": "^2.0.0", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } } }, "date-fns": { - "version": "2.0.0-alpha.8", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.8.tgz", - "integrity": "sha1-pivXao844BlLKQMkXpy5Yrm75iQ=" + "version": "2.0.0-alpha.16", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.0.0-alpha.16.tgz", + "integrity": "sha1-0kmmybeZJSZS+54/JUYOr53oasc=" }, "date-now": { "version": "0.1.4", @@ -2905,9 +2659,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.3", @@ -2936,12 +2690,11 @@ } }, "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "object-keys": "^1.0.12" } }, "define-property": { @@ -3069,8 +2822,7 @@ "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" }, "dom-helpers": { "version": "3.3.1", @@ -3081,7 +2833,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, "requires": { "domelementtype": "~1.1.1", "entities": "~1.1.1" @@ -3090,16 +2841,10 @@ "domelementtype": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" } } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -3108,8 +2853,7 @@ "domelementtype": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" }, "domexception": { "version": "1.0.1", @@ -3124,7 +2868,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, "requires": { "domelementtype": "1" } @@ -3133,16 +2876,19 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" } }, "downshift": { - "version": "1.31.14", - "resolved": "https://registry.npmjs.org/downshift/-/downshift-1.31.14.tgz", - "integrity": "sha512-KguEqOCAykRVkBG8kB1YMOf4RWolupoUMW3cv6VLVBQw+yOB1BrROX4MbUoCqDaj9vBZS7DNqz7VBqfM4x3dsg==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-2.2.2.tgz", + "integrity": "sha512-vdt1AYiiD490PcPyscuX5Cqgv26jFiKD2fcjXdqoDgvbnKn4/Z48ccUmXIcGagzwEfYRrk3CxTuciIDG6+addA==", + "requires": { + "compute-scroll-into-view": "^1.0.2", + "prop-types": "^15.6.0" + } }, "duplexify": { "version": "3.6.0", @@ -3156,13 +2902,14 @@ } }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -3171,14 +2918,14 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", - "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=" + "version": "1.3.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.65.tgz", + "integrity": "sha512-tyGr+wh2c/JYBVMeflKpZ3ricwtBPyVBMtRNxYGObl7TP5bAeupgz4VZnBzQSFleZViXYTws1yZtKKFQYZyiYw==" }, "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { "bn.js": "^4.4.0", "brorand": "^1.0.1", @@ -3234,57 +2981,56 @@ "entities": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" }, "enzyme": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.3.0.tgz", - "integrity": "sha512-l8csyPyLmtxskTz6pX9W8eDOyH1ckEtDttXk/vlFWCjv00SkjTjtoUrogqp4yEvMyneU9dUJoOLnqFoiHb8IHA==", - "dev": true, + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.6.0.tgz", + "integrity": "sha512-onsINzVLGqKIapTVfWkkw6bYvm1o4CyJ9s8POExtQhAkVa4qFDW6DGCQGRy/5bfZYk+gmUbMNyayXiWDzTkHFQ==", "requires": { + "array.prototype.flat": "^1.2.1", "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.0.3", - "has": "^1.0.1", + "function.prototype.name": "^1.1.0", + "has": "^1.0.3", "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.3", + "is-callable": "^1.1.4", "is-number-object": "^1.0.3", "is-string": "^1.0.4", "is-subset": "^0.1.1", - "lodash": "^4.17.4", - "object-inspect": "^1.5.0", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.6.0", "object-is": "^1.0.1", "object.assign": "^4.1.0", "object.entries": "^1.0.4", "object.values": "^1.0.4", "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3" + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.1.2" } }, "enzyme-adapter-react-16": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.1.1.tgz", - "integrity": "sha512-kC8pAtU2Jk3OJ0EG8Y2813dg9Ol0TXi7UNxHzHiWs30Jo/hj7alc//G1YpKUsPP1oKl9X+Lkx+WlGJpPYA+nvw==", - "dev": true, + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.5.0.tgz", + "integrity": "sha512-R2LcVvMB2UwPH763d5jDtVedAIcEj+uZjOnq0nd1sOUs6z8TDbyHDvt8VwfrS4wMt7CawoyPmH0XzC8MtEqqDw==", "requires": { - "enzyme-adapter-utils": "^1.3.0", - "lodash": "^4.17.4", - "object.assign": "^4.0.4", + "enzyme-adapter-utils": "^1.8.0", + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", "object.values": "^1.0.4", - "prop-types": "^15.6.0", - "react-reconciler": "^0.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.4.2", "react-test-renderer": "^16.0.0-0" } }, "enzyme-adapter-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz", - "integrity": "sha512-vVXSt6uDv230DIv+ebCG66T1Pm36Kv+m74L1TrF4kaE7e1V7Q/LcxO0QRkajk5cA6R3uu9wJf5h13wOTezTbjA==", - "dev": true, + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.8.0.tgz", + "integrity": "sha512-K9U2RGr1pvWPGEAIRQRVH4UdlqzpfLsKonuHyAK6lxu46yfGsMDVlO3+YvQwQpVjVw8eviEVIOmlFAnMbIhv/w==", "requires": { - "lodash": "^4.17.4", - "object.assign": "^4.0.4", - "prop-types": "^15.6.0" + "function.prototype.name": "^1.1.0", + "object.assign": "^4.1.0", + "prop-types": "^15.6.2" } }, "enzyme-to-json": { @@ -3305,26 +3051,25 @@ } }, "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" } }, "error-stack-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.1.tgz", - "integrity": "sha1-oyArj7AxFKqbQKDjZp5IsrZaAQo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", "requires": { - "stackframe": "^1.0.3" + "stackframe": "^1.0.4" } }, "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", - "dev": true, + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", @@ -3337,7 +3082,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, "requires": { "is-callable": "^1.1.1", "is-date-object": "^1.0.1", @@ -3345,9 +3089,9 @@ } }, "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", "requires": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.1", @@ -3420,9 +3164,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -3459,9 +3203,9 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esrecurse": { @@ -3516,12 +3260,12 @@ } }, "exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.2.tgz", + "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", "dev": true, "requires": { - "merge": "^1.1.3" + "merge": "^1.2.0" } }, "execa": { @@ -3561,23 +3305,23 @@ } }, "expect": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", - "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-23.6.0.tgz", + "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", "dev": true, "requires": { "ansi-styles": "^3.2.0", - "jest-diff": "^22.4.3", - "jest-get-type": "^22.4.3", - "jest-matcher-utils": "^22.4.3", - "jest-message-util": "^22.4.3", - "jest-regex-util": "^22.4.3" + "jest-diff": "^23.6.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -3626,7 +3370,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fb-watchman": { "version": "2.0.0", @@ -3638,9 +3383,9 @@ } }, "fbjs": { - "version": "0.8.16", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", - "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", "requires": { "core-js": "^1.0.0", "isomorphic-fetch": "^2.1.1", @@ -3648,7 +3393,7 @@ "object-assign": "^4.1.0", "promise": "^7.1.1", "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.9" + "ua-parser-js": "^0.7.18" }, "dependencies": { "core-js": { @@ -3740,11 +3485,6 @@ "for-in": "^1.0.1" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "foreachasync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", @@ -3797,7 +3537,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -4310,7 +4050,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -4318,9 +4057,9 @@ } }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-stream": { "version": "3.0.0", @@ -4371,19 +4110,10 @@ "is-glob": "^2.0.0" } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "^2.19.0", - "process": "~0.5.1" - } - }, "globals": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", - "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==" + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==" }, "globby": { "version": "6.1.0", @@ -4410,19 +4140,19 @@ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" }, "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.0.2.tgz", + "integrity": "sha512-gUC4YYsaiSJT1h40krG3J+USGlwhzNTXSb4IOZljn9ag5Tj+RkoXrWp+Kh7WyE3t1NCfab5kzCuxBIvOMERMXw==", "requires": { - "iterall": "^1.2.1" + "iterall": "^1.2.2" } }, "graphql-anywhere": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.10.tgz", - "integrity": "sha512-ab1O4mOkjlk+17ye5a7DxUuWafKP8aoH+xmc6SsPNZlrQ7spbArqyLIf2JdbwpzsVLXOyRvQpD6tcc0GtnxBfw==", + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/graphql-anywhere/-/graphql-anywhere-4.1.18.tgz", + "integrity": "sha512-n0jsAEpGpQxsF0RDaxSjtEQdIP3tx2C3q++QuHYFyUl+4Npl5t64zFjWwO3ZhotxmTgs8zaSbZPVFpydn6k0dQ==", "requires": { - "apollo-utilities": "^1.0.12" + "apollo-utilities": "^1.0.20" } }, "graphql-tag": { @@ -4431,29 +4161,16 @@ "integrity": "sha512-qnNmof9pAqj/LUzs3lStP0Gw1qhdVCUS7Ab7+SUB6KD5aX1uqxWQRwMnOGTkhKuLvLNIs1TvNz+iS9kUGl1MhA==" }, "graphql-tools": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.0.2.tgz", - "integrity": "sha512-bhDGrvmSgcJBFX3EZEYagmKPk/EJ9vZIcF1WtSFveWfvSsh7crMFSQ9ldftuIXC9UeRwfutpGf3A1q4UpVLaRg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-3.1.1.tgz", + "integrity": "sha512-yHvPkweUB0+Q/GWH5wIG60bpt8CTwBklCSzQdEHmRUgAdEQKxw+9B7zB3dG7wB3Ym7M7lfrS4Ej+jtDZfA2UXg==", "dev": true, "requires": { - "apollo-link": "1.2.1", + "apollo-link": "^1.2.2", "apollo-utilities": "^1.0.1", "deprecated-decorator": "^0.1.6", "iterall": "^1.1.3", "uuid": "^3.1.0" - }, - "dependencies": { - "apollo-link": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.1.tgz", - "integrity": "sha512-6Ghf+j3cQLCIvjXd2dJrLw+16HZbWbwmB1qlTc41BviB2hv+rK1nJr17Y9dWK0UD4p3i9Hfddx3tthpMKrueHg==", - "dev": true, - "requires": { - "@types/node": "^9.4.6", - "apollo-utilities": "^1.0.0", - "zen-observable-ts": "^0.8.6" - } - } } }, "growly": { @@ -4463,64 +4180,39 @@ "dev": true }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "dev": true, "requires": { - "async": "^1.4.0", + "async": "^2.5.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true, + "optional": true }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "commander": "~2.17.1", + "source-map": "~0.6.1" } } } @@ -4532,12 +4224,12 @@ "dev": true }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "dev": true, "requires": { - "ajv": "^5.1.0", + "ajv": "^5.3.0", "har-schema": "^2.0.0" }, "dependencies": { @@ -4558,15 +4250,21 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true } } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "^1.0.2" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4651,12 +4349,12 @@ } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.1" } }, "hmac-drbg": { @@ -4670,9 +4368,9 @@ } }, "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha512-6Bl6XsDT1ntE0lHbIhr4Kp2PGcleGZ66qu5Jqk8lc0Xc/IeG6gVLmwUGs/K0Us+L8VWoKgj0uWdPMataOsm31w==" + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", + "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, "home-or-tmp": { "version": "2.0.0", @@ -4685,9 +4383,9 @@ } }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" }, "html-encoding-sniffer": { "version": "1.0.2", @@ -4712,7 +4410,6 @@ "version": "3.9.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", - "dev": true, "requires": { "domelementtype": "^1.3.0", "domhandler": "^2.3.0", @@ -4755,17 +4452,17 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, "iferr": { "version": "0.1.5", @@ -4853,8 +4550,7 @@ "is-boolean-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", - "dev": true + "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=" }, "is-buffer": { "version": "1.1.6", @@ -4870,18 +4566,17 @@ } }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^1.0.0" + "ci-info": "^1.5.0" } }, "is-data-descriptor": { @@ -4895,8 +4590,7 @@ "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" }, "is-descriptor": { "version": "0.1.6", @@ -4980,23 +4674,7 @@ "is-number-object": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" - } - } + "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=" }, "is-path-cwd": { "version": "1.0.0", @@ -5048,7 +4726,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } @@ -5061,20 +4738,17 @@ "is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true + "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=" }, "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=" }, "is-symbol": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" }, "is-typedarray": { "version": "1.0.0", @@ -5121,12 +4795,24 @@ } }, "isomorphic-unfetch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-2.0.0.tgz", - "integrity": "sha1-9QFApMFj11grXzfxWRloxPgJpkU=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-2.1.1.tgz", + "integrity": "sha512-nd8AULy4i2rA8dv0nOBT9xieIegd3xi7NDxTQ9+iNXDTyaG6VbUYW3F+TdMRqxqXhDFWM2k7fttKx9W2Wd8JpQ==", "requires": { - "node-fetch": "^1.7.1", - "unfetch": "^3.0.0" + "node-fetch": "^2.1.2", + "unfetch": "^3.1.0" + }, + "dependencies": { + "node-fetch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.2.0.tgz", + "integrity": "sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==" + }, + "unfetch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-3.1.1.tgz", + "integrity": "sha512-syDl3htvM56w0HC0PTVA5jEEknOCJ3dWgWGDuaEtQUno8ORDCfZQbm12RzfWO3AC3YhWDoP61dlgmo8Z05Y97g==" + } } }, "isstream": { @@ -5136,59 +4822,43 @@ "dev": true }, "istanbul-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", - "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", "dev": true, "requires": { "async": "^2.1.4", - "compare-versions": "^3.1.0", "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", "js-yaml": "^3.7.0", "mkdirp": "^0.5.1", "once": "^1.4.0" - }, - "dependencies": { - "istanbul-lib-source-maps": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", - "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - } } }, "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, "istanbul-lib-hook": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", - "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", "dev": true, "requires": { "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { "babel-generator": "^6.18.0", @@ -5196,7 +4866,7 @@ "babel-traverse": "^6.18.0", "babel-types": "^6.18.0", "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-coverage": "^1.2.1", "semver": "^5.3.0" }, "dependencies": { @@ -5209,12 +4879,12 @@ } }, "istanbul-lib-report": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", - "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-coverage": "^1.2.1", "mkdirp": "^0.5.1", "path-parse": "^1.0.5", "supports-color": "^3.1.2" @@ -5238,22 +4908,22 @@ } }, "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", "dev": true, "requires": { "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", + "istanbul-lib-coverage": "^1.2.1", "mkdirp": "^0.5.1", "rimraf": "^2.6.1", "source-map": "^0.5.3" } }, "istanbul-reports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", - "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", "dev": true, "requires": { "handlebars": "^4.0.3" @@ -5265,13 +4935,13 @@ "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" }, "jest": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest/-/jest-22.4.4.tgz", - "integrity": "sha512-eBhhW8OS/UuX3HxgzNBSVEVhSuRDh39Z1kdYkQVWna+scpgsrD7vSeBI7tmEvsguPDMnfJodW28YBnhv/BzSew==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-23.6.0.tgz", + "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", "dev": true, "requires": { "import-local": "^1.0.0", - "jest-cli": "^22.4.4" + "jest-cli": "^23.6.0" }, "dependencies": { "ansi-regex": { @@ -5298,9 +4968,9 @@ } }, "jest-cli": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-22.4.4.tgz", - "integrity": "sha512-I9dsgkeyjVEEZj9wrGrqlH+8OlNob9Iptyl+6L5+ToOLJmHm4JwOPatin1b2Bzp5R5YRQJ+oiedx7o1H7wJzhA==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", + "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -5310,33 +4980,35 @@ "graceful-fs": "^4.1.11", "import-local": "^1.0.0", "is-ci": "^1.0.10", - "istanbul-api": "^1.1.14", - "istanbul-lib-coverage": "^1.1.1", - "istanbul-lib-instrument": "^1.8.0", - "istanbul-lib-source-maps": "^1.2.1", - "jest-changed-files": "^22.2.0", - "jest-config": "^22.4.4", - "jest-environment-jsdom": "^22.4.1", + "istanbul-api": "^1.3.1", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-source-maps": "^1.2.4", + "jest-changed-files": "^23.4.2", + "jest-config": "^23.6.0", + "jest-environment-jsdom": "^23.4.0", "jest-get-type": "^22.1.0", - "jest-haste-map": "^22.4.2", - "jest-message-util": "^22.4.0", - "jest-regex-util": "^22.1.0", - "jest-resolve-dependencies": "^22.1.0", - "jest-runner": "^22.4.4", - "jest-runtime": "^22.4.4", - "jest-snapshot": "^22.4.0", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.4", - "jest-worker": "^22.2.2", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve-dependencies": "^23.6.0", + "jest-runner": "^23.6.0", + "jest-runtime": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "jest-watcher": "^23.4.0", + "jest-worker": "^23.2.0", "micromatch": "^2.3.11", "node-notifier": "^5.2.1", + "prompts": "^0.1.9", "realpath-native": "^1.0.0", "rimraf": "^2.5.4", "slash": "^1.0.0", "string-length": "^2.0.0", "strip-ansi": "^4.0.0", "which": "^1.2.12", - "yargs": "^10.0.3" + "yargs": "^11.0.0" } }, "string-length": { @@ -5365,9 +5037,9 @@ "dev": true }, "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "version": "11.1.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { "cliui": "^4.0.0", @@ -5381,13 +5053,13 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" + "yargs-parser": "^9.0.2" } }, "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { "camelcase": "^4.1.0" @@ -5396,73 +5068,130 @@ } }, "jest-changed-files": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-22.4.3.tgz", - "integrity": "sha512-83Dh0w1aSkUNFhy5d2dvqWxi/y6weDwVVLU6vmK0cV9VpRxPzhTeGimbsbRDSnEoszhF937M4sDLLeS7Cu/Tmw==", + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", + "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", "dev": true, "requires": { "throat": "^4.0.0" } }, "jest-config": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.4.tgz", - "integrity": "sha512-9CKfo1GC4zrXSoMLcNeDvQBfgtqGTB1uP8iDIZ97oB26RCUb886KkKWhVcpyxVDOUxbhN+uzcBCeFe7w+Iem4A==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", + "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", "dev": true, "requires": { + "babel-core": "^6.0.0", + "babel-jest": "^23.6.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^22.4.1", - "jest-environment-node": "^22.4.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", "jest-get-type": "^22.1.0", - "jest-jasmine2": "^22.4.4", - "jest-regex-util": "^22.1.0", - "jest-resolve": "^22.4.2", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.4", - "pretty-format": "^22.4.0" + "jest-jasmine2": "^23.6.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "pretty-format": "^23.6.0" + }, + "dependencies": { + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "jest-diff": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", - "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-23.6.0.tgz", + "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", "dev": true, "requires": { "chalk": "^2.0.1", "diff": "^3.2.0", - "jest-get-type": "^22.4.3", - "pretty-format": "^22.4.3" + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, "jest-docblock": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-22.4.3.tgz", - "integrity": "sha512-uPKBEAw7YrEMcXueMKZXn/rbMxBiSv48fSqy3uEnmgOlQhSX+lthBqHb1fKWNVmFqAp9E/RsSdBfiV31LbzaOg==", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-23.2.0.tgz", + "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, + "jest-each": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-23.6.0.tgz", + "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "pretty-format": "^23.6.0" + } + }, "jest-environment-jsdom": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", - "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz", + "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", "dev": true, "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3", + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", "jsdom": "^11.5.1" } }, "jest-environment-node": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", - "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-23.4.0.tgz", + "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", "dev": true, "requires": { - "jest-mock": "^22.4.3", - "jest-util": "^22.4.3" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" } }, "jest-get-type": { @@ -5472,63 +5201,65 @@ "dev": true }, "jest-haste-map": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-22.4.3.tgz", - "integrity": "sha512-4Q9fjzuPVwnaqGKDpIsCSoTSnG3cteyk2oNVjBX12HHOaF1oxql+uUiqZb5Ndu7g/vTZfdNwwy4WwYogLh29DQ==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-23.6.0.tgz", + "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", "dev": true, "requires": { "fb-watchman": "^2.0.0", "graceful-fs": "^4.1.11", - "jest-docblock": "^22.4.3", - "jest-serializer": "^22.4.3", - "jest-worker": "^22.4.3", + "invariant": "^2.2.4", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", "micromatch": "^2.3.11", "sane": "^2.0.0" } }, "jest-jasmine2": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz", - "integrity": "sha512-nK3vdUl50MuH7vj/8at7EQVjPGWCi3d5+6aCi7Gxy/XMWdOdbH1qtO/LjKbqD8+8dUAEH+BVVh7HkjpCWC1CSw==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz", + "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", "dev": true, "requires": { + "babel-traverse": "^6.0.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^22.4.0", - "graceful-fs": "^4.1.11", + "expect": "^23.6.0", "is-generator-fn": "^1.0.0", - "jest-diff": "^22.4.0", - "jest-matcher-utils": "^22.4.0", - "jest-message-util": "^22.4.0", - "jest-snapshot": "^22.4.0", - "jest-util": "^22.4.1", - "source-map-support": "^0.5.0" + "jest-diff": "^23.6.0", + "jest-each": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "pretty-format": "^23.6.0" } }, "jest-leak-detector": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz", - "integrity": "sha512-NZpR/Ls7+ndO57LuXROdgCGz2RmUdC541tTImL9bdUtU3WadgFGm0yV+Ok4Fuia/1rLAn5KaJ+i76L6e3zGJYQ==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz", + "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", "dev": true, "requires": { - "pretty-format": "^22.4.3" + "pretty-format": "^23.6.0" } }, "jest-matcher-utils": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", - "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz", + "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-get-type": "^22.4.3", - "pretty-format": "^22.4.3" + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, "jest-message-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", - "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-23.4.0.tgz", + "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", "dev": true, "requires": { "@babel/code-frame": "^7.0.0-beta.35", @@ -5539,81 +5270,104 @@ } }, "jest-mock": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", - "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-23.2.0.tgz", + "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=", "dev": true }, "jest-regex-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", - "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "version": "23.3.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-23.3.0.tgz", + "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=", "dev": true }, "jest-resolve": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", - "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-23.6.0.tgz", + "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", "dev": true, "requires": { - "browser-resolve": "^1.11.2", - "chalk": "^2.0.1" + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" } }, "jest-resolve-dependencies": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz", - "integrity": "sha512-06czCMVToSN8F2U4EvgSB1Bv/56gc7MpCftZ9z9fBgUQM7dzHGCMBsyfVA6dZTx8v0FDcnALf7hupeQxaBCvpA==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz", + "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", "dev": true, "requires": { - "jest-regex-util": "^22.4.3" + "jest-regex-util": "^23.3.0", + "jest-snapshot": "^23.6.0" } }, "jest-runner": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-22.4.4.tgz", - "integrity": "sha512-5S/OpB51igQW9xnkM5Tgd/7ZjiAuIoiJAVtvVTBcEBiXBIFzWM3BAMPBM19FX68gRV0KWyFuGKj0EY3M3aceeQ==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-23.6.0.tgz", + "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", "dev": true, "requires": { "exit": "^0.1.2", - "jest-config": "^22.4.4", - "jest-docblock": "^22.4.0", - "jest-haste-map": "^22.4.2", - "jest-jasmine2": "^22.4.4", - "jest-leak-detector": "^22.4.0", - "jest-message-util": "^22.4.0", - "jest-runtime": "^22.4.4", - "jest-util": "^22.4.1", - "jest-worker": "^22.2.2", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-docblock": "^23.2.0", + "jest-haste-map": "^23.6.0", + "jest-jasmine2": "^23.6.0", + "jest-leak-detector": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.6.0", + "jest-util": "^23.4.0", + "jest-worker": "^23.2.0", + "source-map-support": "^0.5.6", "throat": "^4.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } } }, "jest-runtime": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-22.4.4.tgz", - "integrity": "sha512-WRTj9m///npte1YjuphCYX7GRY/c2YvJImU9t7qOwFcqHr4YMzmX6evP/3Sehz5DKW2Vi8ONYPCFWe36JVXxfw==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-23.6.0.tgz", + "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", "dev": true, "requires": { "babel-core": "^6.0.0", - "babel-jest": "^22.4.4", - "babel-plugin-istanbul": "^4.1.5", + "babel-plugin-istanbul": "^4.1.6", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.11", - "jest-config": "^22.4.4", - "jest-haste-map": "^22.4.2", - "jest-regex-util": "^22.1.0", - "jest-resolve": "^22.4.2", - "jest-util": "^22.4.1", - "jest-validate": "^22.4.4", - "json-stable-stringify": "^1.0.1", + "jest-config": "^23.6.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", "micromatch": "^2.3.11", "realpath-native": "^1.0.0", "slash": "^1.0.0", "strip-bom": "3.0.0", "write-file-atomic": "^2.1.0", - "yargs": "^10.0.3" + "yargs": "^11.0.0" }, "dependencies": { "ansi-regex": { @@ -5649,32 +5403,6 @@ "source-map": "^0.5.7" } }, - "babel-jest": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-22.4.4.tgz", - "integrity": "sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ==", - "dev": true, - "requires": { - "babel-plugin-istanbul": "^4.1.5", - "babel-preset-jest": "^22.4.4" - } - }, - "babel-plugin-jest-hoist": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz", - "integrity": "sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ==", - "dev": true - }, - "babel-preset-jest": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz", - "integrity": "sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^22.4.4", - "babel-plugin-syntax-object-rest-spread": "^6.13.0" - } - }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", @@ -5723,9 +5451,9 @@ "dev": true }, "yargs": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", - "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "version": "11.1.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", "dev": true, "requires": { "cliui": "^4.0.0", @@ -5739,13 +5467,13 @@ "string-width": "^2.0.0", "which-module": "^2.0.0", "y18n": "^3.2.1", - "yargs-parser": "^8.1.0" + "yargs-parser": "^9.0.2" } }, "yargs-parser": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", - "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { "camelcase": "^4.1.0" @@ -5754,23 +5482,27 @@ } }, "jest-serializer": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-22.4.3.tgz", - "integrity": "sha512-uPaUAppx4VUfJ0QDerpNdF43F68eqKWCzzhUlKNDsUPhjOon7ZehR4C809GCqh765FoMRtTVUVnGvIoskkYHiw==", + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-23.0.1.tgz", + "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=", "dev": true }, "jest-snapshot": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", - "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-23.6.0.tgz", + "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", "dev": true, "requires": { + "babel-types": "^6.0.0", "chalk": "^2.0.1", - "jest-diff": "^22.4.3", - "jest-matcher-utils": "^22.4.3", + "jest-diff": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.6.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^22.4.3" + "pretty-format": "^23.6.0", + "semver": "^5.5.0" } }, "jest-transform-graphql": { @@ -5780,17 +5512,18 @@ "dev": true }, "jest-util": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", - "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-23.4.0.tgz", + "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", "dev": true, "requires": { "callsites": "^2.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.11", "is-ci": "^1.0.10", - "jest-message-util": "^22.4.3", + "jest-message-util": "^23.4.0", "mkdirp": "^0.5.1", + "slash": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { @@ -5803,36 +5536,73 @@ } }, "jest-validate": { - "version": "22.4.4", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.4.tgz", - "integrity": "sha512-dmlf4CIZRGvkaVg3fa0uetepcua44DHtktHm6rcoNVtYlpwe6fEJRkMFsaUVcFHLzbuBJ2cPw9Gl9TKfnzMVwg==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-config": "^22.4.4", "jest-get-type": "^22.1.0", "leven": "^2.1.0", - "pretty-format": "^22.4.0" + "pretty-format": "^23.6.0" + } + }, + "jest-watcher": { + "version": "23.4.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-23.4.0.tgz", + "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "string-length": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", + "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", + "dev": true, + "requires": { + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "jest-worker": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-22.4.3.tgz", - "integrity": "sha512-B1ucW4fI8qVAuZmicFxI1R3kr2fNeYJyvIQ1rKcuLYnenFV5K5aMbxFj6J0i00Ju83S8jP2d7Dz14+AvbIHRYQ==", + "version": "23.2.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-23.2.0.tgz", + "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", "dev": true, "requires": { "merge-stream": "^1.0.1" } }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -5847,36 +5617,36 @@ "optional": true }, "jsdom": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.10.0.tgz", - "integrity": "sha512-x5No5FpJgBg3j5aBwA8ka6eGuS5IxbC8FOkmyccKvObtFT0bDMict/LOxINZsZGZSfGdNomLZ/qRV9Bpq/GIBA==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "dev": true, "requires": { - "abab": "^1.0.4", - "acorn": "^5.3.0", + "abab": "^2.0.0", + "acorn": "^5.5.3", "acorn-globals": "^4.1.0", "array-equal": "^1.0.0", "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.2.37 < 0.3.0", + "cssstyle": "^1.0.0", "data-urls": "^1.0.0", - "domexception": "^1.0.0", - "escodegen": "^1.9.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.2.0", - "nwmatcher": "^1.4.3", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", "parse5": "4.0.0", "pn": "^1.1.0", - "request": "^2.83.0", + "request": "^2.87.0", "request-promise-native": "^1.0.5", "sax": "^1.2.4", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.3", + "tough-cookie": "^2.3.4", "w3c-hr-time": "^1.0.1", "webidl-conversions": "^4.0.2", "whatwg-encoding": "^1.0.3", "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.0", - "ws": "^4.0.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", "xml-name-validator": "^3.0.0" }, "dependencies": { @@ -5905,18 +5675,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", @@ -5929,12 +5690,6 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -5960,6 +5715,12 @@ "is-buffer": "^1.1.5" } }, + "kleur": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-2.0.2.tgz", + "integrity": "sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==", + "dev": true + }, "lazy-cache": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", @@ -6047,11 +5808,20 @@ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=" + }, "lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=" + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "lodash.sortby": { "version": "4.7.0", @@ -6065,11 +5835,11 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { @@ -6209,18 +5979,18 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "~1.36.0" } }, "mimic-fn": { @@ -6228,14 +5998,6 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -6256,7 +6018,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mississippi": { @@ -6297,7 +6059,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" @@ -6305,7 +6067,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } @@ -6320,9 +6082,14 @@ } }, "moment": { - "version": "2.22.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", - "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", + "integrity": "sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=" + }, + "moo": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", + "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==" }, "move-concurrently": { "version": "1.0.1", @@ -6343,22 +6110,21 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", "optional": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", @@ -6391,11 +6157,11 @@ "dev": true }, "nearley": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.13.0.tgz", - "integrity": "sha512-ioYYogSaZhFlCpRizQgY3UT3G1qFXmHGY/5ozoFE3dMfiCRAeJfh+IPE3/eh9gCZvqLhPCWb4bLt7Bqzo+1mLQ==", - "dev": true, + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.15.1.tgz", + "integrity": "sha512-8IUY/rUrKz2mIynUGh8k+tul1awMKEjeHHC5G3FHvvyAW6oq4mQfNp2c0BMea+sYZJvYcrrM6GmZVIle/GRXGw==", "requires": { + "moo": "^0.4.3", "nomnom": "~1.6.2", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6", @@ -6403,14 +6169,14 @@ } }, "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz", + "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==" }, "next": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/next/-/next-6.0.3.tgz", - "integrity": "sha1-t1n94uxIZPkhFs7k/NgFqvKFE2w=", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/next/-/next-6.1.2.tgz", + "integrity": "sha512-/l0YNpHlph0l2VthNSzeADKZQJrF2Bq7a3OB0Cl91yeLYn+1y3oV9hQX/H6pj5lORai9fHGjooTwpqCOFfcnxg==", "requires": { "@babel/core": "7.0.0-beta.42", "@babel/plugin-proposal-class-properties": "7.0.0-beta.42", @@ -6424,7 +6190,7 @@ "@babel/template": "7.0.0-beta.42", "ansi-html": "0.0.7", "babel-core": "7.0.0-bridge.0", - "babel-loader": "8.0.0-beta.2", + "babel-loader": "8.0.0-beta.3", "babel-plugin-react-require": "3.0.0", "babel-plugin-transform-react-remove-prop-types": "0.4.13", "case-sensitive-paths-webpack-plugin": "2.1.1", @@ -6436,7 +6202,7 @@ "fresh": "0.5.2", "friendly-errors-webpack-plugin": "1.6.1", "glob": "7.1.2", - "hoist-non-react-statics": "2.5.0", + "hoist-non-react-statics": "2.5.5", "htmlescape": "1.1.1", "http-errors": "1.6.2", "http-status": "1.0.1", @@ -6446,7 +6212,7 @@ "path-to-regexp": "2.1.0", "prop-types": "15.6.0", "prop-types-exact": "1.1.1", - "react-hot-loader": "4.1.3", + "react-lifecycles-compat": "3.0.4", "recursive-copy": "2.0.6", "resolve": "1.5.0", "send": "0.16.1", @@ -6456,7 +6222,7 @@ "touch": "3.1.0", "uglifyjs-webpack-plugin": "1.1.6", "unfetch": "3.0.0", - "update-check": "1.4.0", + "update-check": "1.5.2", "url": "0.11.0", "uuid": "3.1.0", "walk": "2.3.9", @@ -6476,11 +6242,6 @@ "loose-envify": "^1.3.1", "object-assign": "^4.1.1" } - }, - "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" } } }, @@ -6490,21 +6251,36 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" }, "next-with-apollo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/next-with-apollo/-/next-with-apollo-3.0.2.tgz", - "integrity": "sha512-MC3fyk+BdkBAYyQJiLSn/oqj5qKZvBQ7VchpUiNu69RK9FMjSBGSMvWwRuJc5AKfptOWyZmFZ/XcKsi60ExgdQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/next-with-apollo/-/next-with-apollo-3.1.3.tgz", + "integrity": "sha512-F2HiJo/z9wixXITyro0KOE1nzQe6GYc11xq+FoD1c5YOXtbxezUhOOquey7pCVnGvNxfufJOpqj3on75i7lfIQ==", "requires": { - "@types/graphql": "0.12.6", - "@types/next": "^2.4.10", + "@types/graphql": "0.12.7", + "@types/next": "^6.0.4", "@types/prop-types": "^15.5.2", "@types/react": "^16.3.14", - "apollo-client": "^2.3.1", + "apollo-client": "^2.4.1", "graphql": "0.13.2", "isomorphic-unfetch": "^2.0.0", "next": "^6.0.0", - "prop-types": "^15.6.1", - "react-apollo": "^2.1.4", + "prop-types": "^15.6.2", + "react-apollo": "^2.1.9", "react-dom": "^16.3.2" + }, + "dependencies": { + "@types/graphql": { + "version": "0.12.7", + "resolved": "http://registry.npmjs.org/@types/graphql/-/graphql-0.12.7.tgz", + "integrity": "sha512-xuf/9ShwOOlxoV+J5ts4vAoPbL3nmcFU3z/Ad6jrsiB99hB/Wrs2fl3qJga5XJ1euAasMN/FsNPdHMV6+OV5vw==" + }, + "graphql": { + "version": "0.13.2", + "resolved": "http://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", + "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", + "requires": { + "iterall": "^1.2.1" + } + } } }, "node-fetch": { @@ -6552,11 +6328,6 @@ "vm-browserify": "0.0.4" }, "dependencies": { - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -6580,7 +6351,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz", "integrity": "sha1-hKZqJgF0QI/Ft3oY+IjszET7aXE=", - "dev": true, "requires": { "colors": "0.5.x", "underscore": "~1.4.4" @@ -6630,7 +6400,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", - "dev": true, "requires": { "boolbase": "~1.0.0" } @@ -6640,16 +6409,16 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", + "nwsapi": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -6680,19 +6449,17 @@ "object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==" }, "object-is": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", - "dev": true + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=" }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" }, "object-visit": { "version": "1.0.1", @@ -6724,7 +6491,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", @@ -6736,7 +6502,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.5.1" @@ -6770,7 +6535,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", @@ -6806,7 +6570,7 @@ "dependencies": { "minimist": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true } @@ -6867,9 +6631,9 @@ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { "p-try": "^1.0.0" } @@ -6942,7 +6706,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, "requires": { "@types/node": "*" } @@ -6983,9 +6746,9 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-to-regexp": { "version": "2.1.0", @@ -7022,8 +6785,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "3.0.0", @@ -7088,9 +6850,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "pretty-format": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", - "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz", + "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", "dev": true, "requires": { "ansi-regex": "^3.0.0", @@ -7111,9 +6873,9 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" }, "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { "version": "2.0.0", @@ -7133,12 +6895,21 @@ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" }, + "prompts": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-0.1.14.tgz", + "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", + "dev": true, + "requires": { + "kleur": "^2.0.1", + "sisteransi": "^0.1.1" + } + }, "prop-types": { - "version": "15.6.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.3.1", "object-assign": "^4.1.1" } @@ -7162,6 +6933,12 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "dev": true + }, "public-encrypt": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", @@ -7194,9 +6971,9 @@ } }, "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { "version": "6.5.2", @@ -7218,7 +6995,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.0.tgz", "integrity": "sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==", - "dev": true, "requires": { "performance-now": "^2.1.0" } @@ -7226,23 +7002,21 @@ "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" }, "randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, "requires": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -7284,25 +7058,25 @@ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "rc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", - "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" } }, "react": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.3.2.tgz", - "integrity": "sha512-o5GPdkhciQ3cEph6qgvYB7LTOHw/GB0qRI6ZFNugj49qJCFfgHwVNjZ5u+b7nif4vOeMIOuYj3CeYe2IBD74lg==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.5.0.tgz", + "integrity": "sha512-nw/yB/L51kA9PsAy17T1JrzzGRk+BlFCJwFF7p+pwVxgqwPjYNeZEkkH7LXn9dmflolrYMXLWMTkQ77suKPTNQ==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" + "prop-types": "^15.6.2", + "schedule": "^0.3.0" } }, "react-adopt": { @@ -7316,22 +7090,15 @@ } }, "react-apollo": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.1.4.tgz", - "integrity": "sha512-KVDoRdGxUJYOAuWbYmsl4mvJXBvlJFDDDd43V0ey2gxWrNloGK/JVjnET6/PApj142FCcWz42Nvc4oW27f9acA==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.1.11.tgz", + "integrity": "sha512-WRoSOuZiQYgieXTgep4v3YwtVlxRnPHdcLEJBLX5+zq2atLmonvEkuFLJNjhAAOW/mYM8XhbLrbaC5NPrFrn0w==", "requires": { "fbjs": "^0.8.16", "hoist-non-react-statics": "^2.5.0", "invariant": "^2.2.2", - "lodash": "4.17.5", + "lodash": "^4.17.10", "prop-types": "^15.6.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" - } } }, "react-display-name": { @@ -7340,76 +7107,51 @@ "integrity": "sha512-zvU6iouW+SWwHTyThwxGICjJYCMZFk/6r/+jmOdC7ntQoPlS/Pqb81MkxaMf2bHTSq9TN3K3zX2/ayMW/jCtyA==" }, "react-dom": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.3.2.tgz", - "integrity": "sha512-MMPko3zYncNrz/7gG17wJWUREZDvskZHXOwbttzl0F0L3wDmToyuETuo/r8Y5yvDejwYcRyWI1lvVBjLJWFwKA==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.5.0.tgz", + "integrity": "sha512-qgsQdjFH54pQ1AGLCBKsqjPxib4Pnp+cOsNxGPlkHn5YnsSt43sBvHSif6FheY7NMMS6HPeSJOxXf6ECanjacA==", "requires": { - "fbjs": "^0.8.16", "loose-envify": "^1.1.0", "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, - "react-hot-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.1.3.tgz", - "integrity": "sha512-CF3Y/qUfL1PkM6TPrELNsSiHGKJFRnpyLdzsk+HV4IIuQAY2g1aZXQmK4L/O8WOaldoOujxAYfRfpzrWTvmvtg==", - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^2.5.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.2", - "shallowequal": "^1.0.2" + "prop-types": "^15.6.2", + "schedule": "^0.3.0" } }, "react-is": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.3.2.tgz", - "integrity": "sha512-ybEM7YOr4yBgFd6w8dJqwxegqZGJNBZl6U27HnGKuTZmDvVrD5quWOK/wAnMywiZzW+Qsk+l4X2c70+thp/A8Q==" + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.0.tgz", + "integrity": "sha512-kpkCGLsChXTEQJVmowQqHpCjHKJFwB4SIChYaaaiAkq8OtE2aBg5pQe8/xnFlGmz9KmMx1H4oQRUyxP7qC9v5A==" }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "react-reconciler": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.7.0.tgz", - "integrity": "sha512-50JwZ3yNyMS8fchN+jjWEJOH3Oze7UmhxeoJLn2j6f3NjpfCRbcmih83XTWmzqtar/ivd5f7tvQhvvhism2fgg==", - "dev": true, - "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.0" - } - }, "react-stripe-checkout": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/react-stripe-checkout/-/react-stripe-checkout-2.6.3.tgz", "integrity": "sha1-MXOocLBOWjwyGgbSTNU8YDARHEU=" }, "react-test-renderer": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.3.2.tgz", - "integrity": "sha512-lL8WHIpCTMdSe+CRkt0rfMxBkJFyhVrpdQ54BaJRIrXf9aVmbeHbRA8GFRpTvohPN5tPzMabmrzW2PUfWCfWwQ==", - "dev": true, + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.5.0.tgz", + "integrity": "sha512-cuN9BoZ1p6T3oxrjxN7pQDSmgWzAxWBi8gtCHcViMYcw/1xqOIyatt2YFhiCWg7115TPQqkTKEu+F44YjFE4ig==", "requires": { - "fbjs": "^0.8.16", "object-assign": "^4.1.1", - "prop-types": "^15.6.0", - "react-is": "^16.3.2" + "prop-types": "^15.6.2", + "react-is": "^16.5.0", + "schedule": "^0.3.0" } }, "react-transition-group": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.3.1.tgz", - "integrity": "sha512-hu4/LAOFSKjWt1+1hgnOv3ldxmt6lvZGTWz4KUkFrqzXrNDIVSu6txIcPszw7PNduR8en9YTN55JLRyd/L1ZiQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.4.0.tgz", + "integrity": "sha512-Xv5d55NkJUxUzLCImGSanK8Cl/30sgpOEMGc5m86t8+kZwrPxPCPcFqyx83kkr+5Lz5gs6djuvE5By+gce+VjA==", "requires": { "dom-helpers": "^3.3.1", "loose-envify": "^1.3.1", - "prop-types": "^15.6.1" + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" } }, "read-pkg": { @@ -7433,7 +7175,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { "core-util-is": "~1.0.0", @@ -7457,9 +7199,9 @@ } }, "realpath-native": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.0.tgz", - "integrity": "sha512-XJtlRJ9jf0E1H1SLeJyQ9PGzQD7S65h1pRXEcAeK48doKOnKxcgPeNohJvD5u/2sI9J1oke6E8bZHS/fmW1UiQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.0.2.tgz", + "integrity": "sha512-+S3zTvVt9yTntFrBpm7TQmQ3tzpCrnA1a/y+3cUHAc9ZR6aIjG0WNLR+Rj79QpJktY+VeW/TQtFlQ1bzsehI8g==", "dev": true, "requires": { "util.promisify": "^1.0.0" @@ -7522,11 +7264,11 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerate-unicode-properties": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-6.0.0.tgz", - "integrity": "sha512-BvXxRS7RfVWxtm7vrq+0I0j7sqZ1zeSC+yzf5HS0qLnKcZPX541gFEGB39LvGuKHrkyKXrzXug+oC7xkM1Zovw==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz", + "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==", "requires": { - "regenerate": "^1.3.3" + "regenerate": "^1.4.0" } }, "regenerator-runtime": { @@ -7535,9 +7277,9 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "regenerator-transform": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.12.3.tgz", - "integrity": "sha512-y2uxO/6u+tVmtEDIKo+tLCtI0GcbQr0OreosKgCd7HP4VypGjtTrw79DezuwT+W5QX0YWuvpeBOgumrepwM1kA==", + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.12.4.tgz", + "integrity": "sha512-p2I0fY+TbSLD2/VFTFb/ypEHxs3e3AjU0DzttdPqk2bSmDhfSh5E54b86Yc6XhUa5KykK1tgbvZ4Nr82oCJWkQ==", "requires": { "private": "^0.1.6" } @@ -7560,16 +7302,16 @@ } }, "regexpu-core": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.1.5.tgz", - "integrity": "sha512-3xo5pFze1F8oR4F9x3aFbdtdxAxQ9WBX6gXfLgeBt7KpDI0+oDF7WVntnhsPKqobU/GAYc2pmx+y3z0JI1+z3w==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.2.0.tgz", + "integrity": "sha512-Z835VSnJJ46CNBttalHD/dB+Sj2ezmY6Xp38npwU87peK6mqOzOpV8eYktdkLTEkzzD+JsTcxd84ozd8I14+rw==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^6.0.0", + "regenerate-unicode-properties": "^7.0.0", "regjsgen": "^0.4.0", "regjsparser": "^0.3.0", - "unicode-match-property-ecmascript": "^1.0.3", - "unicode-match-property-value-ecmascript": "^1.0.1" + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.0.2" } }, "registry-auth-token": { @@ -7615,9 +7357,9 @@ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" }, "repeat-string": { "version": "1.6.1", @@ -7634,31 +7376,39 @@ } }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "request-promise-core": { @@ -7759,7 +7509,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, "requires": { "lodash.flattendeep": "^4.4.0", "nearley": "^2.7.10" @@ -8105,19 +7854,27 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "schedule": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schedule/-/schedule-0.3.0.tgz", + "integrity": "sha512-20+1KVo517sR7Nt+bYBN8a+bEJDKLPEx7Ohtts1kX05E4/HY53YUNuhfkVNItmWAnBYHcpG9vsd2/CJxG+aPCQ==", + "requires": { + "object-assign": "^4.1.1" + } + }, "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "requires": { "ajv": "^6.1.0", "ajv-keywords": "^3.1.0" } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" }, "send": { "version": "0.16.1", @@ -8209,11 +7966,6 @@ "safe-buffer": "^5.0.1" } }, - "shallowequal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.0.2.tgz", - "integrity": "sha512-zlVXeVUKvo+HEv1e2KQF/csyeMKx2oHvatQ9l6XjCUj3agvC8XGf6R9HvIPDSmp8FNPvx7b5kaEJTRi7CqxtEw==" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -8238,6 +7990,12 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, + "sisteransi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-0.1.1.tgz", + "integrity": "sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -8371,21 +8129,12 @@ } }, "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "source-map": "^0.5.6" } }, "source-map-url": { @@ -8417,9 +8166,9 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==" }, "split-string": { "version": "3.1.0", @@ -8436,9 +8185,9 @@ "dev": true }, "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { "asn1": "~0.2.3", @@ -8448,6 +8197,7 @@ "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" } }, @@ -8510,18 +8260,18 @@ } }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "requires": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" } }, "stream-http": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.2.tgz", - "integrity": "sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "requires": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -8577,6 +8327,16 @@ } } }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.0", + "function-bind": "^1.0.2" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -8609,15 +8369,14 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "styled-components": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.2.6.tgz", - "integrity": "sha1-mebnWnRr3t0pWhfgPdFJMFWhzDs=", + "version": "3.4.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-3.4.6.tgz", + "integrity": "sha512-HiEVVY93oH/PuekPuIE7ownn2wmO708rS8MM1yS20i0TCyFgPs3mbop8fJqKLRtC2/npVn2fO5Je6azaL6T2tg==", "requires": { "buffer": "^5.0.3", "css-to-react-native": "^2.0.3", "fbjs": "^0.8.16", "hoist-non-react-statics": "^2.5.0", - "is-plain-object": "^2.0.1", "prop-types": "^15.5.4", "react-is": "^16.3.1", "stylis": "^3.5.0", @@ -8626,9 +8385,9 @@ }, "dependencies": { "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -8639,6 +8398,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, + "stylis": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.3.tgz", + "integrity": "sha512-TxU0aAscJghF9I3V9q601xcK3Uw1JbXvpsBGj/HULqexKOKlOEzzlIpLFRbKkCK990ccuxfXUqmPbIIo7Fq/cQ==" + }, "stylis-rule-sheet": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", @@ -8656,7 +8420,7 @@ }, "styled-jsx": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-2.2.6.tgz", + "resolved": "http://registry.npmjs.org/styled-jsx/-/styled-jsx-2.2.6.tgz", "integrity": "sha512-lx678TbNf56I7W4JezJqbLdSiTOpuKvixaZTCjHapFbuJQV3b3dByza6u8+cPRtG/PAmBHeA61croO77rp5auw==", "requires": { "babel-plugin-syntax-jsx": "6.18.0", @@ -8668,22 +8432,22 @@ "stylis-rule-sheet": "0.0.8" }, "dependencies": { + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "stylis": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.4.10.tgz", - "integrity": "sha512-J7CXAfeyhjdgvdQMz2yy0gTDccq0nVmatx6IlX1je1kCqdNgk3npGOzX6qprEd2oHVv7IF5HXO08i6XFQs/JRA==" } } }, "stylis": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", - "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==" + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.4.10.tgz", + "integrity": "sha512-J7CXAfeyhjdgvdQMz2yy0gTDccq0nVmatx6IlX1je1kCqdNgk3npGOzX6qprEd2oHVv7IF5HXO08i6XFQs/JRA==" }, "stylis-rule-sheet": { "version": "0.0.8", @@ -8691,9 +8455,9 @@ "integrity": "sha512-UgR/mJxew0tbNFXzkm60G26bkyYAnzf8OqB9pX2okFYxwEUpuxQ6E5lKhHH23Fs4F5aU6axCtNZRaB8ZdVrWvQ==" }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -8715,219 +8479,18 @@ "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, "test-exclude": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", - "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.3.tgz", + "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", "dev": true, "requires": { "arrify": "^1.0.1", - "micromatch": "^3.1.8", + "micromatch": "^2.3.11", "object-assign": "^4.1.0", "read-pkg-up": "^1.0.1", "require-main-filename": "^1.0.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -8938,67 +8501,6 @@ "pinkie-promise": "^2.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -9012,27 +8514,6 @@ "strip-bom": "^2.0.0" } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -9107,9 +8588,9 @@ } }, "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.1.0.tgz", + "integrity": "sha512-lJbq6KsFhZJtN3fPUVje1tq/hHsJOKUUcUj/MGCiQR6qWBDcyi5kxL9J7/RnaEChCn0+L/DUN2WvemDrkk4i3Q==" }, "timers-browserify": { "version": "2.0.10", @@ -9182,11 +8663,12 @@ } }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" }, "dependencies": { @@ -9299,8 +8781,7 @@ "underscore": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=", - "dev": true + "integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ=" }, "unfetch": { "version": "3.0.0", @@ -9308,28 +8789,28 @@ "integrity": "sha1-jR4FE6Ts0OX/LUGmund3Gq6LZII=" }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.3.tgz", - "integrity": "sha512-iG/2t0F2LAU8aZYPkX5gi7ebukHnr3sWFESpb+zPQeeaQwOkfoO6ZW17YX7MdRPNG9pCy+tjzGill+Ah0Em0HA==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" }, "unicode-match-property-ecmascript": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz", - "integrity": "sha512-nFcaBFcr08UQNF15ZgI5ISh3yUnQm7SJRRxwYrL5VYX46pS+6Q7TCTv4zbK+j6/l7rQt0mMiTL2zpmeygny6rA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.2", - "unicode-property-aliases-ecmascript": "^1.0.3" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, "unicode-match-property-value-ecmascript": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz", - "integrity": "sha512-lM8B0FDZQh9yYGgiabRQcyWicB27VLOolSBRIxsO7FeQPtg+79Oe7sC8Mzr8BObDs+G9CeYmC/shHo6OggNEog==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz", + "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz", - "integrity": "sha512-TdDmDOTxEf2ad1g3ZBpM6cqKIb2nJpVlz1Q++casDryKz18tpeMBhSng9hjC1CTQCkOV9Rw2knlSB6iRo7ad1w==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz", + "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==" }, "union-value": { "version": "1.0.0", @@ -9426,18 +8907,18 @@ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==" }, "update-check": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.4.0.tgz", - "integrity": "sha512-KSPgYhsCqS78LnMmJIcsh1BIOaOvSRPDo8x7Qcz0LF5ZsaioDyiVon5o0wqZgzkrU4jgrm5yuu9Ec/B84N6TZg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz", + "integrity": "sha512-1TrmYLuLj/5ZovwUS7fFd1jMH3NnFDN1y1A8dboedIDt7zs/zJMo6TwwlhYKkSeEwzleeiSBV5/3c9ufAQWDaQ==", "requires": { "registry-auth-token": "3.3.2", "registry-url": "3.1.0" } }, "uri-js": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.1.tgz", - "integrity": "sha512-jpKCA3HjsBfSDOEgxRDAxQCNyHfCPSbq57PqCkd3gAyBuPb3IWxw54EHncqESznIdqSetHfw3D7ylThu2Kcc9A==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" } @@ -9464,33 +8945,16 @@ } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } + "inherits": "2.0.3" } }, "util-deprecate": { @@ -9502,22 +8966,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, "requires": { "define-properties": "^1.1.2", "object.getownpropertydescriptors": "^2.0.3" } }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -9654,6 +9116,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", @@ -9674,7 +9141,7 @@ "dependencies": { "yargs": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "requires": { "camelcase": "^1.0.2", @@ -9737,26 +9204,29 @@ } }, "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz", + "integrity": "sha512-vM9KWN6MP2mIHZ86ytcyIv7e8Cj3KTfO2nd2c8PFDqcI4bxFmQp83ibq4wadq7rL9l9sZV6o9B0LTt8ygGAAXg==", "dev": true, "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "0.4.23" }, "dependencies": { "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } } } }, "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" }, "whatwg-mimetype": { "version": "2.1.0", @@ -9765,9 +9235,9 @@ "dev": true }, "whatwg-url": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.1.tgz", - "integrity": "sha512-FwygsxsXx27x6XXuExA/ox3Ktwcbf+OAvrKmLulotDAiO1Q6ixchPFaHYsis2zZBZSJTR0+dR+JVtf7MlbqZjw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -9776,9 +9246,9 @@ } }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } @@ -9808,7 +9278,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { "string-width": "^1.0.1", @@ -9863,7 +9333,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -9889,13 +9359,12 @@ } }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "async-limiter": "~1.0.0" } }, "xml-name-validator": { @@ -9989,9 +9458,9 @@ } }, "zen-observable": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.8.tgz", - "integrity": "sha512-HnhhyNnwTFzS48nihkCZIJGsWGFcYUz+XPDlPK5W84Ifji8SksC6m7sQWOf8zdCGhzQ4tDYuMYGu5B0N1dXTtg==" + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.9.tgz", + "integrity": "sha512-Y9kPzjGvIZ5jchSlqlCpBW3I82zBBL4z+ulXDRVA1NwsKzjt5kwAi+gOYIy0htNkfuehGZZtP5mRXHRV6TjDWw==" }, "zen-observable-ts": { "version": "0.8.9", diff --git a/finished-application/frontend/package.json b/finished-application/frontend/package.json index 2fe111a..4578192 100644 --- a/finished-application/frontend/package.json +++ b/finished-application/frontend/package.json @@ -4,48 +4,48 @@ "description": "Sick Fits! An example React, GraphQL, Next and Apollo", "main": "index.js", "scripts": { - "dev": "next -p 8888", + "dev": "next -p 7777", "build": "next build", "start": "next start", - "test": "NODE_ENV=test jest --watch" + "test": "NODE_ENV=test jest --watch", + "heroku-postbuild": "next build" }, "author": "", "license": "ISC", "dependencies": { - "apollo-boost": "^0.1.6", - "apollo-client": "^2.3.1", + "apollo-boost": "^0.1.15", + "apollo-client": "^2.4.1", "babel-core": "^7.0.0-bridge.0", - "babel-plugin-styled-components": "^1.5.1", + "babel-plugin-styled-components": "^1.6.4", "date-fns": "^2.0.0-alpha.7", - "downshift": "^1.31.14", - "graphql": "^0.13.2", + "downshift": "^2.2.2", + "enzyme": "^3.6.0", + "enzyme-adapter-react-16": "^1.5.0", + "graphql": "^14.0.2", "graphql-tag": "^2.9.2", "lodash.debounce": "^4.0.8", - "next": "^6.0.3", - "next-with-apollo": "^3.0.2", + "next": "^6.1.2", + "next-with-apollo": "^3.1.3", "nprogress": "^0.2.0", - "prop-types": "^15.6.1", - "react": "^16.3.2", + "prop-types": "^15.6.2", + "react": "^16.5.0", "react-adopt": "^0.6.0", - "react-apollo": "^2.1.4", - "react-dom": "^16.3.2", + "react-apollo": "^2.1.11", + "react-dom": "^16.5.0", "react-stripe-checkout": "^2.6.3", - "react-transition-group": "^2.3.1", - "styled-components": "^3.2.6", + "react-transition-group": "^2.4.0", + "styled-components": "^3.4.6", "waait": "^1.0.2" }, "devDependencies": { - "babel-jest": "^23.0.0", + "babel-jest": "^23.6.0", "babel-plugin-module-resolver": "^3.1.1", "casual": "^1.5.19", - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.1.1", "enzyme-to-json": "^3.3.4", - "graphql-tools": "^3.0.2", - "jest": "^22.4.4", + "graphql-tools": "^3.1.1", + "jest": "^23.6.0", "jest-transform-graphql": "^2.1.0" }, - "//": "This is out babel config, I prefer this over a .babelrc file", "jest": { "setupTestFrameworkScriptFile": "<rootDir>/jest.setup.js", "testPathIgnorePatterns": [ @@ -57,6 +57,7 @@ ".*": "babel-jest" } }, + "//": "This is out babel config, I prefer this over a .babelrc file", "babel": { "env": { "development": { @@ -97,6 +98,15 @@ } } ] + ], + "plugins": [ + [ + "styled-components", + { + "ssr": true, + "displayName": true + } + ] ] } } diff --git a/finished-application/frontend/pages/.gitkeep b/finished-application/frontend/pages/.gitkeep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/finished-application/frontend/pages/.gitkeep diff --git a/finished-application/frontend/pages/_app.js b/finished-application/frontend/pages/_app.js index 4e9af74..fc03876 100644 --- a/finished-application/frontend/pages/_app.js +++ b/finished-application/frontend/pages/_app.js @@ -1,11 +1,7 @@ import App, { Container } from 'next/app'; +import Page from '../components/Page'; import { ApolloProvider } from 'react-apollo'; import withData from '../lib/withData'; -import Page from '../components/Page'; - -// Next.js wraps each Page in an <App></App> component. This is handy for when you want to persist anything from page to page, or just access a component that is 1 level higher than each page. - -// here we use App from next/app and wrap it with withData so we can get Apollo and SSR class MyApp extends App { static async getInitialProps({ Component, ctx }) { @@ -13,13 +9,12 @@ class MyApp extends App { if (Component.getInitialProps) { pageProps = await Component.getInitialProps(ctx); } - + // this exposes the query to the user pageProps.query = ctx.query; - return { pageProps }; } render() { - const { Component, pageProps, apollo } = this.props; + const { Component, apollo, pageProps } = this.props; return ( <Container> diff --git a/finished-application/frontend/pages/_document.js b/finished-application/frontend/pages/_document.js index a5a28cc..0ac8935 100644 --- a/finished-application/frontend/pages/_document.js +++ b/finished-application/frontend/pages/_document.js @@ -1,7 +1,7 @@ import Document, { Head, Main, NextScript } from 'next/document'; import { ServerStyleSheet } from 'styled-components'; -class MyDocument extends Document { +export default class MyDocument extends Document { static getInitialProps({ renderPage }) { const sheet = new ServerStyleSheet(); const page = renderPage(App => props => sheet.collectStyles(<App {...props} />)); @@ -21,5 +21,3 @@ class MyDocument extends Document { ); } } - -export default MyDocument; diff --git a/finished-application/frontend/pages/add.js b/finished-application/frontend/pages/add.js deleted file mode 100644 index 57a327d..0000000 --- a/finished-application/frontend/pages/add.js +++ /dev/null @@ -1,10 +0,0 @@ -import CreateItem from '../components/CreateItem'; -import PleaseSignIn from '../components/PleaseSignIn'; - -const Sell = () => ( - <PleaseSignIn> - <CreateItem /> - </PleaseSignIn> -); - -export default Sell; diff --git a/finished-application/frontend/pages/diagram.js b/finished-application/frontend/pages/diagram.js deleted file mode 100644 index a505089..0000000 --- a/finished-application/frontend/pages/diagram.js +++ /dev/null @@ -1,202 +0,0 @@ -import styled from 'styled-components'; - -const DiagramStyles = styled.div` - display: grid; - grid-template-columns: repeat(8, 1fr); - grid-column-gap: 20px; - h1 { - grid-column: 1 / -1; - grid-row: 1; - } - ul { - margin: 0; - padding: 0; - list-style: none; - li { - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - padding: 5px 0; - } - } - h2 { - text-align: center; - margin: 0; - background: black; - color: white; - width: calc(40px + 100%); - transform: translateX(-20px); - } - span.for { - font-size: 12px; - text-align: center; - margin-top: 1rem; - margin-bottom: 1rem; - display: block; - } - .slat { - background: #f7f7f7; - padding: 20px; - min-height: 500px; - grid-column: span 2; - grid-row: 4; - line-height: 1.7; - } - - .location { - grid-column: span 4; - background: red; - padding: 5px; - grid-row: 2; - text-align: center; - color: white; - text-transform: uppercase; - } - - .arrow { - font-size: 30px; - line-height: 1; - transform: translateX(-10px) translateX(-50%); - text-align: center; - grid-row: 3; - margin-bottom: -100%; - background: white; - height: 40px; - } - .arrow1 { - grid-column: 3; - } - .arrow2 { - grid-column: 5; - } - .arrow3 { - grid-column: 7; - } - img { - width: 100%; - height: 125px; - object-fit: contain; - } - .slat2 img { - filter: invert(100%); - } - .slat4 img { - mix-blend-mode: multiply; - } -`; - -const Diagram = () => ( - <DiagramStyles> - <h1>The Pieces of our Application</h1> - <span className="location frontend">Frontend</span> - <span className=" location backend">Backend</span> - <div className="slat slat1"> - <img - src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/React-icon.svg/640px-React-icon.svg.png" - alt="React.js" - /> - <h2>React.js</h2> - <span className="for">For Building The Interface along with:</span> - <ul> - <li> - <strong>Next.js</strong> for server side rendering, routing and tooling - </li> - <li> - <strong>Styled Components</strong> for styling - </li> - <li> - <strong>React-Apollo</strong> for interfacing with Apollo Client - </li> - </ul> - </div> - <div className="slat slat2"> - <img - src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iOThweCIgaGVpZ2h0PSI0MnB4IiB2aWV3Qm94PSIwIDAgMTIwIDQyIiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPHN0eWxlPgogICAgICAgIHRleHQgewogICAgICAgICAgICBmb250LWZhbWlseTogJ1NvdXJjZSBTYW5zIFBybycsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxnIGlkPSJob21lcGFnZS0rLW5hdiIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9ImhvbWUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zNTAuMDAwMDAwLCAtMTUzOS4wMDAwMDApIiBmaWxsPSIjRkZGRkZGIj4KICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwLTMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM1MC4wMDAwMDAsIDE1MzguMDAwMDAwKSI+CiAgICAgICAgICAgICAgICA8ZyBpZD0ibG9nby1hcG9sbG8tc3BhY2UtY29weS0yOCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8ZyBpZD0iTGF5ZXJfMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJsb2dvX2Fwb2xsb19zcGFjZS1saW5rIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg0OS42MTkxNTUsIDE1LjcxNjE3NSkgc2NhbGUoLTEsIDEpIHJvdGF0ZSgtMTgwLjAwMDAwMCkgdHJhbnNsYXRlKC00OS42MTkxNTUsIC0xNS43MTYxNzUpIHRyYW5zbGF0ZSgwLjExOTE1NSwgMC43MTYxNzUpIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJsb2dvX2Fwb2xsb19zcGFjZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIC0wLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPSJHcm91cCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4zMzE4MjUsIDAuOTY1MzA5KSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIGlkPSJTaGFwZSIgcG9pbnRzPSIxNS44Mzg5MTQgMjAuNTYxMDg2IDEyLjkwNTQ2IDIwLjU2MTA4NiA4LjY3MDA0NTI1IDkuNTY4OTg5NDQgMTEuMzIzNDM4OSA5LjU2ODk4OTQ0IDEyLjAxNTU2NTYgMTEuNDMwOTUwMiAxNi4wMTc0OTYyIDExLjQzMDk1MDIgMTUuMjkzMDMxNyAxMy40OTEyODIxIDEyLjY1ODIyMDIgMTMuNDkxMjgyMSAxNC4zNzIyNDc0IDE4LjIyMDkzNTEgMTcuNDIxMTc2NSA5LjU2ODk4OTQ0IDIwLjA3NDMyODggOS41Njg5ODk0NCI+PC9wb2x5Z29uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9seWdvbiBpZD0iU2hhcGUiIHBvaW50cz0iNjAuNDAwMjQxMyA5LjU2ODk4OTQ0IDYwLjQwMDI0MTMgMjAuNTYxMDg2IDYyLjc1NjkyMzEgMjAuNTYxMDg2IDYyLjc1NjkyMzEgMTEuNjI4OTU5MyA2Ny40MDQxNjI5IDExLjYyODk1OTMgNjcuNDA0MTYyOSA5LjU2ODk4OTQ0Ij48L3BvbHlnb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5Z29uIGlkPSJTaGFwZSIgcG9pbnRzPSI3My45ODI3NDUxIDkuNTY4OTg5NDQgNzMuOTgyNzQ1MSAyMC41NjEwODYgNzYuMzM5NDI2OCAyMC41NjEwODYgNzYuMzM5NDI2OCAxMS42Mjg5NTkzIDgwLjk4NjkwOCAxMS42Mjg5NTkzIDgwLjk4NjkwOCA5LjU2ODk4OTQ0Ij48L3BvbHlnb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ny4zNDg1MzcsMTguNTkxMTMxMiBDNDkuMjk3NDk2MiwxOC41OTExMzEyIDUwLjg4MzEzNzMsMTcuMDA1NzMxNSA1MC44ODMxMzczLDE1LjA1NjY1MTYgQzUwLjg4MzEzNzMsMTMuMTA3ODEzIDQ5LjI5NzQ5NjIsMTEuNTIyMTcxOSA0Ny4zNDg1MzcsMTEuNTIyMTcxOSBDNDUuMzk5NTc3NywxMS41MjIxNzE5IDQzLjgxNDE3OCwxMy4xMDc4MTMgNDMuODE0MTc4LDE1LjA1NjY1MTYgQzQzLjgxNDE3OCwxNy4wMDU4NTIyIDQ1LjM5OTU3NzcsMTguNTkxMTMxMiA0Ny4zNDg1MzcsMTguNTkxMTMxMiBaIE00Ny4zNDg1MzcsMjAuNzQyMjAyMSBDNDQuMjA4NTA2OCwyMC43NDIyMDIxIDQxLjY2Mjk4NjQsMTguMTk2NjgxNyA0MS42NjI5ODY0LDE1LjA1NjY1MTYgQzQxLjY2Mjk4NjQsMTEuOTE2NjIxNCA0NC4yMDg1MDY4LDkuMzcwOTgwMzkgNDcuMzQ4NTM3LDkuMzcwOTgwMzkgQzUwLjQ4ODU2NzEsOS4zNzA5ODAzOSA1My4wMzQwODc1LDExLjkxNjYyMTQgNTMuMDM0MDg3NSwxNS4wNTY2NTE2IEM1My4wMzQwODc1LDE4LjE5NjY4MTcgNTAuNDg4Njg3OCwyMC43NDIyMDIxIDQ3LjM0ODUzNywyMC43NDIyMDIxIFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNOTEuODIwNjkzOCwxOC41OTExMzEyIEM5My43Njk4OTQ0LDE4LjU5MTEzMTIgOTUuMzU1NTM1NCwxNy4wMDU3MzE1IDk1LjM1NTUzNTQsMTUuMDU2NjUxNiBDOTUuMzU1NTM1NCwxMy4xMDc4MTMgOTMuNzY5ODk0NCwxMS41MjIxNzE5IDkxLjgyMDY5MzgsMTEuNTIyMTcxOSBDODkuODcxNzM0NSwxMS41MjIxNzE5IDg4LjI4NjMzNDgsMTMuMTA3ODEzIDg4LjI4NjMzNDgsMTUuMDU2NjUxNiBDODguMjg2MzM0OCwxNy4wMDU4NTIyIDg5Ljg3MTczNDUsMTguNTkxMTMxMiA5MS44MjA2OTM4LDE4LjU5MTEzMTIgWiBNOTEuODIwNjkzOCwyMC43NDIyMDIxIEM4OC42ODA5MDUsMjAuNzQyMjAyMSA4Ni4xMzUxNDMzLDE4LjE5NjY4MTcgODYuMTM1MTQzMywxNS4wNTY2NTE2IEM4Ni4xMzUxNDMzLDExLjkxNjYyMTQgODguNjgwOTA1LDkuMzcwOTgwMzkgOTEuODIwNjkzOCw5LjM3MDk4MDM5IEM5NC45NjA3MjQsOS4zNzA5ODAzOSA5Ny41MDY0ODU3LDExLjkxNjYyMTQgOTcuNTA2NDg1NywxNS4wNTY2NTE2IEM5Ny41MDY0ODU3LDE4LjE5NjY4MTcgOTQuOTYwNzI0LDIwLjc0MjIwMjEgOTEuODIwNjkzOCwyMC43NDIyMDIxIFoiIGlkPSJTaGFwZSI+PC9wYXRoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzIuMDU2MTA4NiwyMC41NjEwODYgTDI5LjI3MDk1MDIsMjAuNTYxMDg2IEwyOC44NzE0MzI5LDIwLjU2MTA4NiBMMjYuOTMwNjc4NywyMC41NjEwODYgTDI2LjkzMDY3ODcsOS41Njg4Njg3OCBMMjkuMjcwOTUwMiw5LjU2ODg2ODc4IEwyOS4yNzA5NTAyLDEzLjM1MTY3NDIgTDMyLjA1NjEwODYsMTMuMzUxNjc0MiBDMzQuMDA5NzczOCwxMy4zNTE2NzQyIDM1LjU5MzQ4NDIsMTUuMDAyOTU2MyAzNS41OTM0ODQyLDE2Ljk1NjM4MDEgQzM1LjU5MzQ4NDIsMTguOTEwMTY1OSAzNC4wMDk3NzM4LDIwLjU2MTA4NiAzMi4wNTYxMDg2LDIwLjU2MTA4NiBaIE0zMi4wNTYxMDg2LDE1LjUwMjk4NjQgTDI5LjI3MDk1MDIsMTUuNTAyOTg2NCBMMjkuMjcwOTUwMiwxOC40MDk4OTQ0IEwzMi4wNTYxMDg2LDE4LjQwOTg5NDQgQzMyLjgyMDYzMzUsMTguNDA5ODk0NCAzMy40NDIyOTI2LDE3LjcyMDc4NDMgMzMuNDQyMjkyNiwxNi45NTYzODAxIEMzMy40NDIyOTI2LDE2LjE5MTk3NTkgMzIuODIwNjMzNSwxNS41MDI5ODY0IDMyLjA1NjEwODYsMTUuNTAyOTg2NCBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkxMDA0NTIsNi4yMzI4ODA4NCBDMjQuNzA2MzY1LDYuMjMyODgwODQgMjQuNTI2NTc2Miw2LjEzMjAwNjAzIDI0LjQxNjc3MjIsNS45NzczMTUyMyBDMjQuNDE2NzcyMiw1Ljk3NzMxNTIzIDIzLjg4ODg2ODgsNS4zNzUwODI5NiAyMy42MDQyMjMyLDUuMDkwMDc1NDEgQzIyLjQwMDEyMDcsMy44ODU5NzI4NSAyMC45OTgxMjk3LDIuOTQwODE0NDggMTkuNDM3MzQ1NCwyLjI4MDU0Mjk5IEMxNy44MjIwMjExLDEuNTk3MjI0NzQgMTYuMTA1NzAxNCwxLjI1MDc5OTQgMTQuMzM1NTY1NiwxLjI1MDc5OTQgQzEyLjU2NTE4ODUsMS4yNTA3OTk0IDEwLjg0ODg2ODgsMS41OTcyMjQ3NCA5LjIzMzc4NTgyLDIuMjgwNTQyOTkgQzcuNjcyODgwODQsMi45NDA4MTQ0OCA2LjI3MDg4OTg5LDMuODg1OTcyODUgNS4wNjY5MDc5OSw1LjA5MDA3NTQxIEMzLjg2MjY4NDc3LDYuMjk0NDE5MzEgMi45MTc0MDU3Myw3LjY5NjI4OTU5IDIuMjU3MjU0OSw5LjI1NzA3MzkxIEMxLjU3NDE3Nzk4LDEwLjg3MjM5ODIgMS4yMjc2MzE5OCwxMi41ODg5NTkzIDEuMjI3NjMxOTgsMTQuMzU4OTc0NCBDMS4yMjc2MzE5OCwxNi4xMjg5ODk0IDEuNTc0MTc3OTgsMTcuODQ1NTUwNSAyLjI1NzI1NDksMTkuNDYwODc0OCBDMi45MTc0MDU3MywyMS4wMjE2NTkxIDMuODYyNjg0NzcsMjIuNDIzNTI5NCA1LjA2NjkwNzk5LDIzLjYyNzYzMiBDNi4yNzEwMTA1NiwyNC44MzE4NTUyIDcuNjczMDAxNTEsMjUuNzc3MDEzNiA5LjIzMzc4NTgyLDI2LjQzNzI4NTEgQzEwLjg0ODg2ODgsMjcuMTIwNjAzMyAxMi41NjUxODg1LDI3LjQ2NzAyODcgMTQuMzM1NTY1NiwyNy40NjcwMjg3IEMxNi4xMDU3MDE0LDI3LjQ2NzAyODcgMTcuODIyMTQxOCwyNy4xMjA2MDMzIDE5LjQzNzM0NTQsMjYuNDM3Mjg1MSBDMjAuNTc0MjM4MywyNS45NTY0NDA0IDIxLjYyNjMwNDcsMjUuMzIzNTU5NiAyMi41Nzk1NDc1LDI0LjU1MDIyNjIgQzIyLjUyODYyNzUsMjQuNDAwMjQxMyAyMi41MDAxNTA4LDI0LjIzOTM5NjcgMjIuNTAwMTUwOCwyNC4wNzIwMzYyIEMyMi41MDAxNTA4LDIzLjI1NTI2NCAyMy4xNjIzNTI5LDIyLjU5MzA2MTggMjMuOTc5MDA0NSwyMi41OTMwNjE4IEMyNC43OTU4OTc0LDIyLjU5MzA2MTggMjUuNDU4MDk5NSwyMy4yNTUyNjQgMjUuNDU4MDk5NSwyNC4wNzIwMzYyIEMyNS40NTgwOTk1LDI0Ljg4ODkyOTEgMjQuNzk1ODk3NCwyNS41NTEwMTA2IDIzLjk3OTAwNDUsMjUuNTUxMDEwNiBDMjMuNzc2Mjg5NiwyNS41NTEwMTA2IDIzLjU4Mjg2NTgsMjUuNTEwMTA1NiAyMy40MDY4MTc1LDI1LjQzNjAxODEgQzIwLjkzNzE5NDYsMjcuNDYwOTk1NSAxNy43Nzg0NjE1LDI4LjY3NjgwMjQgMTQuMzM1NTY1NiwyOC42NzY4MDI0IEM2LjQyNzg3MzMsMjguNjc2ODAyNCAwLjAxNzQ5NjIyOTMsMjIuMjY2NTQ2IDAuMDE3NDk2MjI5MywxNC4zNTg4NTM3IEMwLjAxNzQ5NjIyOTMsNi40NTExNjEzOSA2LjQyNzg3MzMsMC4wNDA3ODQzMTM3IDE0LjMzNTU2NTYsMC4wNDA3ODQzMTM3IEMxOC43NTg4NTM3LDAuMDQwNzg0MzEzNyAyMi43MTIwMzYyLDIuMDQ4MTQ0OCAyNS4zMzgxNTk5LDUuMjAwMTIwNjYgQzI1LjQ0NzQ4MTEsNS4zMDk1NjI1OSAyNS41MTU0MTQ4LDUuNDYwNzU0MTUgMjUuNTE1NDE0OCw1LjYyNzYzMTk4IEMyNS41MTUyOTQxLDUuOTYyMjMyMjggMjUuMjQ0NTI0OSw2LjIzMjg4MDg0IDI0LjkxMDA0NTIsNi4yMzI4ODA4NCBaIiBpZD0iU2hhcGUiPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8L2c+CiAgICAgICAgICAgICAgICA8dGV4dCBpZD0iQ0xJRU5ULUNvcHktOSIgb3BhY2l0eT0iMC41IiBmb250LXNpemU9IjE3IiBmb250LXdlaWdodD0ibm9ybWFsIiBsZXR0ZXItc3BhY2luZz0iMC44NzkzMTAzNjkiPgogICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PSI0Mi4yMTQxMzc4IiB5PSI0MiI+Q0xJRU5UPC90c3Bhbj4KICAgICAgICAgICAgICAgIDwvdGV4dD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+" - alt="React.js" - /> - <h2>Apollo Client</h2> - <span className="for">For Data Management</span> - <small /> - <ul> - <li> - Performing GraphQL <strong>Mutations</strong> - </li> - <li> - Fetching GraphQL <strong>Queries</strong> - </li> - <li> - <strong>Caching</strong> GraphQL Data - </li> - <li> - Managing <strong>Local State</strong> - </li> - <li> - <strong>Error</strong> and <strong>Loading</strong> UI States - </li> - <li> - <small>Apollo Client replaces the need for redux + data fetching/caching libraries</small> - </li> - </ul> - </div> - <div className="slat slat3"> - <img - src="https://camo.githubusercontent.com/389368863d9b9df25acd07644bad7642459c3533/68747470733a2f2f696d6775722e636f6d2f5376366a3042362e706e67" - alt="React.js" - /> - <h2>GraphQL Yoga</h2> - - <span className="for">An Express GraphQL Server For:</span> - <ul> - <li> - Implementing <strong>Query</strong> and <strong>Mutation</strong>{' '} - <strong>Resolvers</strong> - </li> - <li> - Custom <strong>Server Side Logic</strong> - </li> - <li> - <strong>Charging</strong> Credit Cards - </li> - <li> - <strong>Sending</strong> Email - </li> - <li> - Performing <strong>JWT Authentication</strong> - </li> - <li> - Checking <strong>Permissions</strong> - </li> - </ul> - </div> - <div className="slat slat4"> - <img - src="https://camo.githubusercontent.com/87336b0d10b0d1f27518e14c4a36f995babd6a2f/68747470733a2f2f696d6775722e636f6d2f485575313072482e706e67" - alt="React.js" - /> - <h2>Prisma</h2> - - <span className="for">A GraphQL Database Interface</span> - <ul> - <li> - Provides a set of GraphQL <strong>CRUD APIs</strong> for MySQL or Postgres{' '} - <strong>Database</strong> - </li> - <li> - <strong>Schema</strong> Definition - </li> - <li> - Data <strong>Relationships</strong> - </li> - <li> - <strong>Queried</strong> Directly from our Yoga Server - </li> - <li> - <strong>Self-hosted</strong> or <strong>as-a-service</strong> - </li> - </ul> - </div> - <span className="arrow arrow1">↔</span> - <span className="arrow arrow2">↔</span> - <span className="arrow arrow3">↔</span> - </DiagramStyles> -); - -export default Diagram; diff --git a/finished-application/frontend/pages/index.js b/finished-application/frontend/pages/index.js index d316108..edb45ab 100644 --- a/finished-application/frontend/pages/index.js +++ b/finished-application/frontend/pages/index.js @@ -1,7 +1,9 @@ import Items from '../components/Items'; const Home = props => ( - <Items page={parseInt(props.query.page) || 1} /> -) + <div> + <Items page={parseFloat(props.query.page) || 1} /> + </div> +); export default Home; diff --git a/finished-application/frontend/pages/item.js b/finished-application/frontend/pages/item.js index ae1e086..e58b220 100644 --- a/finished-application/frontend/pages/item.js +++ b/finished-application/frontend/pages/item.js @@ -1,7 +1,9 @@ import SingleItem from '../components/SingleItem'; -const ItemPage = ({ query }) => ( - <SingleItem id={query.id} /> +const Item = props => ( + <div> + <SingleItem id={props.query.id} /> + </div> ); -export default ItemPage; +export default Item; diff --git a/finished-application/frontend/pages/items.js b/finished-application/frontend/pages/items.js index 3426f4b..c95ff45 100644 --- a/finished-application/frontend/pages/items.js +++ b/finished-application/frontend/pages/items.js @@ -1,3 +1,3 @@ -import Index from './index'; +import Items from './index'; -export default Index; +export default Items; diff --git a/finished-application/frontend/pages/me.js b/finished-application/frontend/pages/me.js deleted file mode 100644 index b0c2c25..0000000 --- a/finished-application/frontend/pages/me.js +++ /dev/null @@ -1,13 +0,0 @@ -import EditUser from '../components/EditUser'; -import PleaseSignIn from '../components/PleaseSignIn'; - -const MyAccount = () => ( - <> - <h2>My Account</h2> - <PleaseSignIn> - <EditUser /> - </PleaseSignIn> - </> -); - -export default MyAccount; diff --git a/finished-application/frontend/pages/order.js b/finished-application/frontend/pages/order.js index 5298202..0fea0c6 100644 --- a/finished-application/frontend/pages/order.js +++ b/finished-application/frontend/pages/order.js @@ -1,7 +1,12 @@ +import PleaseSignIn from '../components/PleaseSignIn'; import Order from '../components/Order'; const OrderPage = props => ( - <Order id={props.query.id} /> + <div> + <PleaseSignIn> + <Order id={props.query.id} /> + </PleaseSignIn> + </div> ); export default OrderPage; diff --git a/finished-application/frontend/pages/orders.js b/finished-application/frontend/pages/orders.js index 4c7c76d..c65d80d 100644 --- a/finished-application/frontend/pages/orders.js +++ b/finished-application/frontend/pages/orders.js @@ -1,10 +1,12 @@ -import OrderList from '../components/OrderList'; import PleaseSignIn from '../components/PleaseSignIn'; +import OrderList from '../components/OrderList'; -const Orders = () => ( - <PleaseSignIn> - <OrderList /> - </PleaseSignIn> +const OrderPage = props => ( + <div> + <PleaseSignIn> + <OrderList /> + </PleaseSignIn> + </div> ); -export default Orders; +export default OrderPage; diff --git a/finished-application/frontend/pages/permissions.js b/finished-application/frontend/pages/permissions.js index ad6b446..de58c51 100644 --- a/finished-application/frontend/pages/permissions.js +++ b/finished-application/frontend/pages/permissions.js @@ -1,10 +1,12 @@ -import Permissions from '../components/Permissions'; import PleaseSignIn from '../components/PleaseSignIn'; +import Permissions from '../components/Permissions'; -const ItemPage = () => ( - <PleaseSignIn allowedPermissions={['ADMIN', 'PERMISSIONUPDATE']}> - <Permissions /> - </PleaseSignIn> +const PermissionsPage = props => ( + <div> + <PleaseSignIn> + <Permissions /> + </PleaseSignIn> + </div> ); -export default ItemPage; +export default PermissionsPage; diff --git a/finished-application/frontend/pages/reset.js b/finished-application/frontend/pages/reset.js index bc6e377..118ba72 100644 --- a/finished-application/frontend/pages/reset.js +++ b/finished-application/frontend/pages/reset.js @@ -1,10 +1,10 @@ import Reset from '../components/Reset'; -const ResetPage = props => ( - <> - <h2>So you wanna reset your password?</h2> +const Sell = props => ( + <div> + <p>Reset Your Password {props.query.resetToken}</p> <Reset resetToken={props.query.resetToken} /> - </> + </div> ); -export default ResetPage; +export default Sell; diff --git a/finished-application/frontend/pages/sell.js b/finished-application/frontend/pages/sell.js index 155f3b7..b60ae80 100644 --- a/finished-application/frontend/pages/sell.js +++ b/finished-application/frontend/pages/sell.js @@ -1,10 +1,12 @@ import CreateItem from '../components/CreateItem'; import PleaseSignIn from '../components/PleaseSignIn'; -const Add = () => ( - <PleaseSignIn> - <CreateItem /> - </PleaseSignIn> +const Sell = props => ( + <div> + <PleaseSignIn> + <CreateItem /> + </PleaseSignIn> + </div> ); -export default Add; +export default Sell; diff --git a/finished-application/frontend/pages/signup.js b/finished-application/frontend/pages/signup.js index cd522f8..342cfea 100644 --- a/finished-application/frontend/pages/signup.js +++ b/finished-application/frontend/pages/signup.js @@ -1,7 +1,7 @@ -import styled from 'styled-components'; import Signup from '../components/Signup'; import Signin from '../components/Signin'; -import ResetRequest from '../components/ResetRequest'; +import RequestReset from '../components/RequestReset'; +import styled from 'styled-components'; const Columns = styled.div` display: grid; @@ -9,12 +9,12 @@ const Columns = styled.div` grid-gap: 20px; `; -const SignUpPage = () => ( +const SignupPage = props => ( <Columns> <Signup /> <Signin /> - <ResetRequest /> + <RequestReset /> </Columns> ); -export default SignUpPage; +export default SignupPage; diff --git a/finished-application/frontend/pages/update.js b/finished-application/frontend/pages/update.js index 7a8630d..ba9d525 100644 --- a/finished-application/frontend/pages/update.js +++ b/finished-application/frontend/pages/update.js @@ -1,15 +1,9 @@ -import { Component } from 'react'; import UpdateItem from '../components/UpdateItem'; -import PleaseSignIn from '../components/PleaseSignIn'; -class Home extends Component { - render() { - return ( - <PleaseSignIn> - <UpdateItem id={this.props.query.id} /> - </PleaseSignIn> - ); - } -} +const Sell = ({ query }) => ( + <div> + <UpdateItem id={query.id} /> + </div> +); -export default Home; +export default Sell; |
