From 8a4c48d9f2f16e8e50d6e25da8131e8b7986fc59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 21 Aug 2018 15:14:56 +0200 Subject: [PATCH 01/70] start new branch From 4c6ab655bae1a7f80baa239be8179e7ac46a6bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 21 Aug 2018 15:37:45 +0200 Subject: [PATCH 02/70] add mockup root for permissions --- scm-ui/src/permissions/containers/Permissions.js | 13 +++++++++++++ scm-ui/src/repos/containers/RepositoryRoot.js | 5 +++++ 2 files changed, 18 insertions(+) create mode 100644 scm-ui/src/permissions/containers/Permissions.js diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js new file mode 100644 index 0000000000..8e2ffe7d04 --- /dev/null +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -0,0 +1,13 @@ +//@flow +import React from "react"; +import type { History } from "history"; + +type Props = {}; + +class Permissions extends React.Component { + render() { + return
Permissions will be shown here!
; + } +} + +export default Permissions; diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index 820aedf964..a2c44c7b7f 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -18,6 +18,7 @@ import { Navigation, NavLink, Section } from "../../components/navigation"; import RepositoryDetails from "../components/RepositoryDetails"; import DeleteNavAction from "../components/DeleteNavAction"; import Edit from "../containers/Edit"; +import Permissions from "../../permissions/containers/Permissions"; import type { History } from "history"; import EditNavLink from "../components/EditNavLink"; @@ -97,6 +98,10 @@ class RepositoryRoot extends React.Component { path={`${url}/edit`} component={() => } /> + } + />
From 60f29a1bc25adc0092c2a004897d369e1661b2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 21 Aug 2018 16:16:15 +0200 Subject: [PATCH 03/70] add fetch permissions and first test --- scm-ui/src/permissions/modules/permissions.js | 66 ++++++++++++++++++ .../permissions/modules/permissions.test.js | 67 +++++++++++++++++++ scm-ui/src/permissions/types/Permissions.js | 11 +++ 3 files changed, 144 insertions(+) create mode 100644 scm-ui/src/permissions/modules/permissions.js create mode 100644 scm-ui/src/permissions/modules/permissions.test.js create mode 100644 scm-ui/src/permissions/types/Permissions.js diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js new file mode 100644 index 0000000000..63ea6f44e5 --- /dev/null +++ b/scm-ui/src/permissions/modules/permissions.js @@ -0,0 +1,66 @@ +// @flow +import { apiClient } from "../../apiclient"; +import * as types from "../../modules/types"; +import type { Action } from "../../types/Action"; +import type { Permission, Permissions } from "../types/Permissions"; + +export const FETCH_PERMISSIONS = "scm/repos/FETCH_PERMISSIONS"; +export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${types.PENDING_SUFFIX}`; +export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${types.SUCCESS_SUFFIX}`; +export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${types.FAILURE_SUFFIX}`; + + +const REPOS_URL = "repositories"; +const PERMISSIONS_URL = "permissions"; + +// fetch repos + +export function fetchPermissions(namespace: string, name: string) { + return function(dispatch: any) { + dispatch(fetchPermissionsPending(namespace, name)); + return apiClient + .get(`${REPOS_URL}/${namespace}/${name}/${PERMISSIONS_URL}`) + .then(response => response.json()) + .then(permissions => { + dispatch(fetchPermissionsSuccess(permissions, namespace, name)); + }) + .catch(err => { + dispatch(fetchPermissionsFailure(namespace, name, err)); + }); + }; +} + +export function fetchPermissionsPending(namespace: string, name: string): Action { + return { + type: FETCH_PERMISSIONS_PENDING, + payload: { + namespace, + name + }, + itemId: namespace + "/" + name + }; +} + +export function fetchPermissionsSuccess(permissions: Permissions, namespace: string, name: string): Action { + return { + type: FETCH_PERMISSIONS_SUCCESS, + payload: permissions, + itemId: namespace + "/" + name + }; +} + +export function fetchPermissionsFailure( + namespace: string, + name: string, + error: Error +): Action { + return { + type: FETCH_PERMISSIONS_FAILURE, + payload: { + namespace, + name, + error + }, + itemId: namespace + "/" + name + }; +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js new file mode 100644 index 0000000000..65e4b6adfc --- /dev/null +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -0,0 +1,67 @@ +// @flow +import configureMockStore from "redux-mock-store"; +import thunk from "redux-thunk"; +import fetchMock from "fetch-mock"; +import { + fetchPermissions, + FETCH_PERMISSIONS_PENDING, + FETCH_PERMISSIONS_SUCCESS +} from "./permissions"; +import type { Permission, Permissions } from "../types/Permissions"; + +const s_bPermission_user_eins: Permission = { + name: "user_eins", + type: "READ", + groupPermission: true, + _links: { + self: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + }, + delete: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + }, + update: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + } + } +}; + +const s_bPermissions: Permissions = [s_bPermission_user_eins]; + +describe("permission fetch", () => { + const REPOS_URL = "/scm/api/rest/v2/repositories"; + const mockStore = configureMockStore([thunk]); + + afterEach(() => { + fetchMock.reset(); + fetchMock.restore(); + }); + + it("should successfully fetch permissions to repo s/b", () => { + fetchMock.getOnce(REPOS_URL + "/s/b/permissions", s_bPermissions); + + const expectedActions = [ + { + type: FETCH_PERMISSIONS_PENDING, + payload: { + namespace: "s", + name: "b" + }, + itemId: "s/b" + }, + { + type: FETCH_PERMISSIONS_SUCCESS, + payload: s_bPermissions, + itemId: "s/b" + } + ]; + + const store = mockStore({}); + return store.dispatch(fetchPermissions("s", "b")).then(() => { + expect(store.getActions()).toEqual(expectedActions); + }); + }); +}); diff --git a/scm-ui/src/permissions/types/Permissions.js b/scm-ui/src/permissions/types/Permissions.js new file mode 100644 index 0000000000..e76e0dbda4 --- /dev/null +++ b/scm-ui/src/permissions/types/Permissions.js @@ -0,0 +1,11 @@ +//@flow +import type { Links } from "../../types/hal"; + +export type Permission = { + name: string, + type: string, + groupPermission: boolean, + _links: Links +}; + +export type Permissions = Permission[]; From 4cc395bd73bb5b9a5194b30ff2b90e5b73698344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 21 Aug 2018 16:21:41 +0200 Subject: [PATCH 04/70] add test for fetch failure --- scm-ui/src/permissions/modules/permissions.js | 2 +- .../src/permissions/modules/permissions.test.js | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 63ea6f44e5..3bf46394d5 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -13,7 +13,7 @@ export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${types.FAILURE_S const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; -// fetch repos +// fetch permissions export function fetchPermissions(namespace: string, name: string) { return function(dispatch: any) { diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 65e4b6adfc..94e894453b 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -5,7 +5,8 @@ import fetchMock from "fetch-mock"; import { fetchPermissions, FETCH_PERMISSIONS_PENDING, - FETCH_PERMISSIONS_SUCCESS + FETCH_PERMISSIONS_SUCCESS, + FETCH_PERMISSIONS_FAILURE } from "./permissions"; import type { Permission, Permissions } from "../types/Permissions"; @@ -64,4 +65,18 @@ describe("permission fetch", () => { expect(store.getActions()).toEqual(expectedActions); }); }); + + it("should dispatch FETCH_PERMISSIONS_FAILURE, it the request fails", () => { + fetchMock.getOnce(REPOS_URL + "/s/b/permissions", { + status: 500 + }); + + const store = mockStore({}); + return store.dispatch(fetchPermissions("s", "b")).then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(FETCH_PERMISSIONS_PENDING); + expect(actions[1].type).toEqual(FETCH_PERMISSIONS_FAILURE); + expect(actions[1].payload).toBeDefined(); + }); + }); }); From 8d2bf3308ef4effb9b82d7baa52c1be25d8b3585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 09:10:23 +0200 Subject: [PATCH 05/70] add basic reducer --- scm-ui/src/permissions/modules/permissions.js | 41 ++++++++++++++++--- .../permissions/modules/permissions.test.js | 26 +++++++++++- 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 3bf46394d5..2dec35b075 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -5,10 +5,15 @@ import type { Action } from "../../types/Action"; import type { Permission, Permissions } from "../types/Permissions"; export const FETCH_PERMISSIONS = "scm/repos/FETCH_PERMISSIONS"; -export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${types.PENDING_SUFFIX}`; -export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${types.SUCCESS_SUFFIX}`; -export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${types.FAILURE_SUFFIX}`; - +export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ + types.PENDING_SUFFIX +}`; +export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${ + types.SUCCESS_SUFFIX +}`; +export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${ + types.FAILURE_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; @@ -30,7 +35,10 @@ export function fetchPermissions(namespace: string, name: string) { }; } -export function fetchPermissionsPending(namespace: string, name: string): Action { +export function fetchPermissionsPending( + namespace: string, + name: string +): Action { return { type: FETCH_PERMISSIONS_PENDING, payload: { @@ -41,7 +49,11 @@ export function fetchPermissionsPending(namespace: string, name: string): Action }; } -export function fetchPermissionsSuccess(permissions: Permissions, namespace: string, name: string): Action { +export function fetchPermissionsSuccess( + permissions: Permissions, + namespace: string, + name: string +): Action { return { type: FETCH_PERMISSIONS_SUCCESS, payload: permissions, @@ -64,3 +76,20 @@ export function fetchPermissionsFailure( itemId: namespace + "/" + name }; } + +// reducer +export default function reducer( + state: Object = {}, + action: Action = { type: "UNKNOWN" } +): Object { + if (!action.payload) { + return state; + } + + switch (action.type) { + case FETCH_PERMISSIONS_SUCCESS: + return state; + default: + return state; + } +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 94e894453b..1221837995 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -2,8 +2,9 @@ import configureMockStore from "redux-mock-store"; import thunk from "redux-thunk"; import fetchMock from "fetch-mock"; -import { +import reducer, { fetchPermissions, + fetchPermissionsSuccess, FETCH_PERMISSIONS_PENDING, FETCH_PERMISSIONS_SUCCESS, FETCH_PERMISSIONS_FAILURE @@ -80,3 +81,26 @@ describe("permission fetch", () => { }); }); }); + +describe("repos reducer", () => { + it("should return empty object, if state and action is undefined", () => { + expect(reducer()).toEqual({}); + }); + + it("should return the same state, if the action is undefined", () => { + const state = { x: true }; + expect(reducer(state)).toBe(state); + }); + + it("should return the same state, if the action is unknown to the reducer", () => { + const state = { x: true }; + expect(reducer(state, { type: "EL_SPECIALE" })).toBe(state); + }); + + it("should store the permissions on FETCH_PERMISSION_SUCCESS", () => { + const newState = reducer( + {}, + fetchPermissionsSuccess(s_bPermissions, "s", "b") + ); + }); +}); From b84472b11c2d058851503ac0a15542a037640569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 09:10:38 +0200 Subject: [PATCH 06/70] add permissions to menu of repository --- scm-ui/public/locales/en/repos.json | 3 +- .../repos/components/PermissionsNavLink.js | 23 ++++++++++++ .../components/PermissionsNavLink.test.js | 36 +++++++++++++++++++ scm-ui/src/repos/containers/RepositoryRoot.js | 5 +++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 scm-ui/src/repos/components/PermissionsNavLink.js create mode 100644 scm-ui/src/repos/components/PermissionsNavLink.test.js diff --git a/scm-ui/public/locales/en/repos.json b/scm-ui/public/locales/en/repos.json index 7db2623247..1eb8f7b828 100644 --- a/scm-ui/public/locales/en/repos.json +++ b/scm-ui/public/locales/en/repos.json @@ -22,7 +22,8 @@ "actions-label": "Actions", "back-label": "Back", "navigation-label": "Navigation", - "information": "Information" + "information": "Information", + "permissions": "Permissions" }, "create": { "title": "Create Repository", diff --git a/scm-ui/src/repos/components/PermissionsNavLink.js b/scm-ui/src/repos/components/PermissionsNavLink.js new file mode 100644 index 0000000000..4850ef98ad --- /dev/null +++ b/scm-ui/src/repos/components/PermissionsNavLink.js @@ -0,0 +1,23 @@ +//@flow +import React from "react"; +import { NavLink } from "../../components/navigation"; +import { translate } from "react-i18next"; +import type { Repository } from "../types/Repositories"; + +type Props = { permissionUrl: string, t: string => string, repository: Repository }; + +class PermissionsNavLink extends React.Component { + hasPermissionsLink = () => { + return this.props.repository._links.permissions; + }; + render() { + if (!this.hasPermissionsLink()) { + return null; + } + const { permissionUrl, t } = this.props; + return ; + } +} + +export default translate("repos")(PermissionsNavLink); diff --git a/scm-ui/src/repos/components/PermissionsNavLink.test.js b/scm-ui/src/repos/components/PermissionsNavLink.test.js new file mode 100644 index 0000000000..43ea25079f --- /dev/null +++ b/scm-ui/src/repos/components/PermissionsNavLink.test.js @@ -0,0 +1,36 @@ +import React from "react"; +import { mount, shallow } from "enzyme"; +import "../../tests/enzyme"; +import "../../tests/i18n"; +import PermissionsNavLink from "./PermissionsNavLink"; + +jest.mock("../../components/modals/ConfirmAlert"); +jest.mock("../../components/navigation/NavLink", () => () =>
foo
); + +describe("PermissionsNavLink", () => { + it("should render nothing, if the modify link is missing", () => { + const repository = { + _links: {} + }; + + const navLink = shallow( + + ); + expect(navLink.text()).toBe(""); + }); + + it("should render the navLink", () => { + const repository = { + _links: { + permissions: { + href: "/permissions" + } + } + }; + + const navLink = mount( + + ); + expect(navLink.text()).toBe("foo"); + }); +}); diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index a2c44c7b7f..05678794d9 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -22,6 +22,7 @@ import Permissions from "../../permissions/containers/Permissions"; import type { History } from "history"; import EditNavLink from "../components/EditNavLink"; +import PermissionsNavLink from "../components/PermissionsNavLink"; type Props = { namespace: string, @@ -107,6 +108,10 @@ class RepositoryRoot extends React.Component {
+
From f81cc096aaf19a9c20d22298ab62e293a4f3cafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 10:16:54 +0200 Subject: [PATCH 07/70] create permissions store and write selectors --- scm-ui/src/createReduxStore.js | 2 + .../src/permissions/containers/Permissions.js | 39 ++++- scm-ui/src/permissions/modules/permissions.js | 30 +++- .../permissions/modules/permissions.test.js | 135 ++++++++++++++---- scm-ui/src/repos/containers/RepositoryRoot.js | 2 +- 5 files changed, 178 insertions(+), 30 deletions(-) diff --git a/scm-ui/src/createReduxStore.js b/scm-ui/src/createReduxStore.js index 55e0d3f514..8956da22ae 100644 --- a/scm-ui/src/createReduxStore.js +++ b/scm-ui/src/createReduxStore.js @@ -11,6 +11,7 @@ import groups from "./groups/modules/groups"; import auth from "./modules/auth"; import pending from "./modules/pending"; import failure from "./modules/failure"; +import permissions from "./permissions/modules/permissions"; import type { BrowserHistory } from "history/createBrowserHistory"; @@ -25,6 +26,7 @@ function createReduxStore(history: BrowserHistory) { users, repos, repositoryTypes, + permissions, groups, auth }); diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 8e2ffe7d04..48b7aa5990 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -1,13 +1,46 @@ //@flow import React from "react"; -import type { History } from "history"; +import connect from "react-redux/es/connect/connect"; +import { translate } from "react-i18next"; +import { fetchPermissions } from "../modules/permissions"; -type Props = {}; +type Props = { + namespace: string, + name: string, + + //dispatch functions + fetchPermissions: (namespace: string, name: string) => void +}; class Permissions extends React.Component { + componentDidMount() { + const { fetchPermissions, namespace, name } = this.props; + + fetchPermissions(namespace, name); + } + render() { return
Permissions will be shown here!
; } } -export default Permissions; +const mapStateToProps = (state, ownProps) => { + // const { namespace, name } = ownProps.match.params; + return { + //namespace, + //name + }; +}; + +const mapDispatchToProps = dispatch => { + return { + fetchPermissions: (namespace: string, name: string) => { + dispatch(fetchPermissions(namespace, name)); + } + }; +}; + +export default connect( + mapStateToProps, + mapDispatchToProps +)(translate("repos")(Permissions)); diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 2dec35b075..84de9df95c 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,7 +2,9 @@ import { apiClient } from "../../apiclient"; import * as types from "../../modules/types"; import type { Action } from "../../types/Action"; -import type { Permission, Permissions } from "../types/Permissions"; +import type { Permissions } from "../types/Permissions"; +import { isPending } from "../../modules/pending"; +import { getFailure } from "../../modules/failure"; export const FETCH_PERMISSIONS = "scm/repos/FETCH_PERMISSIONS"; export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ @@ -88,8 +90,32 @@ export default function reducer( switch (action.type) { case FETCH_PERMISSIONS_SUCCESS: - return state; + return { + ...state, + [action.itemId]: action.payload + }; default: return state; } } + +// selectors + +export function getPermissionsOfRepo( + state: Object, + namespace: string, + name: string +) { + if (state.permissions && state.permissions[namespace + "/" + name]) { + const permissions = state.permissions[namespace + "/" + name]; + return permissions; + } +} + +export function isFetchPermissionsPending(state: Object) { + return isPending(state, FETCH_PERMISSIONS); +} + +export function getFetchPermissionsFailure(state: Object) { + return getFailure(state, FETCH_PERMISSIONS); +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 1221837995..22a2a43249 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -5,33 +5,60 @@ import fetchMock from "fetch-mock"; import reducer, { fetchPermissions, fetchPermissionsSuccess, + getPermissionsOfRepo, + isFetchPermissionsPending, + getFetchPermissionsFailure, + FETCH_PERMISSIONS, FETCH_PERMISSIONS_PENDING, FETCH_PERMISSIONS_SUCCESS, FETCH_PERMISSIONS_FAILURE } from "./permissions"; import type { Permission, Permissions } from "../types/Permissions"; -const s_bPermission_user_eins: Permission = { +const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", type: "READ", groupPermission: true, _links: { self: { href: - "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_eins" }, delete: { href: - "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_eins" }, update: { href: - "http://localhost:8081/scm/api/rest/v2/repositories/s/b/permissions/user_eins" + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_eins" } } }; -const s_bPermissions: Permissions = [s_bPermission_user_eins]; +const hitchhiker_puzzle42Permission_user_zwei: Permission = { + name: "user_zwei", + type: "WRITE", + groupPermission: true, + _links: { + self: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_zwei" + }, + delete: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_zwei" + }, + update: { + href: + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions/user_zwei" + } + } +}; + +const hitchhiker_puzzle42Permissions: Permissions = [ + hitchhiker_puzzle42Permission_user_eins, + hitchhiker_puzzle42Permission_user_zwei +]; describe("permission fetch", () => { const REPOS_URL = "/scm/api/rest/v2/repositories"; @@ -42,47 +69,54 @@ describe("permission fetch", () => { fetchMock.restore(); }); - it("should successfully fetch permissions to repo s/b", () => { - fetchMock.getOnce(REPOS_URL + "/s/b/permissions", s_bPermissions); + it("should successfully fetch permissions to repo hitchhiker/puzzle42", () => { + fetchMock.getOnce( + REPOS_URL + "/hitchhiker/puzzle42/permissions", + hitchhiker_puzzle42Permissions + ); const expectedActions = [ { type: FETCH_PERMISSIONS_PENDING, payload: { - namespace: "s", - name: "b" + namespace: "hitchhiker", + name: "puzzle42" }, - itemId: "s/b" + itemId: "hitchhiker/puzzle42" }, { type: FETCH_PERMISSIONS_SUCCESS, - payload: s_bPermissions, - itemId: "s/b" + payload: hitchhiker_puzzle42Permissions, + itemId: "hitchhiker/puzzle42" } ]; const store = mockStore({}); - return store.dispatch(fetchPermissions("s", "b")).then(() => { - expect(store.getActions()).toEqual(expectedActions); - }); + return store + .dispatch(fetchPermissions("hitchhiker", "puzzle42")) + .then(() => { + expect(store.getActions()).toEqual(expectedActions); + }); }); it("should dispatch FETCH_PERMISSIONS_FAILURE, it the request fails", () => { - fetchMock.getOnce(REPOS_URL + "/s/b/permissions", { + fetchMock.getOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { status: 500 }); const store = mockStore({}); - return store.dispatch(fetchPermissions("s", "b")).then(() => { - const actions = store.getActions(); - expect(actions[0].type).toEqual(FETCH_PERMISSIONS_PENDING); - expect(actions[1].type).toEqual(FETCH_PERMISSIONS_FAILURE); - expect(actions[1].payload).toBeDefined(); - }); + return store + .dispatch(fetchPermissions("hitchhiker", "puzzle42")) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(FETCH_PERMISSIONS_PENDING); + expect(actions[1].type).toEqual(FETCH_PERMISSIONS_FAILURE); + expect(actions[1].payload).toBeDefined(); + }); }); }); -describe("repos reducer", () => { +describe("permissions reducer", () => { it("should return empty object, if state and action is undefined", () => { expect(reducer()).toEqual({}); }); @@ -100,7 +134,60 @@ describe("repos reducer", () => { it("should store the permissions on FETCH_PERMISSION_SUCCESS", () => { const newState = reducer( {}, - fetchPermissionsSuccess(s_bPermissions, "s", "b") + fetchPermissionsSuccess( + hitchhiker_puzzle42Permissions, + "hitchhiker", + "puzzle42" + ) + ); + + expect(newState["hitchhiker/puzzle42"]).toBe( + hitchhiker_puzzle42Permissions ); }); }); + +describe("permissions selectors", () => { + const error = new Error("something goes wrong"); + + it("should return the permissions of one repository", () => { + const state = { + permissions: { + "hitchhiker/puzzle42": hitchhiker_puzzle42Permissions + } + }; + + const repoPermissions = getPermissionsOfRepo( + state, + "hitchhiker", + "puzzle42" + ); + expect(repoPermissions).toEqual(hitchhiker_puzzle42Permissions); + }); + + it("should return true, when fetch permissions is pending", () => { + const state = { + pending: { + [FETCH_PERMISSIONS]: true + } + }; + expect(isFetchPermissionsPending(state)).toEqual(true); + }); + + it("should return false, when fetch permissions is not pending", () => { + expect(isFetchPermissionsPending({})).toEqual(false); + }); + + it("should return error when fetch permissions did fail", () => { + const state = { + failure: { + [FETCH_PERMISSIONS]: error + } + }; + expect(getFetchPermissionsFailure(state)).toEqual(error); + }); + + it("should return undefined when fetch permissions did not fail", () => { + expect(getFetchPermissionsFailure({})).toBe(undefined); + }); +}); diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index 05678794d9..bff19c2405 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -101,7 +101,7 @@ class RepositoryRoot extends React.Component { /> } + component={() => } />
From 33976605db29f3eb67d106de1f5b611c6991faef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 11:00:14 +0200 Subject: [PATCH 08/70] safe state in props and show loading and error state --- .../src/permissions/containers/Permissions.js | 51 ++++++++++++++++--- scm-ui/src/repos/containers/RepositoryRoot.js | 7 ++- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 48b7aa5990..ea107289fa 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -2,14 +2,30 @@ import React from "react"; import connect from "react-redux/es/connect/connect"; import { translate } from "react-i18next"; -import { fetchPermissions } from "../modules/permissions"; +import { + fetchPermissions, + getFetchPermissionsFailure, + isFetchPermissionsPending, + getPermissionsOfRepo +} from "../modules/permissions"; +import type { History } from "history"; +import Loading from "../../components/Loading"; +import ErrorPage from "../../components/ErrorPage"; type Props = { namespace: string, name: string, + loading: boolean, + error: Error, + permissions: Permissions, //dispatch functions - fetchPermissions: (namespace: string, name: string) => void + fetchPermissions: (namespace: string, name: string) => void, + + // context props + t: string => string, + history: History, + match: any }; class Permissions extends React.Component { @@ -20,15 +36,38 @@ class Permissions extends React.Component { } render() { + const { namespace, name, loading, error, permissions, t } = this.props; + + if (error) { + return ( + + ); + } + + if (loading || !permissions) { + return ; + } + return
Permissions will be shown here!
; } } const mapStateToProps = (state, ownProps) => { - // const { namespace, name } = ownProps.match.params; + const namespace = ownProps.namespace; + const name = ownProps.name; + const error = getFetchPermissionsFailure(state); + const loading = isFetchPermissionsPending(state); + const permissions = getPermissionsOfRepo(state, namespace, name); return { - //namespace, - //name + namespace, + name, + error, + loading, + permissions }; }; @@ -43,4 +82,4 @@ const mapDispatchToProps = dispatch => { export default connect( mapStateToProps, mapDispatchToProps -)(translate("repos")(Permissions)); +)(translate("permissions")(Permissions)); diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index bff19c2405..c8dacbdc5e 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -101,7 +101,12 @@ class RepositoryRoot extends React.Component { /> } + component={() => ( + + )} />
From 81c81f19aaedfd6b369d40765146133218fd0103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 11:01:19 +0200 Subject: [PATCH 09/70] create translationf file --- scm-ui/public/locales/en/permissions.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 scm-ui/public/locales/en/permissions.json diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json new file mode 100644 index 0000000000..55db562c22 --- /dev/null +++ b/scm-ui/public/locales/en/permissions.json @@ -0,0 +1,6 @@ +{ + "permissions": { + "error-title": "Error", + "error-subtitle": "Unknown permissions error" + } +} From deeecd652d4b341a385d749e4f2310b45ff3e272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 11:11:40 +0200 Subject: [PATCH 10/70] renaming --- scm-ui/src/permissions/containers/Permissions.js | 5 ++--- scm-ui/src/permissions/modules/permissions.js | 4 ++-- scm-ui/src/permissions/modules/permissions.test.js | 4 ++-- scm-ui/src/permissions/types/Permissions.js | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index ea107289fa..5c1c77b6cc 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -8,23 +8,22 @@ import { isFetchPermissionsPending, getPermissionsOfRepo } from "../modules/permissions"; -import type { History } from "history"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; +import type {PermissionCollection} from "../types/Permissions"; type Props = { namespace: string, name: string, loading: boolean, error: Error, - permissions: Permissions, + permissions: PermissionCollection, //dispatch functions fetchPermissions: (namespace: string, name: string) => void, // context props t: string => string, - history: History, match: any }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 84de9df95c..63bf61b6fc 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,7 +2,7 @@ import { apiClient } from "../../apiclient"; import * as types from "../../modules/types"; import type { Action } from "../../types/Action"; -import type { Permissions } from "../types/Permissions"; +import type { PermissionCollection } from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; @@ -52,7 +52,7 @@ export function fetchPermissionsPending( } export function fetchPermissionsSuccess( - permissions: Permissions, + permissions: PermissionCollection, namespace: string, name: string ): Action { diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 22a2a43249..e0a14f9241 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -13,7 +13,7 @@ import reducer, { FETCH_PERMISSIONS_SUCCESS, FETCH_PERMISSIONS_FAILURE } from "./permissions"; -import type { Permission, Permissions } from "../types/Permissions"; +import type { Permission, PermissionCollection } from "../types/Permissions"; const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", @@ -55,7 +55,7 @@ const hitchhiker_puzzle42Permission_user_zwei: Permission = { } }; -const hitchhiker_puzzle42Permissions: Permissions = [ +const hitchhiker_puzzle42Permissions: PermissionCollection = [ hitchhiker_puzzle42Permission_user_eins, hitchhiker_puzzle42Permission_user_zwei ]; diff --git a/scm-ui/src/permissions/types/Permissions.js b/scm-ui/src/permissions/types/Permissions.js index e76e0dbda4..c292347755 100644 --- a/scm-ui/src/permissions/types/Permissions.js +++ b/scm-ui/src/permissions/types/Permissions.js @@ -8,4 +8,4 @@ export type Permission = { _links: Links }; -export type Permissions = Permission[]; +export type PermissionCollection = Permission[]; From d7841093266063b867b6ca89ff1673aa29c2e6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 11:49:10 +0200 Subject: [PATCH 11/70] show permissions in table --- scm-ui/public/locales/en/permissions.json | 5 +++ .../components/table/PermissionRow.js | 23 +++++++++++++ .../components/table/PermissionsTable.js | 34 +++++++++++++++++++ .../src/permissions/containers/Permissions.js | 8 +++-- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 scm-ui/src/permissions/components/table/PermissionRow.js create mode 100644 scm-ui/src/permissions/components/table/PermissionsTable.js diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json index 55db562c22..9e1eb0a841 100644 --- a/scm-ui/public/locales/en/permissions.json +++ b/scm-ui/public/locales/en/permissions.json @@ -2,5 +2,10 @@ "permissions": { "error-title": "Error", "error-subtitle": "Unknown permissions error" + }, + "permission": { + "name": "Username", + "type": "Type", + "group-permission": "Group Permission" } } diff --git a/scm-ui/src/permissions/components/table/PermissionRow.js b/scm-ui/src/permissions/components/table/PermissionRow.js new file mode 100644 index 0000000000..91b0fa6741 --- /dev/null +++ b/scm-ui/src/permissions/components/table/PermissionRow.js @@ -0,0 +1,23 @@ +// @flow +import React from "react"; +import type { Permission } from "../../types/Permissions"; +import { Checkbox } from "../../../components/forms"; + +type Props = { + permission: Permission +}; + +export default class PermissionRow extends React.Component { + render() { + const { permission } = this.props; + return ( + + {permission.name} + {permission.type} + + + + + ); + } +} diff --git a/scm-ui/src/permissions/components/table/PermissionsTable.js b/scm-ui/src/permissions/components/table/PermissionsTable.js new file mode 100644 index 0000000000..e99c231ab3 --- /dev/null +++ b/scm-ui/src/permissions/components/table/PermissionsTable.js @@ -0,0 +1,34 @@ +// @flow +import React from "react"; +import { translate } from "react-i18next"; +import PermissionRow from "./PermissionRow"; +import type { PermissionCollection } from "../../types/Permissions"; + +type Props = { + t: string => string, + permissions: PermissionCollection +}; + +class PermissionsTable extends React.Component { + render() { + const { permissions, t } = this.props; + return ( + + + + + + + + + + {permissions.map((permission, index) => { + return ; + })} + +
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
+ ); + } +} + +export default translate("permissions")(PermissionsTable); diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 5c1c77b6cc..b97f2991f1 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -10,7 +10,8 @@ import { } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; -import type {PermissionCollection} from "../types/Permissions"; +import type { PermissionCollection } from "../types/Permissions"; +import PermissionsTable from "../components/table/PermissionsTable"; type Props = { namespace: string, @@ -51,7 +52,10 @@ class Permissions extends React.Component { return ; } - return
Permissions will be shown here!
; + if (permissions.length > 0) + return ; + + return
; } } From 80aad7ccc1a25b6557ca993a017a40ce533fde8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 12:25:00 +0200 Subject: [PATCH 12/70] correct getting failure function and is loading --- scm-ui/src/modules/failure.js | 1 + .../src/permissions/containers/Permissions.js | 7 +++---- scm-ui/src/permissions/modules/permissions.js | 18 ++++++++++++----- .../permissions/modules/permissions.test.js | 20 +++++++++++++------ 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/scm-ui/src/modules/failure.js b/scm-ui/src/modules/failure.js index 9328b59e78..94ff209ca6 100644 --- a/scm-ui/src/modules/failure.js +++ b/scm-ui/src/modules/failure.js @@ -59,6 +59,7 @@ export function getFailure( itemId?: string | number ) { if (state.failure) { + console.log(state.failure); let identifier = actionType; if (itemId) { identifier += "/" + itemId; diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index b97f2991f1..24b1ccef75 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -36,8 +36,7 @@ class Permissions extends React.Component { } render() { - const { namespace, name, loading, error, permissions, t } = this.props; - + const { loading, error, permissions, t } = this.props; if (error) { return ( { const mapStateToProps = (state, ownProps) => { const namespace = ownProps.namespace; const name = ownProps.name; - const error = getFetchPermissionsFailure(state); - const loading = isFetchPermissionsPending(state); + const error = getFetchPermissionsFailure(state, namespace, name); + const loading = isFetchPermissionsPending(state, namespace, name); const permissions = getPermissionsOfRepo(state, namespace, name); return { namespace, diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 63bf61b6fc..c82a4cba91 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -6,7 +6,7 @@ import type { PermissionCollection } from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; -export const FETCH_PERMISSIONS = "scm/repos/FETCH_PERMISSIONS"; +export const FETCH_PERMISSIONS = "scm/permissions/FETCH_PERMISSIONS"; export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ types.PENDING_SUFFIX }`; @@ -112,10 +112,18 @@ export function getPermissionsOfRepo( } } -export function isFetchPermissionsPending(state: Object) { - return isPending(state, FETCH_PERMISSIONS); +export function isFetchPermissionsPending( + state: Object, + namespace: string, + name: string +) { + return isPending(state, FETCH_PERMISSIONS, namespace + "/" + name); } -export function getFetchPermissionsFailure(state: Object) { - return getFailure(state, FETCH_PERMISSIONS); +export function getFetchPermissionsFailure( + state: Object, + namespace: string, + name: string +) { + return getFailure(state, FETCH_PERMISSIONS, namespace + "/" + name); } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index e0a14f9241..dcc302e97a 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -168,26 +168,34 @@ describe("permissions selectors", () => { it("should return true, when fetch permissions is pending", () => { const state = { pending: { - [FETCH_PERMISSIONS]: true + [FETCH_PERMISSIONS + "/hitchhiker/puzzle42"]: true } }; - expect(isFetchPermissionsPending(state)).toEqual(true); + expect(isFetchPermissionsPending(state, "hitchhiker", "puzzle42")).toEqual( + true + ); }); it("should return false, when fetch permissions is not pending", () => { - expect(isFetchPermissionsPending({})).toEqual(false); + expect(isFetchPermissionsPending({}, "hitchiker", "puzzle42")).toEqual( + false + ); }); it("should return error when fetch permissions did fail", () => { const state = { failure: { - [FETCH_PERMISSIONS]: error + [FETCH_PERMISSIONS + "/hitchhiker/puzzle42"]: error } }; - expect(getFetchPermissionsFailure(state)).toEqual(error); + expect(getFetchPermissionsFailure(state, "hitchhiker", "puzzle42")).toEqual( + error + ); }); it("should return undefined when fetch permissions did not fail", () => { - expect(getFetchPermissionsFailure({})).toBe(undefined); + expect(getFetchPermissionsFailure({}, "hitchhiker", "puzzle42")).toBe( + undefined + ); }); }); From e160ba48b5713d256d6a2b74239aedd4585a8953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 23 Aug 2018 14:14:49 +0200 Subject: [PATCH 13/70] add edit view --- scm-ui/public/locales/en/permissions.json | 6 +- .../components/table/PermissionRowEditable.js | 108 ++++++++++++++++++ .../components/table/PermissionsTable.js | 35 +++--- 3 files changed, 134 insertions(+), 15 deletions(-) create mode 100644 scm-ui/src/permissions/components/table/PermissionRowEditable.js diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json index 9e1eb0a841..686a01156d 100644 --- a/scm-ui/public/locales/en/permissions.json +++ b/scm-ui/public/locales/en/permissions.json @@ -4,8 +4,12 @@ "error-subtitle": "Unknown permissions error" }, "permission": { - "name": "Username", + "name": "Name", "type": "Type", "group-permission": "Group Permission" + }, + "edit-permission": { + "delete-button": "Delete", + "save-button": "Save Changes" } } diff --git a/scm-ui/src/permissions/components/table/PermissionRowEditable.js b/scm-ui/src/permissions/components/table/PermissionRowEditable.js new file mode 100644 index 0000000000..7666fa92b1 --- /dev/null +++ b/scm-ui/src/permissions/components/table/PermissionRowEditable.js @@ -0,0 +1,108 @@ +// @flow +import React from "react"; +import type { Permission } from "../../types/Permissions"; +import { Checkbox, InputField } from "../../../components/forms/index"; +import { DeleteButton, SubmitButton } from "../../../components/buttons/index"; +import { translate } from "react-i18next"; +import { Select } from "../../../components/forms"; + +type Props = { + permission: Permission, + t: string => string +}; + +type State = { + name: string, + type: string, + groupPermission: boolean +}; + +class PermissionRowEditable extends React.Component { + constructor(props: Props) { + super(props); + + this.state = { + name: "", + type: "READ", + groupPermission: false + }; + } + + componentDidMount() { + const { permission } = this.props; + if (permission) { + this.setState({ + name: permission.name, + type: permission.type, + groupPermission: permission.groupPermission + }); + } + } + + render() { + const { name, type, groupPermission } = this.state; + const { t } = this.props; + const types = ["READ", "OWNER", "GROUP"]; + + const deleteButton = this.props.permission._links.delete ? ( + + ) : null; + + return ( + + + + + + - + {deleteButton} @@ -79,7 +92,10 @@ class PermissionRowEditable extends React.Component { handleTypeChange = (type: string) => { this.setState({ - type: type + permission: { + ...this.state.permission, + type: type + } }); }; @@ -94,13 +110,19 @@ class PermissionRowEditable extends React.Component { handleNameChange = (name: string) => { this.setState({ - name: name + permission: { + ...this.state.permission, + name: name + } }); }; handleGroupPermissionChange = (groupPermission: boolean) => { this.setState({ - groupPermission: groupPermission + permission: { + ...this.state.permission, + groupPermission: groupPermission + } }); }; } diff --git a/scm-ui/src/permissions/components/table/PermissionsTable.js b/scm-ui/src/permissions/components/table/PermissionsTable.js deleted file mode 100644 index 7abc1d1418..0000000000 --- a/scm-ui/src/permissions/components/table/PermissionsTable.js +++ /dev/null @@ -1,41 +0,0 @@ -// @flow -import React from "react"; -import { translate } from "react-i18next"; -import PermissionRow from "./PermissionRow"; -import type { PermissionCollection } from "../../types/Permissions"; -import PermissionRowEditable from "./PermissionRowEditable"; - -type Props = { - t: string => string, - permissions: PermissionCollection -}; - -class PermissionsTable extends React.Component { - render() { - const { permissions, t } = this.props; - - return ( - - - - - - - - - - {permissions.map((permission, index) => { - if (permission._links.update) - return ( - - ); - else - return ; - })} - -
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
- ); - } -} - -export default translate("permissions")(PermissionsTable); diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 24b1ccef75..76cf56f944 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -11,7 +11,7 @@ import { import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; import type { PermissionCollection } from "../types/Permissions"; -import PermissionsTable from "../components/table/PermissionsTable"; +import PermissionsTable from "./PermissionsTable"; type Props = { namespace: string, @@ -36,7 +36,7 @@ class Permissions extends React.Component { } render() { - const { loading, error, permissions, t } = this.props; + const { loading, error, permissions, t, namespace, name } = this.props; if (error) { return ( { } if (permissions.length > 0) - return ; + return ; return
; } diff --git a/scm-ui/src/permissions/containers/PermissionsTable.js b/scm-ui/src/permissions/containers/PermissionsTable.js new file mode 100644 index 0000000000..d25bc85b1b --- /dev/null +++ b/scm-ui/src/permissions/containers/PermissionsTable.js @@ -0,0 +1,84 @@ +// @flow +import React from "react"; +import { translate } from "react-i18next"; +import PermissionRow from "../components/table/PermissionRow"; +import type { Permission, PermissionCollection } from "../types/Permissions"; +import PermissionRowEditable from "../components/table/PermissionRowEditable"; +import connect from "react-redux/es/connect/connect"; +import { modifyPermission } from "../modules/permissions"; +import type { History } from "history"; +import { + getModifyRepoFailure, + isModifyRepoPending +} from "../../repos/modules/repos"; + +type Props = { + t: string => string, + permissions: PermissionCollection, + modifyPermission: (Permission, string, string, () => void) => void, + namespace: string, + name: string, + history: History +}; + +class PermissionsTable extends React.Component { + permissionsModified = () => { + const { history, name, namespace } = this.props; + history.push(`/repo/${namespace}/${name}/permissions`); + }; + + render() { + const { permissions, t, namespace, name } = this.props; + + return ( + + + + + + + + + + {permissions.map((permission, index) => { + if (permission._links.update) + return ( + { + this.props.modifyPermission( + permission, + namespace, + name, + this.permissionsModified + ); + }} + /> + ); + else return ; + })} + +
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
+ ); + } +} + +const mapStateToProps = (state, ownProps) => {}; + +const mapDispatchToProps = dispatch => { + return { + modifyPermission: ( + permission: Permission, + namespace: string, + name: string, + callback: () => void + ) => { + dispatch(modifyPermission(permission, namespace, name, callback)); + } + }; +}; +export default connect( + mapStateToProps, + mapDispatchToProps +)(translate("permissions")(PermissionsTable)); diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index c82a4cba91..9d19974554 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,7 +2,7 @@ import { apiClient } from "../../apiclient"; import * as types from "../../modules/types"; import type { Action } from "../../types/Action"; -import type { PermissionCollection } from "../types/Permissions"; +import type { PermissionCollection, Permission } from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; @@ -16,9 +16,19 @@ export const FETCH_PERMISSIONS_SUCCESS = `${FETCH_PERMISSIONS}_${ export const FETCH_PERMISSIONS_FAILURE = `${FETCH_PERMISSIONS}_${ types.FAILURE_SUFFIX }`; - +export const MODIFY_PERMISSION = "scm/permissions/MODFIY_PERMISSION"; +export const MODIFY_PERMISSION_PENDING = `${MODIFY_PERMISSION}_${ + types.PENDING_SUFFIX +}`; +export const MODIFY_PERMISSION_SUCCESS = `${MODIFY_PERMISSION}_${ + types.SUCCESS_SUFFIX +}`; +export const MODIFY_PERMISSION_FAILURE = `${MODIFY_PERMISSION}_${ + types.FAILURE_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; +const CONTENT_TYPE = "application/vnd.scmm-permission+json"; // fetch permissions @@ -79,6 +89,79 @@ export function fetchPermissionsFailure( }; } +// modify permission + +export function modifyPermission( + permission: Permission, + namespace: string, + name: string, + callback?: () => void +) { + return function(dispatch: any) { + dispatch(modifyPermissionPending(permission, namespace, name)); + + return apiClient + .put(permission._links.update.href, permission, CONTENT_TYPE) + .then(() => { + dispatch(modifyPermissionSuccess(permission, namespace, name)); + if (callback) { + callback(); + } + }) + .catch(cause => { + const error = new Error( + `failed to modify permission: ${cause.message}` + ); + dispatch(modifyPermissionFailure(permission, error, namespace, name)); + }); + }; +} + +export function modifyPermissionPending( + permission: Permission, + namespace: string, + name: string +): Action { + return { + type: MODIFY_PERMISSION_PENDING, + payload: permission, + itemId: namespace + "/" + name + }; +} + +export function modifyPermissionSuccess( + permission: Permission, + namespace: string, + name: string +): Action { + return { + type: MODIFY_PERMISSION_SUCCESS, + payload: permission, + itemId: namespace + "/" + name + }; +} + +export function modifyPermissionFailure( + permission: Permission, + error: Error, + namespace: string, + name: string +): Action { + return { + type: MODIFY_PERMISSION_FAILURE, + payload: { error, permission }, + itemId: namespace + "/" + name + }; +} + +function newPermissions(modifiedPermission: Permission) { + let newPermissions = []; + newPermissions[0] = modifiedPermission; + return { + newPermissions + }; +} + // reducer export default function reducer( state: Object = {}, @@ -94,6 +177,12 @@ export default function reducer( ...state, [action.itemId]: action.payload }; + case MODIFY_PERMISSION_SUCCESS: + const newPermission = newPermissions(action.payload); + return { + ...state, + [action.itemId]: newPermission + }; default: return state; } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index dcc302e97a..2e7e7806c5 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -8,12 +8,18 @@ import reducer, { getPermissionsOfRepo, isFetchPermissionsPending, getFetchPermissionsFailure, + modifyPermission, + modifyPermissionSuccess, + MODIFY_PERMISSION_FAILURE, + MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, FETCH_PERMISSIONS_PENDING, FETCH_PERMISSIONS_SUCCESS, - FETCH_PERMISSIONS_FAILURE + FETCH_PERMISSIONS_FAILURE, + MODIFY_PERMISSION_SUCCESS } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; +import { modifyRepoSuccess } from "../../repos/modules/repos"; const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", @@ -114,6 +120,81 @@ describe("permission fetch", () => { expect(actions[1].payload).toBeDefined(); }); }); + + it("should successfully modify user_eins permission", () => { + fetchMock.putOnce( + hitchhiker_puzzle42Permission_user_eins._links.update.href, + { + status: 204 + } + ); + + let editedPermission = { ...hitchhiker_puzzle42Permission_user_eins }; + editedPermission.type = "OWNER"; + + const store = mockStore({}); + + return store + .dispatch(modifyPermission(editedPermission, "hitchhiker", "puzzle42")) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(MODIFY_PERMISSION_PENDING); + expect(actions[1].type).toEqual(MODIFY_PERMISSION_SUCCESS); + }); + }); + + it("should successfully modify user_eins permission and call the callback", () => { + fetchMock.putOnce( + hitchhiker_puzzle42Permission_user_eins._links.update.href, + { + status: 204 + } + ); + + let editedPermission = { ...hitchhiker_puzzle42Permission_user_eins }; + editedPermission.type = "OWNER"; + + const store = mockStore({}); + + let called = false; + const callback = () => { + called = true; + }; + + return store + .dispatch( + modifyPermission(editedPermission, "hitchhiker", "puzzle42", callback) + ) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(MODIFY_PERMISSION_PENDING); + expect(actions[1].type).toEqual(MODIFY_PERMISSION_SUCCESS); + expect(called).toBe(true); + }); + }); + + it("should fail modifying on HTTP 500", () => { + fetchMock.putOnce( + hitchhiker_puzzle42Permission_user_eins._links.update.href, + { + status: 500 + } + ); + + let editedPermission = { ...hitchhiker_puzzle42Permission_user_eins }; + editedPermission.type = "OWNER"; + + const store = mockStore({}); + + return store + .dispatch(modifyPermission(editedPermission, "hitchhiker", "puzzle42")) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(MODIFY_PERMISSION_PENDING); + expect(actions[1].type).toEqual(MODIFY_PERMISSION_FAILURE); + expect(actions[1].payload).toBeDefined(); + }); + }); }); describe("permissions reducer", () => { @@ -145,6 +226,23 @@ describe("permissions reducer", () => { hitchhiker_puzzle42Permissions ); }); + + it("should update permission", () => { + const oldState = { + permissions: { + "hitchhiker/puzzle42": { + hitchhiker_puzzle42Permission_user_eins + } + } + }; + let permissionEdited = { ...hitchhiker_puzzle42Permission_user_eins }; + permissionEdited.type = "OWNER"; + const newState = reducer( + oldState, + modifyPermissionSuccess(permissionEdited, "hitchhiker", "puzzle42") + ); + expect(newState["hitchhiker/puzzle42"]).toEqual(permissionEdited); + }); }); describe("permissions selectors", () => { From 180ba2dbbb977943366f883d07791927db8f94f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 08:36:24 +0200 Subject: [PATCH 15/70] modify fetch permissions to new endpoint --- scm-ui/src/permissions/modules/permissions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 9d19974554..fcbefcd64a 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -175,7 +175,7 @@ export default function reducer( case FETCH_PERMISSIONS_SUCCESS: return { ...state, - [action.itemId]: action.payload + [action.itemId]: action.payload._embedded.permissions }; case MODIFY_PERMISSION_SUCCESS: const newPermission = newPermissions(action.payload); From b2a7aead9721ea32b0bafe0adfc8831d7e58e455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 08:49:09 +0200 Subject: [PATCH 16/70] update tests --- scm-ui/src/permissions/modules/permissions.js | 2 +- scm-ui/src/permissions/modules/permissions.test.js | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index fcbefcd64a..87bb47cbe0 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -62,7 +62,7 @@ export function fetchPermissionsPending( } export function fetchPermissionsSuccess( - permissions: PermissionCollection, + permissions: any, namespace: string, name: string ): Action { diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 2e7e7806c5..e2cbb41181 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -66,6 +66,12 @@ const hitchhiker_puzzle42Permissions: PermissionCollection = [ hitchhiker_puzzle42Permission_user_zwei ]; +const hitchhiker_puzzle42RepoPermissions = { + _embedded: { + permissions: hitchhiker_puzzle42Permissions + } +}; + describe("permission fetch", () => { const REPOS_URL = "/scm/api/rest/v2/repositories"; const mockStore = configureMockStore([thunk]); @@ -78,7 +84,7 @@ describe("permission fetch", () => { it("should successfully fetch permissions to repo hitchhiker/puzzle42", () => { fetchMock.getOnce( REPOS_URL + "/hitchhiker/puzzle42/permissions", - hitchhiker_puzzle42Permissions + hitchhiker_puzzle42RepoPermissions ); const expectedActions = [ @@ -92,7 +98,7 @@ describe("permission fetch", () => { }, { type: FETCH_PERMISSIONS_SUCCESS, - payload: hitchhiker_puzzle42Permissions, + payload: hitchhiker_puzzle42RepoPermissions, itemId: "hitchhiker/puzzle42" } ]; @@ -216,7 +222,7 @@ describe("permissions reducer", () => { const newState = reducer( {}, fetchPermissionsSuccess( - hitchhiker_puzzle42Permissions, + hitchhiker_puzzle42RepoPermissions, "hitchhiker", "puzzle42" ) From 625d51fa5230199fec338030c9406dd4b8c28a81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 13:39:32 +0200 Subject: [PATCH 17/70] implement modify for type --- scm-ui/src/modules/failure.js | 1 - .../src/permissions/containers/Permissions.js | 10 +- .../containers/PermissionsTable.js | 41 ++------ .../SinglePermission.js} | 93 +++++++++---------- scm-ui/src/permissions/modules/permissions.js | 72 +++++++++++--- .../permissions/modules/permissions.test.js | 70 ++++++++++++-- 6 files changed, 181 insertions(+), 106 deletions(-) rename scm-ui/src/permissions/{components/table/PermissionRowEditable.js => containers/SinglePermission.js} (53%) diff --git a/scm-ui/src/modules/failure.js b/scm-ui/src/modules/failure.js index 94ff209ca6..9328b59e78 100644 --- a/scm-ui/src/modules/failure.js +++ b/scm-ui/src/modules/failure.js @@ -59,7 +59,6 @@ export function getFailure( itemId?: string | number ) { if (state.failure) { - console.log(state.failure); let identifier = actionType; if (itemId) { identifier += "/" + itemId; diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 76cf56f944..9693826065 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -6,7 +6,7 @@ import { fetchPermissions, getFetchPermissionsFailure, isFetchPermissionsPending, - getPermissionsOfRepo + getPermissionsOfRepo, } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -52,7 +52,13 @@ class Permissions extends React.Component { } if (permissions.length > 0) - return ; + return ( + + ); return
; } diff --git a/scm-ui/src/permissions/containers/PermissionsTable.js b/scm-ui/src/permissions/containers/PermissionsTable.js index d25bc85b1b..4b6bdac23e 100644 --- a/scm-ui/src/permissions/containers/PermissionsTable.js +++ b/scm-ui/src/permissions/containers/PermissionsTable.js @@ -3,14 +3,8 @@ import React from "react"; import { translate } from "react-i18next"; import PermissionRow from "../components/table/PermissionRow"; import type { Permission, PermissionCollection } from "../types/Permissions"; -import PermissionRowEditable from "../components/table/PermissionRowEditable"; -import connect from "react-redux/es/connect/connect"; -import { modifyPermission } from "../modules/permissions"; +import SinglePermission from "./SinglePermission"; import type { History } from "history"; -import { - getModifyRepoFailure, - isModifyRepoPending -} from "../../repos/modules/repos"; type Props = { t: string => string, @@ -18,12 +12,14 @@ type Props = { modifyPermission: (Permission, string, string, () => void) => void, namespace: string, name: string, + match: any, history: History }; class PermissionsTable extends React.Component { permissionsModified = () => { const { history, name, namespace } = this.props; + console.log(history); history.push(`/repo/${namespace}/${name}/permissions`); }; @@ -43,17 +39,11 @@ class PermissionsTable extends React.Component { {permissions.map((permission, index) => { if (permission._links.update) return ( - { - this.props.modifyPermission( - permission, - namespace, - name, - this.permissionsModified - ); - }} /> ); else return ; @@ -64,21 +54,4 @@ class PermissionsTable extends React.Component { } } -const mapStateToProps = (state, ownProps) => {}; - -const mapDispatchToProps = dispatch => { - return { - modifyPermission: ( - permission: Permission, - namespace: string, - name: string, - callback: () => void - ) => { - dispatch(modifyPermission(permission, namespace, name, callback)); - } - }; -}; -export default connect( - mapStateToProps, - mapDispatchToProps -)(translate("permissions")(PermissionsTable)); +export default translate("permissions")(PermissionsTable); diff --git a/scm-ui/src/permissions/components/table/PermissionRowEditable.js b/scm-ui/src/permissions/containers/SinglePermission.js similarity index 53% rename from scm-ui/src/permissions/components/table/PermissionRowEditable.js rename to scm-ui/src/permissions/containers/SinglePermission.js index 6bed2bd799..403efd5e1b 100644 --- a/scm-ui/src/permissions/components/table/PermissionRowEditable.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -1,22 +1,31 @@ // @flow import React from "react"; -import type { Permission } from "../../types/Permissions"; -import { Checkbox, InputField } from "../../../components/forms/index"; -import { DeleteButton, SubmitButton } from "../../../components/buttons/index"; +import type { Permission } from "../types/Permissions"; +import { Checkbox } from "../../components/forms/index"; +import { DeleteButton } from "../../components/buttons/index"; import { translate } from "react-i18next"; -import { Select } from "../../../components/forms/index"; +import { Select } from "../../components/forms/index"; +import { modifyPermission } from "../modules/permissions"; +import connect from "react-redux/es/connect/connect"; +import { withRouter } from "react-router-dom"; +import type { History } from "history"; type Props = { submitForm: Permission => void, + modifyPermission: (Permission, string, string) => void, permission: Permission, - t: string => string + t: string => string, + namespace: string, + name: string, + match: any, + history: History }; type State = { permission: Permission }; -class PermissionRowEditable extends React.Component { +class SinglePermission extends React.Component { constructor(props: Props) { super(props); @@ -43,10 +52,7 @@ class PermissionRowEditable extends React.Component { }); } } - submit = (event: Event) => { - event.preventDefault(); - this.props.submitForm(this.state.permission); - }; + render() { const { permission } = this.state; const { t } = this.props; @@ -58,12 +64,7 @@ class PermissionRowEditable extends React.Component { return ( - - - + {permission.name} + + ) : ( + {permission.type} + ); + return ( {permission.name} - - { this.field = input; diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 9730282330..e5b6436810 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -5,10 +5,16 @@ import { Checkbox } from "../../components/forms/index"; import { DeleteButton } from "../../components/buttons/index"; import { translate } from "react-i18next"; import { Select } from "../../components/forms/index"; -import { modifyPermission } from "../modules/permissions"; +import { + modifyPermission, + isModifyPermissionPending, + getModifyPermissionFailure, + modifyPermissionReset +} from "../modules/permissions"; import connect from "react-redux/es/connect/connect"; import { withRouter } from "react-router-dom"; import type { History } from "history"; +import ErrorNotification from "../../components/ErrorNotification"; type Props = { submitForm: Permission => void, @@ -18,7 +24,10 @@ type Props = { namespace: string, name: string, match: any, - history: History + history: History, + loading: boolean, + error: Error, + permissionReset: (string, string, string) => void }; type State = { @@ -41,6 +50,11 @@ class SinglePermission extends React.Component { componentDidMount() { const { permission } = this.props; + this.props.permissionReset( + this.props.namespace, + this.props.name, + permission.name + ); if (permission) { this.setState({ permission: { @@ -55,9 +69,8 @@ class SinglePermission extends React.Component { render() { const { permission } = this.state; - const { t } = this.props; + const { t, loading, error } = this.props; const types = ["READ", "OWNER", "GROUP"]; - const deleteButton = this.props.permission._links.delete ? ( ) : null; @@ -68,12 +81,17 @@ class SinglePermission extends React.Component { onChange={this.handleTypeChange} value={permission.type ? permission.type : ""} options={this.createSelectOptions(types)} + loading={loading} /> ) : ( {permission.type} ); + const errorNotification = error ? ( + + ) : null; + return ( {permission.name} @@ -81,7 +99,7 @@ class SinglePermission extends React.Component { {typeSelector} - {deleteButton} + {deleteButton} {errorNotification} ); } @@ -116,7 +134,23 @@ class SinglePermission extends React.Component { } } -const mapStateToProps = (state, ownProps) => {}; +const mapStateToProps = (state, ownProps) => { + const permission = ownProps.permission; + const loading = isModifyPermissionPending( + state, + ownProps.namespace, + ownProps.name, + permission.name + ); + const error = getModifyPermissionFailure( + state, + ownProps.namespace, + ownProps.name, + permission.name + ); + + return { loading, error }; +}; const mapDispatchToProps = dispatch => { return { @@ -126,6 +160,13 @@ const mapDispatchToProps = dispatch => { name: string ) => { dispatch(modifyPermission(permission, namespace, name)); + }, + permissionReset: ( + namespace: string, + name: string, + permissionname: string + ) => { + dispatch(modifyPermissionReset(namespace, name, permissionname)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index db83bde08d..8c51c77f42 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -26,6 +26,9 @@ export const MODIFY_PERMISSION_SUCCESS = `${MODIFY_PERMISSION}_${ export const MODIFY_PERMISSION_FAILURE = `${MODIFY_PERMISSION}_${ types.FAILURE_SUFFIX }`; +export const MODIFY_PERMISSION_RESET = `${MODIFY_PERMISSION}_${ + types.RESET_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; const CONTENT_TYPE = "application/vnd.scmm-permission+json"; @@ -98,15 +101,11 @@ export function modifyPermission( callback?: () => void ) { return function(dispatch: any) { - dispatch( - modifyPermissionPending(permission, namespace, name) - ); + dispatch(modifyPermissionPending(permission, namespace, name)); return apiClient .put(permission._links.update.href, permission, CONTENT_TYPE) .then(() => { - dispatch( - modifyPermissionSuccess(permission, namespace, name) - ); + dispatch(modifyPermissionSuccess(permission, namespace, name)); if (callback) { callback(); } @@ -142,7 +141,7 @@ export function modifyPermissionSuccess( payload: { permission }, - itemId: namespace + "/" + name + itemId: namespace + "/" + name + "/" + permission.name }; } @@ -163,22 +162,27 @@ function newPermissions( oldPermissions: PermissionCollection, newPermission: Permission ) { - console.log("oldPermissions:"); - console.log(oldPermissions); - console.log("new Permission:"); - console.log(newPermission); for (let i = 0; i < oldPermissions.length; i++) { - console.log("permissionname:"); - console.log("an der stelle i: " + oldPermissions[i].name); if (oldPermissions[i].name === newPermission.name) { oldPermissions.splice(i, 1, newPermission); - console.log("new Permissions"); - console.log(oldPermissions); return oldPermissions; } } } +// reset + +export function modifyPermissionReset( + namespace: string, + name: string, + permissionname: string +) { + return { + type: MODIFY_PERMISSION_RESET, + itemId: namespace + "/" + name + "/" + permissionname + }; +} + // reducer export default function reducer( state: Object = {}, From de912f39e67c41fc0d915736cec566561d420f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 14:38:31 +0200 Subject: [PATCH 21/70] fix wrong test --- scm-ui/src/permissions/modules/permissions.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 8c51c77f42..950fd8a653 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -139,7 +139,8 @@ export function modifyPermissionSuccess( return { type: MODIFY_PERMISSION_SUCCESS, payload: { - permission + permission, + position: namespace + "/" + name }, itemId: namespace + "/" + name + "/" + permission.name }; @@ -170,8 +171,6 @@ function newPermissions( } } -// reset - export function modifyPermissionReset( namespace: string, name: string, @@ -199,13 +198,14 @@ export default function reducer( [action.itemId]: action.payload._embedded.permissions }; case MODIFY_PERMISSION_SUCCESS: + const positionOfPermission = action.payload.position; const newPermission = newPermissions( - state[action.itemId], + state[action.payload.position], action.payload.permission ); return { ...state, - [action.itemId]: newPermission + [positionOfPermission]: newPermission }; default: return state; From cc7474d4f456f7afbc0ee17188fa8ef0a0dc055e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 16:00:48 +0200 Subject: [PATCH 22/70] add handling of create link and createPermission handling --- .../containers/SinglePermission.js | 7 +- scm-ui/src/permissions/modules/permissions.js | 102 ++++++++++++++++- .../permissions/modules/permissions.test.js | 104 +++++++++++++++++- 3 files changed, 202 insertions(+), 11 deletions(-) diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index e5b6436810..f125d4025b 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -70,7 +70,7 @@ class SinglePermission extends React.Component { render() { const { permission } = this.state; const { t, loading, error } = this.props; - const types = ["READ", "OWNER", "GROUP"]; + const types = ["READ", "OWNER", "WRITE"]; const deleteButton = this.props.permission._links.delete ? ( ) : null; @@ -99,7 +99,10 @@ class SinglePermission extends React.Component { {typeSelector} - {deleteButton} {errorNotification} + + {deleteButton} + {errorNotification} + ); } diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 950fd8a653..71b78e9f6b 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -5,6 +5,14 @@ import type { Action } from "../../types/Action"; import type { PermissionCollection, Permission } from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; +import type { User } from "../../users/types/User"; +import { Dispatch } from "redux"; +import { + CREATE_USER_FAILURE, + CREATE_USER_PENDING, + CREATE_USER_RESET, + CREATE_USER_SUCCESS +} from "../../users/modules/users"; export const FETCH_PERMISSIONS = "scm/permissions/FETCH_PERMISSIONS"; export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ @@ -29,6 +37,17 @@ export const MODIFY_PERMISSION_FAILURE = `${MODIFY_PERMISSION}_${ export const MODIFY_PERMISSION_RESET = `${MODIFY_PERMISSION}_${ types.RESET_SUFFIX }`; +export const CREATE_PERMISSION = "scm/permissions/CREATE_PERMISSION"; +export const CREATE_PERMISSION_PENDING = `${CREATE_PERMISSION}_${ + types.PENDING_SUFFIX +}`; +export const CREATE_PERMISSION_SUCCESS = `$CREATE_PERMISSION}_${ + types.SUCCESS_SUFFIX +}`; +export const CREATE_PERMISSION_FAILURE = `${CREATE_PERMISSION}_${ + types.FAILURE_SUFFIX +}`; + const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; const CONTENT_TYPE = "application/vnd.scmm-permission+json"; @@ -182,6 +201,75 @@ export function modifyPermissionReset( }; } +// create permission +export function createPermission( + permission: Permission, + namespace: string, + name: string, + callback?: () => void +) { + return function(dispatch: Dispatch) { + dispatch(createPermissionPending(permission, namespace, name)); + return apiClient + .post( + `${REPOS_URL}/${namespace}/${name}/${PERMISSIONS_URL}`, + permission, + CONTENT_TYPE + ) + .then(() => { + dispatch(createPermissionSuccess(namespace, name)); + if (callback) { + callback(); + } + }) + .catch(err => + dispatch( + createPermissionFailure( + new Error( + `failed to add permission ${permission.name}: ${err.message}` + ), + namespace, + name + ) + ) + ); + }; +} + +export function createPermissionPending( + permission: Permission, + namespace: string, + name: string +): Action { + return { + type: CREATE_PERMISSION_PENDING, + payload: permission, + itemId: namespace + "/" + name + }; +} + +export function createPermissionSuccess( + namespace: string, + name: string +): Action { + return { + type: CREATE_PERMISSION_SUCCESS, + itemId: namespace + "/" + name + }; +} + +export function createPermissionFailure( + error: Error, + namespace: string, + name: string +): Action { + return { + type: CREATE_PERMISSION_FAILURE, + payload: error, + itemId: namespace + "/" + name + }; +} + // reducer export default function reducer( state: Object = {}, @@ -195,17 +283,23 @@ export default function reducer( case FETCH_PERMISSIONS_SUCCESS: return { ...state, - [action.itemId]: action.payload._embedded.permissions + [action.itemId]: { + entries: action.payload._embedded.permissions, + createPermission: action.payload._links.create ? true : false + } }; case MODIFY_PERMISSION_SUCCESS: const positionOfPermission = action.payload.position; const newPermission = newPermissions( - state[action.payload.position], + state[action.payload.position].entries, action.payload.permission ); return { ...state, - [positionOfPermission]: newPermission + [positionOfPermission]: { + ...state[positionOfPermission], + entries: newPermission + } }; default: return state; @@ -220,7 +314,7 @@ export function getPermissionsOfRepo( name: string ) { if (state.permissions && state.permissions[namespace + "/" + name]) { - const permissions = state.permissions[namespace + "/" + name]; + const permissions = state.permissions[namespace + "/" + name].entries; return permissions; } } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 9fca40867c..376c855d21 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -12,6 +12,7 @@ import reducer, { modifyPermissionSuccess, getModifyPermissionFailure, isModifyPermissionPending, + createPermission, MODIFY_PERMISSION_FAILURE, MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, @@ -19,7 +20,12 @@ import reducer, { FETCH_PERMISSIONS_SUCCESS, FETCH_PERMISSIONS_FAILURE, MODIFY_PERMISSION_SUCCESS, - MODIFY_PERMISSION + MODIFY_PERMISSION, + CREATE_PERMISSION, + CREATE_PERMISSION_PENDING, + CREATE_PERMISSION_SUCCESS, + CREATE_PERMISSION_FAILURE, + createPermissionSuccess } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -71,6 +77,11 @@ const hitchhiker_puzzle42Permissions: PermissionCollection = [ const hitchhiker_puzzle42RepoPermissions = { _embedded: { permissions: hitchhiker_puzzle42Permissions + }, + _links: { + create: { + link: "link" + } } }; @@ -203,6 +214,83 @@ describe("permission fetch", () => { expect(actions[1].payload).toBeDefined(); }); }); + + it("should add a permission successfully", () => { + // unmatched + fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { + status: 204 + }); + + // after create, the users are fetched again + fetchMock.getOnce( + REPOS_URL + "/hitchhiker/puzzle42", + hitchhiker_puzzle42RepoPermissions + ); + + const store = mockStore({}); + return store + .dispatch( + createPermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42" + ) + ) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(CREATE_PERMISSION_PENDING); + expect(actions[1].type).toEqual(CREATE_PERMISSION_SUCCESS); + }); + }); + + it("should fail adding a permission on HTTP 500", () => { + fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { + status: 500 + }); + + const store = mockStore({}); + return store + .dispatch( + createPermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42" + ) + ) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(CREATE_PERMISSION_PENDING); + expect(actions[1].type).toEqual(CREATE_PERMISSION_FAILURE); + expect(actions[1].payload).toBeDefined(); + }); + }); + + it("should call the callback after permission successfully created", () => { + // unmatched + fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { + status: 204 + }); + + let callMe = "not yet"; + + const callback = () => { + callMe = "yeah"; + }; + + const store = mockStore({}); + return store + .dispatch( + createPermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42", + callback + ) + ) + .then(() => { + expect(callMe).toBe("yeah"); + }); + }); }); describe("permissions reducer", () => { @@ -230,19 +318,23 @@ describe("permissions reducer", () => { ) ); - expect(newState["hitchhiker/puzzle42"]).toBe( + expect(newState["hitchhiker/puzzle42"].entries).toBe( hitchhiker_puzzle42Permissions ); }); it("should update permission", () => { const oldState = { - "hitchhiker/puzzle42": [hitchhiker_puzzle42Permission_user_eins] + "hitchhiker/puzzle42": { + entries: [hitchhiker_puzzle42Permission_user_eins] + } }; let permissionEdited = { ...hitchhiker_puzzle42Permission_user_eins }; permissionEdited.type = "OWNER"; let expectedState = { - "hitchhiker/puzzle42": [permissionEdited] + "hitchhiker/puzzle42": { + entries: [permissionEdited] + } }; const newState = reducer( oldState, @@ -260,7 +352,9 @@ describe("permissions selectors", () => { it("should return the permissions of one repository", () => { const state = { permissions: { - "hitchhiker/puzzle42": hitchhiker_puzzle42Permissions + "hitchhiker/puzzle42": { + entries: hitchhiker_puzzle42Permissions + } } }; From 20af5fe9b6ac7668144375293ab3fad805d63b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 16:08:42 +0200 Subject: [PATCH 23/70] add seletor for createPermission --- scm-ui/src/permissions/modules/permissions.js | 8 ++++++++ .../src/permissions/modules/permissions.test.js | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 71b78e9f6b..666a532d03 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -360,3 +360,11 @@ export function getModifyPermissionFailure( namespace + "/" + name + "/" + permissionname ); } + +export function hasCreatePermission( + state: Object, + namespace: string, + name: string +) { + return state.permissions[namespace + "/" + name].createPermission; +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 376c855d21..524e1a1d48 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -13,6 +13,7 @@ import reducer, { getModifyPermissionFailure, isModifyPermissionPending, createPermission, + hasCreatePermission, MODIFY_PERMISSION_FAILURE, MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, @@ -433,4 +434,19 @@ describe("permissions selectors", () => { getModifyPermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") ).toBe(undefined); }); + + it("should return true, when createPermission is true", () => { + const state = { + permissions: { + ["/hitchhiker/puzzle42"]: { + createPermission: true + } + } + }; + expect(hasCreatePermission(state, "hitchhiker", "puzzle42")).toBe(true); + }); + + it("should return false, when createPermission is false", () => { + expect(hasCreatePermission({}, "hitchiker", "puzzle42")).toEqual(false); + }); }); From 6e54b054c149a5e28906493092914d9d7287a8a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 28 Aug 2018 16:28:56 +0200 Subject: [PATCH 24/70] add selector for createPermission and show create dummy in uiC --- .../components/CreatePermissionForm.js | 33 +++++++++ .../src/permissions/containers/Permissions.js | 69 ++++++++++++------- scm-ui/src/permissions/modules/permissions.js | 11 +-- .../permissions/modules/permissions.test.js | 11 ++- 4 files changed, 90 insertions(+), 34 deletions(-) create mode 100644 scm-ui/src/permissions/components/CreatePermissionForm.js diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js new file mode 100644 index 0000000000..914a097f9c --- /dev/null +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -0,0 +1,33 @@ +// @flow +import React from "react"; +import type { Permission } from "../types/Permissions"; +import { translate } from "react-i18next"; + +type Props = { + t: string => string +}; + +type State = { + permission: Permission +}; + +class CreatePermissionForm extends React.Component { + constructor(props: Props) { + super(props); + + this.state = { + permission: { + name: "", + type: "READ", + groupPermission: false, + _links: {} + } + }; + } + + render() { + return "Show Permissions here!"; + } +} + +export default translate("permissions")(CreatePermissionForm); diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index b02e0c778e..c3eabe7d16 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -6,12 +6,14 @@ import { fetchPermissions, getFetchPermissionsFailure, isFetchPermissionsPending, - getPermissionsOfRepo + getPermissionsOfRepo, + hasCreatePermission } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; import type { PermissionCollection } from "../types/Permissions"; import SinglePermission from "./SinglePermission"; +import CreatePermissionForm from "../components/CreatePermissionForm"; type Props = { namespace: string, @@ -19,6 +21,7 @@ type Props = { loading: boolean, error: Error, permissions: PermissionCollection, + createPermission: boolean, //dispatch functions fetchPermissions: (namespace: string, name: string) => void, @@ -36,7 +39,16 @@ class Permissions extends React.Component { } render() { - const { loading, error, permissions, t, namespace, name } = this.props; + const { + loading, + error, + permissions, + t, + namespace, + name, + createPermission + } = this.props; + if (error) { return ( { return ; } + const createPermissionForm = createPermission ? ( + + ) : null; + if (permissions.length > 0) return ( - - - - - - - - - - {permissions.map((permission, index) => { - return ( - - ); - })} - -
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
+
+ + + + + + + + + + {permissions.map((permission, index) => { + return ( + + ); + })} + +
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
+ {createPermissionForm} +
); return
; @@ -86,12 +105,14 @@ const mapStateToProps = (state, ownProps) => { const error = getFetchPermissionsFailure(state, namespace, name); const loading = isFetchPermissionsPending(state, namespace, name); const permissions = getPermissionsOfRepo(state, namespace, name); + const createPermission = hasCreatePermission(state, namespace, name); return { namespace, name, error, loading, - permissions + permissions, + createPermission }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 666a532d03..45b142ee91 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -5,14 +5,7 @@ import type { Action } from "../../types/Action"; import type { PermissionCollection, Permission } from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; -import type { User } from "../../users/types/User"; import { Dispatch } from "redux"; -import { - CREATE_USER_FAILURE, - CREATE_USER_PENDING, - CREATE_USER_RESET, - CREATE_USER_SUCCESS -} from "../../users/modules/users"; export const FETCH_PERMISSIONS = "scm/permissions/FETCH_PERMISSIONS"; export const FETCH_PERMISSIONS_PENDING = `${FETCH_PERMISSIONS}_${ @@ -366,5 +359,7 @@ export function hasCreatePermission( namespace: string, name: string ) { - return state.permissions[namespace + "/" + name].createPermission; + if (state.permissions && state.permissions[namespace + "/" + name]) + return state.permissions[namespace + "/" + name].createPermission; + else return null; } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 524e1a1d48..c999c16b41 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -438,7 +438,7 @@ describe("permissions selectors", () => { it("should return true, when createPermission is true", () => { const state = { permissions: { - ["/hitchhiker/puzzle42"]: { + ["hitchhiker/puzzle42"]: { createPermission: true } } @@ -447,6 +447,13 @@ describe("permissions selectors", () => { }); it("should return false, when createPermission is false", () => { - expect(hasCreatePermission({}, "hitchiker", "puzzle42")).toEqual(false); + const state = { + permissions: { + ["hitchhiker/puzzle42"]: { + createPermission: false + } + } + }; + expect(hasCreatePermission(state, "hitchhiker", "puzzle42")).toEqual(false); }); }); From 029503e7a3c00699d1dbacfb476703aa47ae2a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 08:50:15 +0200 Subject: [PATCH 25/70] add delete functionality --- scm-ui/src/permissions/modules/permissions.js | 107 +++++++++++++++- .../permissions/modules/permissions.test.js | 119 +++++++++++++++++- 2 files changed, 223 insertions(+), 3 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 45b142ee91..8eaac31250 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -34,12 +34,22 @@ export const CREATE_PERMISSION = "scm/permissions/CREATE_PERMISSION"; export const CREATE_PERMISSION_PENDING = `${CREATE_PERMISSION}_${ types.PENDING_SUFFIX }`; -export const CREATE_PERMISSION_SUCCESS = `$CREATE_PERMISSION}_${ +export const CREATE_PERMISSION_SUCCESS = `${CREATE_PERMISSION}_${ types.SUCCESS_SUFFIX }`; export const CREATE_PERMISSION_FAILURE = `${CREATE_PERMISSION}_${ types.FAILURE_SUFFIX }`; +export const DELETE_PERMISSION = "scm/permissions/DELETE_PERMISSION"; +export const DELETE_PERMISSION_PENDING = `${DELETE_PERMISSION}_${ + types.PENDING_SUFFIX +}`; +export const DELETE_PERMISSION_SUCCESS = `${DELETE_PERMISSION}_${ + types.SUCCESS_SUFFIX +}`; +export const DELETE_PERMISSION_FAILURE = `${DELETE_PERMISSION}_${ + types.FAILURE_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; @@ -263,6 +273,88 @@ export function createPermissionFailure( }; } +// delete permission + +export function deletePermission( + permission: Permission, + namespace: string, + name: string, + callback?: () => void +) { + return function(dispatch: any) { + dispatch(deletePermissionPending(permission, namespace, name)); + return apiClient + .delete(permission._links.delete.href) + .then(() => { + dispatch(deletePermissionSuccess(permission, namespace, name)); + if (callback) { + callback(); + } + }) + .catch(cause => { + const error = new Error( + `could not delete permission ${permission.name}: ${cause.message}` + ); + dispatch(deletePermissionFailure(permission, namespace, name, error)); + }); + }; +} + +export function deletePermissionPending( + permission: Permission, + namespace: string, + name: string +): Action { + return { + type: DELETE_PERMISSION_PENDING, + payload: permission, + itemId: namespace + "/" + name + "/" + permission.name + }; +} + +export function deletePermissionSuccess( + permission: Permission, + namespace: string, + name: string +): Action { + return { + type: DELETE_PERMISSION_SUCCESS, + payload: { + permission, + position: namespace + "/" + name + }, + itemId: namespace + "/" + name + "/" + permission.name + }; +} + +export function deletePermissionFailure( + permission: Permission, + namespace: string, + name: string, + error: Error +): Action { + return { + type: DELETE_PERMISSION_FAILURE, + payload: { + error, + permission + }, + itemId: namespace + "/" + name + "/" + permission.name + }; +} + +function deletePermissionFromState( + oldPermissions: PermissionCollection, + permission: Permission +) { + for (let i = 0; i < oldPermissions.length; i++) { + if (oldPermissions[i] === permission) { + oldPermissions.splice(i, 1); + } + } + return oldPermissions; +} + // reducer export default function reducer( state: Object = {}, @@ -294,6 +386,19 @@ export default function reducer( entries: newPermission } }; + case DELETE_PERMISSION_SUCCESS: + const permissionPosition = action.payload.position; + const new_Permissions = deletePermissionFromState( + state[action.payload.position].entries, + action.payload.permission + ); + return { + ...state, + [permissionPosition]: { + ...state[permissionPosition], + entries: new_Permissions + } + }; default: return state; } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index c999c16b41..245fa39541 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -14,6 +14,8 @@ import reducer, { isModifyPermissionPending, createPermission, hasCreatePermission, + deletePermission, + deletePermissionSuccess, MODIFY_PERMISSION_FAILURE, MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, @@ -22,11 +24,12 @@ import reducer, { FETCH_PERMISSIONS_FAILURE, MODIFY_PERMISSION_SUCCESS, MODIFY_PERMISSION, - CREATE_PERMISSION, CREATE_PERMISSION_PENDING, CREATE_PERMISSION_SUCCESS, CREATE_PERMISSION_FAILURE, - createPermissionSuccess + DELETE_PERMISSION_PENDING, + DELETE_PERMISSION_SUCCESS, + DELETE_PERMISSION_FAILURE } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -292,6 +295,89 @@ describe("permission fetch", () => { expect(callMe).toBe("yeah"); }); }); + it("should delete successfully permission user_eins", () => { + fetchMock.deleteOnce( + hitchhiker_puzzle42Permission_user_eins._links.delete.href, + { + status: 204 + } + ); + + const store = mockStore({}); + return store + .dispatch( + deletePermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42" + ) + ) + .then(() => { + const actions = store.getActions(); + expect(actions.length).toBe(2); + expect(actions[0].type).toEqual(DELETE_PERMISSION_PENDING); + expect(actions[0].payload).toBe( + hitchhiker_puzzle42Permission_user_eins + ); + expect(actions[1].type).toEqual(DELETE_PERMISSION_SUCCESS); + }); + }); + + it("should call the callback, after successful delete", () => { + fetchMock.deleteOnce( + hitchhiker_puzzle42Permission_user_eins._links.delete.href, + { + status: 204 + } + ); + + let called = false; + const callMe = () => { + called = true; + }; + + const store = mockStore({}); + return store + .dispatch( + deletePermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42", + callMe + ) + ) + .then(() => { + expect(called).toBeTruthy(); + }); + }); + + it("should fail to delete permission", () => { + fetchMock.deleteOnce( + hitchhiker_puzzle42Permission_user_eins._links.delete.href, + { + status: 500 + } + ); + + const store = mockStore({}); + return store + .dispatch( + deletePermission( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42" + ) + ) + .then(() => { + const actions = store.getActions(); + expect(actions[0].type).toEqual(DELETE_PERMISSION_PENDING); + expect(actions[0].payload).toBe( + hitchhiker_puzzle42Permission_user_eins + ); + expect(actions[1].type).toEqual(DELETE_PERMISSION_FAILURE); + expect(actions[1].payload).toBeDefined(); + }); + }); }); describe("permissions reducer", () => { @@ -345,6 +431,35 @@ describe("permissions reducer", () => { expectedState["hitchhiker/puzzle42"] ); }); + + it("should remove permission from state when delete succeeds", () => { + const state = { + "hitchhiker/puzzle42": { + entries: [ + hitchhiker_puzzle42Permission_user_eins, + hitchhiker_puzzle42Permission_user_zwei + ] + } + }; + + const expectedState = { + "hitchhiker/puzzle42": { + entries: [hitchhiker_puzzle42Permission_user_zwei] + } + }; + + const newState = reducer( + state, + deletePermissionSuccess( + hitchhiker_puzzle42Permission_user_eins, + "hitchhiker", + "puzzle42" + ) + ); + expect(newState["hitchhiker/puzzle42"]).toEqual( + expectedState["hitchhiker/puzzle42"] + ); + }); }); describe("permissions selectors", () => { From 5a115d634cd6588a5cbdb050d91d1ccec9e4df2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 09:49:36 +0200 Subject: [PATCH 26/70] user can be deleted now --- scm-ui/public/locales/en/permissions.json | 9 ++ .../buttons/DeletePermissionButton.js | 59 +++++++++++++ .../buttons/DeletePermissionButton.test.js | 88 +++++++++++++++++++ .../containers/SinglePermission.js | 43 +++++++-- 4 files changed, 191 insertions(+), 8 deletions(-) create mode 100644 scm-ui/src/permissions/components/buttons/DeletePermissionButton.js create mode 100644 scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json index 686a01156d..70185f95aa 100644 --- a/scm-ui/public/locales/en/permissions.json +++ b/scm-ui/public/locales/en/permissions.json @@ -11,5 +11,14 @@ "edit-permission": { "delete-button": "Delete", "save-button": "Save Changes" + }, + "delete-permission-button": { + "label": "Delete", + "confirm-alert": { + "title": "Delete permission", + "message": "Do you really want to delete the permission?", + "submit": "Yes", + "cancel": "No" + } } } diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js new file mode 100644 index 0000000000..15954ea069 --- /dev/null +++ b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js @@ -0,0 +1,59 @@ +// @flow +import React from "react"; +import { translate } from "react-i18next"; +import type { Permission } from "../../types/Permissions"; +import { confirmAlert } from "../../../components/modals/ConfirmAlert"; +import {DeleteButton} from "../../../components/buttons/index"; + +type Props = { + permission: Permission, + namespace: string, + name: string, + confirmDialog?: boolean, + t: string => string, + deletePermission: (permission: Permission, namespace: string, name: string) => void +}; + +class DeletePermissionButton extends React.Component { + static defaultProps = { + confirmDialog: true + }; + + deletePermission = () => { + this.props.deletePermission(this.props.permission, this.props.namespace, this.props.name); + }; + + confirmDelete = () => { + const { t } = this.props; + confirmAlert({ + title: t("delete-permission-button.confirm-alert.title"), + message: t("delete-permission-button.confirm-alert.message"), + buttons: [ + { + label: t("delete-permission-button.confirm-alert.submit"), + onClick: () => this.deletePermission() + }, + { + label: t("delete-permission-button.confirm-alert.cancel"), + onClick: () => null + } + ] + }); + }; + + isDeletable = () => { + return this.props.permission._links.delete; + }; + + render() { + const { confirmDialog, t } = this.props; + const action = confirmDialog ? this.confirmDelete : this.deletePermission; + + if (!this.isDeletable()) { + return null; + } + return ; + } +} + +export default translate("permissions")(DeletePermissionButton); diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js new file mode 100644 index 0000000000..d86f15604d --- /dev/null +++ b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js @@ -0,0 +1,88 @@ +import React from "react"; +import { mount, shallow } from "enzyme"; +import "../../../tests/enzyme"; +import "../../../tests/i18n"; +import DeletePermissionButton from "./DeletePermissionButton"; + +import { confirmAlert } from "../../../components/modals/ConfirmAlert"; +jest.mock("../../../components/modals/ConfirmAlert"); + +describe("DeletePermissionButton", () => { + it("should render nothing, if the delete link is missing", () => { + const permission = { + _links: {} + }; + + const navLink = shallow( + {}} + /> + ); + expect(navLink.text()).toBe(""); + }); + + it("should render the navLink", () => { + const permission = { + _links: { + delete: { + href: "/permission" + } + } + }; + + const navLink = mount( + {}} + /> + ); + expect(navLink.text()).not.toBe(""); + }); + + it("should open the confirm dialog on button click", () => { + const permission = { + _links: { + delete: { + href: "/permission" + } + } + }; + + const button = mount( + {}} + /> + ); + button.find("button").simulate("click"); + + expect(confirmAlert.mock.calls.length).toBe(1); + }); + + it("should call the delete permission function with delete url", () => { + const permission = { + _links: { + delete: { + href: "/permission" + } + } + }; + + let calledUrl = null; + function capture(permission) { + calledUrl = permission._links.delete.href; + } + + const button = mount( + + ); + button.find("button").simulate("click"); + + expect(calledUrl).toBe("/permission"); + }); +}); diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index f125d4025b..6bcf060b72 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -2,19 +2,20 @@ import React from "react"; import type { Permission } from "../types/Permissions"; import { Checkbox } from "../../components/forms/index"; -import { DeleteButton } from "../../components/buttons/index"; import { translate } from "react-i18next"; import { Select } from "../../components/forms/index"; import { modifyPermission, isModifyPermissionPending, getModifyPermissionFailure, - modifyPermissionReset + modifyPermissionReset, + deletePermission } from "../modules/permissions"; import connect from "react-redux/es/connect/connect"; import { withRouter } from "react-router-dom"; import type { History } from "history"; import ErrorNotification from "../../components/ErrorNotification"; +import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; type Props = { submitForm: Permission => void, @@ -27,7 +28,8 @@ type Props = { history: History, loading: boolean, error: Error, - permissionReset: (string, string, string) => void + permissionReset: (string, string, string) => void, + deletePermission: (Permission, string, string, (void) => void) => void }; type State = { @@ -67,13 +69,25 @@ class SinglePermission extends React.Component { } } + permissionDeleted = () => { + this.props.history.push( + "/repo/" + this.props.namespace + "/" + this.props.name + "/permissions" + ); + }; + + deletePermission = () => { + this.props.deletePermission( + this.props.permission, + this.props.namespace, + this.props.name, + this.permissionDeleted + ); + }; + render() { const { permission } = this.state; - const { t, loading, error } = this.props; + const { t, loading, error, namespace, name } = this.props; const types = ["READ", "OWNER", "WRITE"]; - const deleteButton = this.props.permission._links.delete ? ( - - ) : null; const typeSelector = this.props.permission._links.update ? ( @@ -100,7 +114,12 @@ class SinglePermission extends React.Component { {typeSelector} - {deleteButton} + {errorNotification} @@ -170,6 +189,14 @@ const mapDispatchToProps = dispatch => { permissionname: string ) => { dispatch(modifyPermissionReset(namespace, name, permissionname)); + }, + deletePermission: ( + permission: Permission, + namespace: string, + name: string, + callback: () => void + ) => { + dispatch(deletePermission(permission, namespace, name, callback)); } }; }; From d8d106d44175c701a9ca2bb7f1b68cb0f211bd91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 11:33:40 +0200 Subject: [PATCH 27/70] add create permission possibility --- scm-ui/public/locales/en/permissions.json | 4 + .../components/CreatePermissionForm.js | 92 +++++++++++++++++-- .../permissions/components/TypeSelector.js | 39 ++++++++ .../src/permissions/containers/Permissions.js | 24 ++++- .../containers/SinglePermission.js | 48 ++++++---- scm-ui/src/permissions/modules/permissions.js | 44 ++++++++- .../permissions/modules/permissions.test.js | 67 +++++++++++++- scm-ui/src/permissions/types/Permissions.js | 2 +- 8 files changed, 285 insertions(+), 35 deletions(-) create mode 100644 scm-ui/src/permissions/components/TypeSelector.js diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json index 70185f95aa..9e3dde4aec 100644 --- a/scm-ui/public/locales/en/permissions.json +++ b/scm-ui/public/locales/en/permissions.json @@ -20,5 +20,9 @@ "submit": "Yes", "cancel": "No" } + }, + "add-permission": { + "add-permission-heading": "Add new Permission", + "submit-button": "Submit" } } diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js index 914a097f9c..84b51c9154 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -1,14 +1,20 @@ // @flow import React from "react"; -import type { Permission } from "../types/Permissions"; import { translate } from "react-i18next"; +import { Checkbox, InputField } from "../../components/forms"; +import TypeSelector from "./TypeSelector"; +import type { Permission } from "../types/Permissions"; +import { SubmitButton } from "../../components/buttons"; type Props = { - t: string => string + t: string => string, + createPermission: (permission: Permission) => void }; type State = { - permission: Permission + name: string, + type: string, + groupPermission: boolean }; class CreatePermissionForm extends React.Component { @@ -16,18 +22,84 @@ class CreatePermissionForm extends React.Component { super(props); this.state = { - permission: { - name: "", - type: "READ", - groupPermission: false, - _links: {} - } + name: "", + type: "READ", + groupPermission: false }; } render() { - return "Show Permissions here!"; + const { t } = this.props; + const { name, type, groupPermission } = this.state; + + return ( +
+

+ {t("add-permission.add-permission-heading")} +

+ + + + + + + + + + + + + + + +
{t("permission.name")} + +
{t("permission.group-permission")} + +
{t("permission.type")} + +
+ +
+ ); } + + submit = () => { + this.props.createPermission({ + name: this.state.name, + type: this.state.type, + groupPermission: this.state.groupPermission + }); + }; + + handleTypeChange = (type: string) => { + this.setState({ + type: type + }); + }; + + handleNameChange = (name: string) => { + this.setState({ + name: name + }); + }; + handleGroupPermissionChange = (groupPermission: boolean) => { + this.setState({ + groupPermission: groupPermission + }); + }; } export default translate("permissions")(CreatePermissionForm); diff --git a/scm-ui/src/permissions/components/TypeSelector.js b/scm-ui/src/permissions/components/TypeSelector.js new file mode 100644 index 0000000000..7c2ce45687 --- /dev/null +++ b/scm-ui/src/permissions/components/TypeSelector.js @@ -0,0 +1,39 @@ +// @flow +import React from "react"; +import { translate } from "react-i18next"; +import { Select } from "../../components/forms"; + +type Props = { + t: string => string, + handleTypeChange: string => void, + type: string, + loading?: boolean +}; + +class TypeSelector extends React.Component { + + render() { + const { t, type, handleTypeChange, loading } = this.props; + const types = ["READ", "OWNER", "GROUP"]; + + return ( + @@ -119,6 +115,7 @@ class SinglePermission extends React.Component { namespace={namespace} name={name} deletePermission={this.deletePermission} + loading={this.props.deleteLoading} /> {errorNotification} @@ -158,20 +155,34 @@ class SinglePermission extends React.Component { const mapStateToProps = (state, ownProps) => { const permission = ownProps.permission; + console.log(permission); const loading = isModifyPermissionPending( state, ownProps.namespace, ownProps.name, permission.name ); - const error = getModifyPermissionFailure( + const error = + getModifyPermissionFailure( + state, + ownProps.namespace, + ownProps.name, + permission.name + ) || + getDeletePermissionFailure( + state, + ownProps.namespace, + ownProps.name, + permission.name + ); + const deleteLoading = isDeletePermissionPending( state, ownProps.namespace, ownProps.name, permission.name ); - return { loading, error }; + return { loading, error, deleteLoading }; }; const mapDispatchToProps = dispatch => { @@ -193,10 +204,9 @@ const mapDispatchToProps = dispatch => { deletePermission: ( permission: Permission, namespace: string, - name: string, - callback: () => void + name: string ) => { - dispatch(deletePermission(permission, namespace, name, callback)); + dispatch(deletePermission(permission, namespace, name)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 8eaac31250..6539115887 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -220,7 +220,7 @@ export function createPermission( CONTENT_TYPE ) .then(() => { - dispatch(createPermissionSuccess(namespace, name)); + dispatch(createPermissionSuccess(permission, namespace, name)); if (callback) { callback(); } @@ -252,11 +252,16 @@ export function createPermissionPending( } export function createPermissionSuccess( + permission: Permission, namespace: string, name: string ): Action { return { type: CREATE_PERMISSION_SUCCESS, + payload: { + permission, + position: namespace + "/" + name + }, itemId: namespace + "/" + name }; } @@ -386,6 +391,17 @@ export default function reducer( entries: newPermission } }; + case CREATE_PERMISSION_SUCCESS: + const position = action.payload.position; + const permissions = state[action.payload.position].entries; + permissions.push(action.payload.permission); + return { + ...state, + [position]: { + ...state[position], + entries: permissions + } + }; case DELETE_PERMISSION_SUCCESS: const permissionPosition = action.payload.position; const new_Permissions = deletePermissionFromState( @@ -468,3 +484,29 @@ export function hasCreatePermission( return state.permissions[namespace + "/" + name].createPermission; else return null; } + +export function isDeletePermissionPending( + state: Object, + namespace: string, + name: string, + permissionname: string +) { + return isPending( + state, + DELETE_PERMISSION, + namespace + "/" + name + "/" + permissionname + ); +} + +export function getDeletePermissionFailure( + state: Object, + namespace: string, + name: string, + permissionname: string +) { + return getFailure( + state, + DELETE_PERMISSION, + namespace + "/" + name + "/" + permissionname + ); +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 245fa39541..22dbae311c 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -16,6 +16,8 @@ import reducer, { hasCreatePermission, deletePermission, deletePermissionSuccess, + getDeletePermissionFailure, + isDeletePermissionPending, MODIFY_PERMISSION_FAILURE, MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, @@ -27,9 +29,11 @@ import reducer, { CREATE_PERMISSION_PENDING, CREATE_PERMISSION_SUCCESS, CREATE_PERMISSION_FAILURE, + DELETE_PERMISSION, DELETE_PERMISSION_PENDING, DELETE_PERMISSION_SUCCESS, - DELETE_PERMISSION_FAILURE + DELETE_PERMISSION_FAILURE, + createPermissionSuccess } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -460,6 +464,33 @@ describe("permissions reducer", () => { expectedState["hitchhiker/puzzle42"] ); }); + + it("should add permission", () => { + const oldState = { + "hitchhiker/puzzle42": { + entries: [hitchhiker_puzzle42Permission_user_eins] + } + }; + let expectedState = { + "hitchhiker/puzzle42": { + entries: [ + hitchhiker_puzzle42Permission_user_eins, + hitchhiker_puzzle42Permission_user_zwei + ] + } + }; + const newState = reducer( + oldState, + createPermissionSuccess( + hitchhiker_puzzle42Permission_user_zwei, + "hitchhiker", + "puzzle42" + ) + ); + expect(newState["hitchhiker/puzzle42"]).toEqual( + expectedState["hitchhiker/puzzle42"] + ); + }); }); describe("permissions selectors", () => { @@ -571,4 +602,38 @@ describe("permissions selectors", () => { }; expect(hasCreatePermission(state, "hitchhiker", "puzzle42")).toEqual(false); }); + + it("should return true, when delete permission is pending", () => { + const state = { + pending: { + [DELETE_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: true + } + }; + expect( + isDeletePermissionPending(state, "hitchhiker", "puzzle42", "user_eins") + ).toEqual(true); + }); + + it("should return false, when delete permissions is not pending", () => { + expect( + isDeletePermissionPending({}, "hitchiker", "puzzle42", "user_eins") + ).toEqual(false); + }); + + it("should return error when delete permissions did fail", () => { + const state = { + failure: { + [DELETE_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error + } + }; + expect( + getDeletePermissionFailure(state, "hitchhiker", "puzzle42", "user_eins") + ).toEqual(error); + }); + + it("should return undefined when delete permissions did not fail", () => { + expect( + getDeletePermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") + ).toBe(undefined); + }); }); diff --git a/scm-ui/src/permissions/types/Permissions.js b/scm-ui/src/permissions/types/Permissions.js index c292347755..e3bd697fc5 100644 --- a/scm-ui/src/permissions/types/Permissions.js +++ b/scm-ui/src/permissions/types/Permissions.js @@ -5,7 +5,7 @@ export type Permission = { name: string, type: string, groupPermission: boolean, - _links: Links + _links?: Links }; export type PermissionCollection = Permission[]; From 961cbd9f90929f106d6152889c9f944acf38278b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 11:33:49 +0200 Subject: [PATCH 28/70] add delete button --- .../buttons/DeletePermissionButton.js | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js index 15954ea069..55cc4af462 100644 --- a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js +++ b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js @@ -3,7 +3,7 @@ import React from "react"; import { translate } from "react-i18next"; import type { Permission } from "../../types/Permissions"; import { confirmAlert } from "../../../components/modals/ConfirmAlert"; -import {DeleteButton} from "../../../components/buttons/index"; +import { DeleteButton } from "../../../components/buttons/index"; type Props = { permission: Permission, @@ -11,7 +11,12 @@ type Props = { name: string, confirmDialog?: boolean, t: string => string, - deletePermission: (permission: Permission, namespace: string, name: string) => void + deletePermission: ( + permission: Permission, + namespace: string, + name: string + ) => void, + loading: boolean }; class DeletePermissionButton extends React.Component { @@ -20,7 +25,11 @@ class DeletePermissionButton extends React.Component { }; deletePermission = () => { - this.props.deletePermission(this.props.permission, this.props.namespace, this.props.name); + this.props.deletePermission( + this.props.permission, + this.props.namespace, + this.props.name + ); }; confirmDelete = () => { @@ -46,13 +55,19 @@ class DeletePermissionButton extends React.Component { }; render() { - const { confirmDialog, t } = this.props; + const { confirmDialog, loading, t } = this.props; const action = confirmDialog ? this.confirmDelete : this.deletePermission; if (!this.isDeletable()) { return null; } - return ; + return ( + + ); } } From 2e16186034e96731a3a965b91f037b0e369b65b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 12:11:31 +0200 Subject: [PATCH 29/70] renaming: name to repoName if repo name is meant; usage of create loading --- .../components/CreatePermissionForm.js | 6 +- .../buttons/DeletePermissionButton.js | 6 +- .../src/permissions/containers/Permissions.js | 56 ++++--- .../containers/SinglePermission.js | 35 ++-- scm-ui/src/permissions/modules/permissions.js | 157 ++++++++++-------- .../permissions/modules/permissions.test.js | 41 ++++- scm-ui/src/repos/containers/RepositoryRoot.js | 2 +- 7 files changed, 186 insertions(+), 117 deletions(-) diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js index 84b51c9154..f045bbe0df 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -8,7 +8,8 @@ import { SubmitButton } from "../../components/buttons"; type Props = { t: string => string, - createPermission: (permission: Permission) => void + createPermission: (permission: Permission) => void, + loading: boolean }; type State = { @@ -29,7 +30,7 @@ class CreatePermissionForm extends React.Component { } render() { - const { t } = this.props; + const { t, loading } = this.props; const { name, type, groupPermission } = this.state; return ( @@ -71,6 +72,7 @@ class CreatePermissionForm extends React.Component {
); diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js index 55cc4af462..cd7ce65766 100644 --- a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js +++ b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js @@ -8,13 +8,13 @@ import { DeleteButton } from "../../../components/buttons/index"; type Props = { permission: Permission, namespace: string, - name: string, + repoName: string, confirmDialog?: boolean, t: string => string, deletePermission: ( permission: Permission, namespace: string, - name: string + repoName: string ) => void, loading: boolean }; @@ -28,7 +28,7 @@ class DeletePermissionButton extends React.Component { this.props.deletePermission( this.props.permission, this.props.namespace, - this.props.name + this.props.repoName ); }; diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 374b887787..2888152f96 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -8,7 +8,8 @@ import { isFetchPermissionsPending, getPermissionsOfRepo, hasCreatePermission, - createPermission + createPermission, + isCreatePermissionPending } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -18,18 +19,19 @@ import CreatePermissionForm from "../components/CreatePermissionForm"; type Props = { namespace: string, - name: string, + repoName: string, loading: boolean, error: Error, permissions: PermissionCollection, - createPermission: boolean, + hasPermissionToCreate: boolean, + loadingCreatePermission: boolean, //dispatch functions - fetchPermissions: (namespace: string, name: string) => void, + fetchPermissions: (namespace: string, repoName: string) => void, createPermission: ( permission: Permission, namespace: string, - name: string + repoName: string ) => void, // context props @@ -39,9 +41,9 @@ type Props = { class Permissions extends React.Component { componentDidMount() { - const { fetchPermissions, namespace, name } = this.props; + const { fetchPermissions, namespace, repoName } = this.props; - fetchPermissions(namespace, name); + fetchPermissions(namespace, repoName); } render() { @@ -51,8 +53,9 @@ class Permissions extends React.Component { permissions, t, namespace, - name, - createPermission + repoName, + loadingCreatePermission, + hasPermissionToCreate } = this.props; if (error) { @@ -69,11 +72,12 @@ class Permissions extends React.Component { return ; } - const createPermissionForm = createPermission ? ( + const createPermissionForm = hasPermissionToCreate ? ( - this.props.createPermission(permission, namespace, name) + this.props.createPermission(permission, namespace, repoName) } + loading={loadingCreatePermission} /> ) : null; @@ -94,7 +98,7 @@ class Permissions extends React.Component { ); @@ -111,33 +115,39 @@ class Permissions extends React.Component { const mapStateToProps = (state, ownProps) => { const namespace = ownProps.namespace; - const name = ownProps.name; - const error = getFetchPermissionsFailure(state, namespace, name); - const loading = isFetchPermissionsPending(state, namespace, name); - const permissions = getPermissionsOfRepo(state, namespace, name); + const repoName = ownProps.repoName; + const error = getFetchPermissionsFailure(state, namespace, repoName); + const loading = isFetchPermissionsPending(state, namespace, repoName); + const permissions = getPermissionsOfRepo(state, namespace, repoName); + const loadingCreatePermission = isCreatePermissionPending( + state, + namespace, + repoName + ); console.log(permissions); - const createPermission = hasCreatePermission(state, namespace, name); + const hasPermissionToCreate = hasCreatePermission(state, namespace, repoName); return { namespace, - name, + repoName, error, loading, permissions, - createPermission + hasPermissionToCreate, + loadingCreatePermission }; }; const mapDispatchToProps = dispatch => { return { - fetchPermissions: (namespace: string, name: string) => { - dispatch(fetchPermissions(namespace, name)); + fetchPermissions: (namespace: string, repoName: string) => { + dispatch(fetchPermissions(namespace, repoName)); }, createPermission: ( permission: Permission, namespace: string, - name: string + repoName: string ) => { - dispatch(createPermission(permission, namespace, name)); + dispatch(createPermission(permission, namespace, repoName)); } }; }; diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 8a5081a0be..a8a0249625 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -3,7 +3,6 @@ import React from "react"; import type { Permission } from "../types/Permissions"; import { Checkbox } from "../../components/forms/index"; import { translate } from "react-i18next"; -import { Select } from "../../components/forms/index"; import { modifyPermission, isModifyPermissionPending, @@ -26,7 +25,7 @@ type Props = { permission: Permission, t: string => string, namespace: string, - name: string, + repoName: string, match: any, history: History, loading: boolean, @@ -58,7 +57,7 @@ class SinglePermission extends React.Component { const { permission } = this.props; this.props.permissionReset( this.props.namespace, - this.props.name, + this.props.repoName, permission.name ); if (permission) { @@ -77,15 +76,13 @@ class SinglePermission extends React.Component { this.props.deletePermission( this.props.permission, this.props.namespace, - this.props.name + this.props.repoName ); }; render() { const { permission } = this.state; - const { t, loading, error, namespace, name } = this.props; - const types = ["READ", "OWNER", "WRITE"]; - + const { loading, error, namespace, repoName } = this.props; const typeSelector = this.props.permission._links.update ? ( { @@ -139,7 +136,7 @@ class SinglePermission extends React.Component { this.props.modifyPermission( permission, this.props.namespace, - this.props.name + this.props.repoName ); }; @@ -159,26 +156,26 @@ const mapStateToProps = (state, ownProps) => { const loading = isModifyPermissionPending( state, ownProps.namespace, - ownProps.name, + ownProps.repoName, permission.name ); const error = getModifyPermissionFailure( state, ownProps.namespace, - ownProps.name, + ownProps.repoName, permission.name ) || getDeletePermissionFailure( state, ownProps.namespace, - ownProps.name, + ownProps.repoName, permission.name ); const deleteLoading = isDeletePermissionPending( state, ownProps.namespace, - ownProps.name, + ownProps.repoName, permission.name ); @@ -190,23 +187,23 @@ const mapDispatchToProps = dispatch => { modifyPermission: ( permission: Permission, namespace: string, - name: string + repoName: string ) => { - dispatch(modifyPermission(permission, namespace, name)); + dispatch(modifyPermission(permission, namespace, repoName)); }, permissionReset: ( namespace: string, - name: string, + repoName: string, permissionname: string ) => { - dispatch(modifyPermissionReset(namespace, name, permissionname)); + dispatch(modifyPermissionReset(namespace, repoName, permissionname)); }, deletePermission: ( permission: Permission, namespace: string, - name: string + repoName: string ) => { - dispatch(deletePermission(permission, namespace, name)); + dispatch(deletePermission(permission, namespace, repoName)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 6539115887..ba29f178e3 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -57,60 +57,60 @@ const CONTENT_TYPE = "application/vnd.scmm-permission+json"; // fetch permissions -export function fetchPermissions(namespace: string, name: string) { +export function fetchPermissions(namespace: string, repoName: string) { return function(dispatch: any) { - dispatch(fetchPermissionsPending(namespace, name)); + dispatch(fetchPermissionsPending(namespace, repoName)); return apiClient - .get(`${REPOS_URL}/${namespace}/${name}/${PERMISSIONS_URL}`) + .get(`${REPOS_URL}/${namespace}/${repoName}/${PERMISSIONS_URL}`) .then(response => response.json()) .then(permissions => { - dispatch(fetchPermissionsSuccess(permissions, namespace, name)); + dispatch(fetchPermissionsSuccess(permissions, namespace, repoName)); }) .catch(err => { - dispatch(fetchPermissionsFailure(namespace, name, err)); + dispatch(fetchPermissionsFailure(namespace, repoName, err)); }); }; } export function fetchPermissionsPending( namespace: string, - name: string + repoName: string ): Action { return { type: FETCH_PERMISSIONS_PENDING, payload: { namespace, - name + repoName }, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } export function fetchPermissionsSuccess( permissions: any, namespace: string, - name: string + repoName: string ): Action { return { type: FETCH_PERMISSIONS_SUCCESS, payload: permissions, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } export function fetchPermissionsFailure( namespace: string, - name: string, + repoName: string, error: Error ): Action { return { type: FETCH_PERMISSIONS_FAILURE, payload: { namespace, - name, + repoName, error }, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } @@ -119,15 +119,15 @@ export function fetchPermissionsFailure( export function modifyPermission( permission: Permission, namespace: string, - name: string, + repoName: string, callback?: () => void ) { return function(dispatch: any) { - dispatch(modifyPermissionPending(permission, namespace, name)); + dispatch(modifyPermissionPending(permission, namespace, repoName)); return apiClient .put(permission._links.update.href, permission, CONTENT_TYPE) .then(() => { - dispatch(modifyPermissionSuccess(permission, namespace, name)); + dispatch(modifyPermissionSuccess(permission, namespace, repoName)); if (callback) { callback(); } @@ -136,7 +136,7 @@ export function modifyPermission( const error = new Error( `failed to modify permission: ${cause.message}` ); - dispatch(modifyPermissionFailure(permission, error, namespace, name)); + dispatch(modifyPermissionFailure(permission, error, namespace, repoName)); }); }; } @@ -144,27 +144,27 @@ export function modifyPermission( export function modifyPermissionPending( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: MODIFY_PERMISSION_PENDING, payload: permission, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } export function modifyPermissionSuccess( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: MODIFY_PERMISSION_SUCCESS, payload: { permission, - position: namespace + "/" + name + position: namespace + "/" + repoName }, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } @@ -172,12 +172,12 @@ export function modifyPermissionFailure( permission: Permission, error: Error, namespace: string, - name: string + repoName: string ): Action { return { type: MODIFY_PERMISSION_FAILURE, payload: { error, permission }, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } @@ -195,12 +195,12 @@ function newPermissions( export function modifyPermissionReset( namespace: string, - name: string, + repoName: string, permissionname: string ) { return { type: MODIFY_PERMISSION_RESET, - itemId: namespace + "/" + name + "/" + permissionname + itemId: namespace + "/" + repoName + "/" + permissionname }; } @@ -208,19 +208,19 @@ export function modifyPermissionReset( export function createPermission( permission: Permission, namespace: string, - name: string, + repoName: string, callback?: () => void ) { return function(dispatch: Dispatch) { - dispatch(createPermissionPending(permission, namespace, name)); + dispatch(createPermissionPending(permission, namespace, repoName)); return apiClient .post( - `${REPOS_URL}/${namespace}/${name}/${PERMISSIONS_URL}`, + `${REPOS_URL}/${namespace}/${repoName}/${PERMISSIONS_URL}`, permission, CONTENT_TYPE ) .then(() => { - dispatch(createPermissionSuccess(permission, namespace, name)); + dispatch(createPermissionSuccess(permission, namespace, repoName)); if (callback) { callback(); } @@ -232,7 +232,7 @@ export function createPermission( `failed to add permission ${permission.name}: ${err.message}` ), namespace, - name + repoName ) ) ); @@ -242,39 +242,39 @@ export function createPermission( export function createPermissionPending( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: CREATE_PERMISSION_PENDING, payload: permission, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } export function createPermissionSuccess( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: CREATE_PERMISSION_SUCCESS, payload: { permission, - position: namespace + "/" + name + position: namespace + "/" + repoName }, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } export function createPermissionFailure( error: Error, namespace: string, - name: string + repoName: string ): Action { return { type: CREATE_PERMISSION_FAILURE, payload: error, - itemId: namespace + "/" + name + itemId: namespace + "/" + repoName }; } @@ -283,15 +283,15 @@ export function createPermissionFailure( export function deletePermission( permission: Permission, namespace: string, - name: string, + repoName: string, callback?: () => void ) { return function(dispatch: any) { - dispatch(deletePermissionPending(permission, namespace, name)); + dispatch(deletePermissionPending(permission, namespace, repoName)); return apiClient .delete(permission._links.delete.href) .then(() => { - dispatch(deletePermissionSuccess(permission, namespace, name)); + dispatch(deletePermissionSuccess(permission, namespace, repoName)); if (callback) { callback(); } @@ -300,7 +300,7 @@ export function deletePermission( const error = new Error( `could not delete permission ${permission.name}: ${cause.message}` ); - dispatch(deletePermissionFailure(permission, namespace, name, error)); + dispatch(deletePermissionFailure(permission, namespace, repoName, error)); }); }; } @@ -308,34 +308,34 @@ export function deletePermission( export function deletePermissionPending( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: DELETE_PERMISSION_PENDING, payload: permission, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } export function deletePermissionSuccess( permission: Permission, namespace: string, - name: string + repoName: string ): Action { return { type: DELETE_PERMISSION_SUCCESS, payload: { permission, - position: namespace + "/" + name + position: namespace + "/" + repoName }, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } export function deletePermissionFailure( permission: Permission, namespace: string, - name: string, + repoName: string, error: Error ): Action { return { @@ -344,7 +344,7 @@ export function deletePermissionFailure( error, permission }, - itemId: namespace + "/" + name + "/" + permission.name + itemId: namespace + "/" + repoName + "/" + permission.name }; } @@ -425,10 +425,10 @@ export default function reducer( export function getPermissionsOfRepo( state: Object, namespace: string, - name: string + repoName: string ) { - if (state.permissions && state.permissions[namespace + "/" + name]) { - const permissions = state.permissions[namespace + "/" + name].entries; + if (state.permissions && state.permissions[namespace + "/" + repoName]) { + const permissions = state.permissions[namespace + "/" + repoName].entries; return permissions; } } @@ -436,77 +436,100 @@ export function getPermissionsOfRepo( export function isFetchPermissionsPending( state: Object, namespace: string, - name: string + repoName: string ) { - return isPending(state, FETCH_PERMISSIONS, namespace + "/" + name); + return isPending(state, FETCH_PERMISSIONS, namespace + "/" + repoName); } export function getFetchPermissionsFailure( state: Object, namespace: string, - name: string + repoName: string ) { - return getFailure(state, FETCH_PERMISSIONS, namespace + "/" + name); + return getFailure(state, FETCH_PERMISSIONS, namespace + "/" + repoName); } export function isModifyPermissionPending( state: Object, namespace: string, - name: string, + repoName: string, permissionname: string ) { return isPending( state, MODIFY_PERMISSION, - namespace + "/" + name + "/" + permissionname + namespace + "/" + repoName + "/" + permissionname ); } export function getModifyPermissionFailure( state: Object, namespace: string, - name: string, + repoName: string, permissionname: string ) { return getFailure( state, MODIFY_PERMISSION, - namespace + "/" + name + "/" + permissionname + namespace + "/" + repoName + "/" + permissionname ); } export function hasCreatePermission( state: Object, namespace: string, - name: string + repoName: string ) { - if (state.permissions && state.permissions[namespace + "/" + name]) - return state.permissions[namespace + "/" + name].createPermission; + if (state.permissions && state.permissions[namespace + "/" + repoName]) + return state.permissions[namespace + "/" + repoName].createPermission; else return null; } +export function isCreatePermissionPending( + state: Object, + namespace: string, + repoName: string +) { + return isPending( + state, + CREATE_PERMISSION, + namespace + "/" + repoName + ); +} +export function getCreatePermissionFailure( + state: Object, + namespace: string, + repoName: string +) { + return getFailure( + state, + CREATE_PERMISSION, + namespace + "/" + repoName + ); +} + export function isDeletePermissionPending( state: Object, namespace: string, - name: string, + repoName: string, permissionname: string ) { return isPending( state, DELETE_PERMISSION, - namespace + "/" + name + "/" + permissionname + namespace + "/" + repoName + "/" + permissionname ); } export function getDeletePermissionFailure( state: Object, namespace: string, - name: string, + repoName: string, permissionname: string ) { return getFailure( state, DELETE_PERMISSION, - namespace + "/" + name + "/" + permissionname + namespace + "/" + repoName + "/" + permissionname ); } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 22dbae311c..f786b9f14d 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -33,7 +33,10 @@ import reducer, { DELETE_PERMISSION_PENDING, DELETE_PERMISSION_SUCCESS, DELETE_PERMISSION_FAILURE, - createPermissionSuccess + CREATE_PERMISSION, + createPermissionSuccess, + getCreatePermissionFailure, + isCreatePermissionPending } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -113,7 +116,7 @@ describe("permission fetch", () => { type: FETCH_PERMISSIONS_PENDING, payload: { namespace: "hitchhiker", - name: "puzzle42" + repoName: "puzzle42" }, itemId: "hitchhiker/puzzle42" }, @@ -636,4 +639,38 @@ describe("permissions selectors", () => { getDeletePermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") ).toBe(undefined); }); + + it("should return true, when create permission is pending", () => { + const state = { + pending: { + [CREATE_PERMISSION + "/hitchhiker/puzzle42"]: true + } + }; + expect(isCreatePermissionPending(state, "hitchhiker", "puzzle42")).toEqual( + true + ); + }); + + it("should return false, when create permissions is not pending", () => { + expect(isCreatePermissionPending({}, "hitchiker", "puzzle42")).toEqual( + false + ); + }); + + it("should return error when create permissions did fail", () => { + const state = { + failure: { + [CREATE_PERMISSION + "/hitchhiker/puzzle42"]: error + } + }; + expect(getCreatePermissionFailure(state, "hitchhiker", "puzzle42")).toEqual( + error + ); + }); + + it("should return undefined when create permissions did not fail", () => { + expect(getCreatePermissionFailure({}, "hitchhiker", "puzzle42")).toBe( + undefined + ); + }); }); diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index c8dacbdc5e..1154e6308e 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -104,7 +104,7 @@ class RepositoryRoot extends React.Component { component={() => ( )} /> From 429bb9f522b80ffc6066046f52bf4c69045a696d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 30 Aug 2018 12:30:18 +0200 Subject: [PATCH 30/70] introduce permission type without links --- scm-ui/src/permissions/components/CreatePermissionForm.js | 4 ++-- scm-ui/src/permissions/containers/Permissions.js | 6 +++--- scm-ui/src/permissions/modules/permissions.js | 8 ++++---- scm-ui/src/permissions/modules/permissions.test.js | 5 ++++- scm-ui/src/permissions/types/Permissions.js | 8 +++++++- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js index f045bbe0df..c0f5b82bc9 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -3,12 +3,12 @@ import React from "react"; import { translate } from "react-i18next"; import { Checkbox, InputField } from "../../components/forms"; import TypeSelector from "./TypeSelector"; -import type { Permission } from "../types/Permissions"; +import type {PermissionEntry} from "../types/Permissions"; import { SubmitButton } from "../../components/buttons"; type Props = { t: string => string, - createPermission: (permission: Permission) => void, + createPermission: (permission: PermissionEntry) => void, loading: boolean }; diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 2888152f96..a6b034e52a 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -13,7 +13,7 @@ import { } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; -import type { Permission, PermissionCollection } from "../types/Permissions"; +import type {Permission, PermissionCollection, PermissionEntry} from "../types/Permissions"; import SinglePermission from "./SinglePermission"; import CreatePermissionForm from "../components/CreatePermissionForm"; @@ -29,7 +29,7 @@ type Props = { //dispatch functions fetchPermissions: (namespace: string, repoName: string) => void, createPermission: ( - permission: Permission, + permission: PermissionEntry, namespace: string, repoName: string ) => void, @@ -143,7 +143,7 @@ const mapDispatchToProps = dispatch => { dispatch(fetchPermissions(namespace, repoName)); }, createPermission: ( - permission: Permission, + permission: PermissionEntry, namespace: string, repoName: string ) => { diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index ba29f178e3..222d9fc594 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,7 +2,7 @@ import { apiClient } from "../../apiclient"; import * as types from "../../modules/types"; import type { Action } from "../../types/Action"; -import type { PermissionCollection, Permission } from "../types/Permissions"; +import type {PermissionCollection, Permission, PermissionEntry} from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; import { Dispatch } from "redux"; @@ -206,7 +206,7 @@ export function modifyPermissionReset( // create permission export function createPermission( - permission: Permission, + permission: PermissionEntry, namespace: string, repoName: string, callback?: () => void @@ -240,7 +240,7 @@ export function createPermission( } export function createPermissionPending( - permission: Permission, + permission: PermissionEntry, namespace: string, repoName: string ): Action { @@ -252,7 +252,7 @@ export function createPermissionPending( } export function createPermissionSuccess( - permission: Permission, + permission: PermissionEntry, namespace: string, repoName: string ): Action { diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index f786b9f14d..edd51e232b 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -40,6 +40,9 @@ import reducer, { } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; +const namespace = "hitchhiker"; +const repoName = "puzzle42"; + const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", type: "READ", @@ -115,7 +118,7 @@ describe("permission fetch", () => { { type: FETCH_PERMISSIONS_PENDING, payload: { - namespace: "hitchhiker", + namespace: namespace, repoName: "puzzle42" }, itemId: "hitchhiker/puzzle42" diff --git a/scm-ui/src/permissions/types/Permissions.js b/scm-ui/src/permissions/types/Permissions.js index e3bd697fc5..00b3d13748 100644 --- a/scm-ui/src/permissions/types/Permissions.js +++ b/scm-ui/src/permissions/types/Permissions.js @@ -5,7 +5,13 @@ export type Permission = { name: string, type: string, groupPermission: boolean, - _links?: Links + _links: Links }; +export type PermissionEntry = { + name: string, + type: string, + groupPermission: boolean +} + export type PermissionCollection = Permission[]; From 04612617d326563e6528baacbbc6bd04b6a54550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 08:34:58 +0200 Subject: [PATCH 31/70] correct types --- scm-ui/src/permissions/components/TypeSelector.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/scm-ui/src/permissions/components/TypeSelector.js b/scm-ui/src/permissions/components/TypeSelector.js index 7c2ce45687..2ff147d6d5 100644 --- a/scm-ui/src/permissions/components/TypeSelector.js +++ b/scm-ui/src/permissions/components/TypeSelector.js @@ -11,18 +11,17 @@ type Props = { }; class TypeSelector extends React.Component { - render() { const { t, type, handleTypeChange, loading } = this.props; - const types = ["READ", "OWNER", "GROUP"]; + const types = ["READ", "OWNER", "WRITE"]; return ( - ); } From 0acaca78b0d6e869e637f57a83efedebc6becf2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 08:35:25 +0200 Subject: [PATCH 32/70] add callback to add permission since without links of new created object are unknown --- .../src/permissions/containers/Permissions.js | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index a6b034e52a..03d34414eb 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -1,6 +1,7 @@ //@flow import React from "react"; import connect from "react-redux/es/connect/connect"; +import { withRouter } from "react-router-dom"; import { translate } from "react-i18next"; import { fetchPermissions, @@ -13,9 +14,14 @@ import { } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; -import type {Permission, PermissionCollection, PermissionEntry} from "../types/Permissions"; +import type { + Permission, + PermissionCollection, + PermissionEntry +} from "../types/Permissions"; import SinglePermission from "./SinglePermission"; import CreatePermissionForm from "../components/CreatePermissionForm"; +import type { History } from "history"; type Props = { namespace: string, @@ -31,12 +37,14 @@ type Props = { createPermission: ( permission: PermissionEntry, namespace: string, - repoName: string + repoName: string, + callback?: () => void ) => void, // context props t: string => string, - match: any + match: any, + history: History }; class Permissions extends React.Component { @@ -46,6 +54,11 @@ class Permissions extends React.Component { fetchPermissions(namespace, repoName); } + permissionCreated = () => { + const { history, namespace, repoName } = this.props; + history.push(`/repo/${namespace}/${repoName}/permissions`); + }; + render() { const { loading, @@ -75,7 +88,12 @@ class Permissions extends React.Component { const createPermissionForm = hasPermissionToCreate ? ( - this.props.createPermission(permission, namespace, repoName) + this.props.createPermission( + permission, + namespace, + repoName, + this.permissionCreated() + ) } loading={loadingCreatePermission} /> @@ -145,9 +163,10 @@ const mapDispatchToProps = dispatch => { createPermission: ( permission: PermissionEntry, namespace: string, - repoName: string + repoName: string, + callback?: () => void ) => { - dispatch(createPermission(permission, namespace, repoName)); + dispatch(createPermission(permission, namespace, repoName, callback)); } }; }; @@ -155,4 +174,4 @@ const mapDispatchToProps = dispatch => { export default connect( mapStateToProps, mapDispatchToProps -)(translate("permissions")(Permissions)); +)(translate("permissions")(withRouter(Permissions))); From 1e68060a982626d30bd770fe27ace5ddf2a8aaee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 14:19:44 +0200 Subject: [PATCH 33/70] remove if else to show permission add option also in repos without any permissions --- .../src/permissions/containers/Permissions.js | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 03d34414eb..67bac16e8b 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -15,7 +15,6 @@ import { import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; import type { - Permission, PermissionCollection, PermissionEntry } from "../types/Permissions"; @@ -70,6 +69,7 @@ class Permissions extends React.Component { loadingCreatePermission, hasPermissionToCreate } = this.props; + console.log(permissions); if (error) { return ( @@ -98,36 +98,32 @@ class Permissions extends React.Component { loading={loadingCreatePermission} /> ) : null; - - if (permissions.length > 0) - return ( -
- - - - - - - - - - {permissions.map((permission, index) => { - return ( - - ); - })} - -
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
- {createPermissionForm} -
- ); - - return
; + return ( +
+ + + + + + + + + + {permissions.map(permission => { + return ( + + ); + })} + +
{t("permission.name")}{t("permission.type")}{t("permission.group-permission")}
+ {createPermissionForm} +
+ ); } } @@ -142,7 +138,6 @@ const mapStateToProps = (state, ownProps) => { namespace, repoName ); - console.log(permissions); const hasPermissionToCreate = hasCreatePermission(state, namespace, repoName); return { namespace, From bdb6148e5475e2968bca6badccd4842ebc137bb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 15:17:57 +0200 Subject: [PATCH 34/70] add createPermission reset and validation for creating --- scm-ui/public/locales/en/permissions.json | 3 +- .../components/CreatePermissionForm.js | 30 ++++++++++++++-- .../src/permissions/containers/Permissions.js | 16 ++++++--- scm-ui/src/permissions/modules/permissions.js | 36 ++++++++++++------- 4 files changed, 65 insertions(+), 20 deletions(-) diff --git a/scm-ui/public/locales/en/permissions.json b/scm-ui/public/locales/en/permissions.json index 9e3dde4aec..1e85c3189a 100644 --- a/scm-ui/public/locales/en/permissions.json +++ b/scm-ui/public/locales/en/permissions.json @@ -23,6 +23,7 @@ }, "add-permission": { "add-permission-heading": "Add new Permission", - "submit-button": "Submit" + "submit-button": "Submit", + "name-input-invalid": "Permission for name already exists!" } } diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js index c0f5b82bc9..a995660374 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -3,13 +3,17 @@ import React from "react"; import { translate } from "react-i18next"; import { Checkbox, InputField } from "../../components/forms"; import TypeSelector from "./TypeSelector"; -import type {PermissionEntry} from "../types/Permissions"; +import type { + PermissionCollection, + PermissionEntry +} from "../types/Permissions"; import { SubmitButton } from "../../components/buttons"; type Props = { t: string => string, createPermission: (permission: PermissionEntry) => void, - loading: boolean + loading: boolean, + currentPermissions: PermissionCollection }; type State = { @@ -46,6 +50,8 @@ class CreatePermissionForm extends React.Component { @@ -73,11 +79,31 @@ class CreatePermissionForm extends React.Component { label={t("add-permission.submit-button")} action={this.submit} loading={loading} + disabled={this.isValid()} />
); } + isValid = () => { + if ( + this.state.name === null || + this.state.name === "" || + this.currentPermissionIncludeName() + ) { + return true; + } + return false; + }; + + currentPermissionIncludeName = () => { + for (let i = 0; i < this.props.currentPermissions.length; i++) { + if (this.props.currentPermissions[i].name === this.state.name) + return true; + } + return false; + }; + submit = () => { this.props.createPermission({ name: this.state.name, diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 67bac16e8b..91f1cd3e28 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -10,7 +10,7 @@ import { getPermissionsOfRepo, hasCreatePermission, createPermission, - isCreatePermissionPending + isCreatePermissionPending, getCreatePermissionFailure, createPermissionReset } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -39,6 +39,7 @@ type Props = { repoName: string, callback?: () => void ) => void, + createPermissionReset: (string, string) => void, // context props t: string => string, @@ -48,8 +49,9 @@ type Props = { class Permissions extends React.Component { componentDidMount() { - const { fetchPermissions, namespace, repoName } = this.props; + const { fetchPermissions, namespace, repoName, createPermissionReset } = this.props; + createPermissionReset(namespace, repoName); fetchPermissions(namespace, repoName); } @@ -69,7 +71,6 @@ class Permissions extends React.Component { loadingCreatePermission, hasPermissionToCreate } = this.props; - console.log(permissions); if (error) { return ( @@ -96,6 +97,7 @@ class Permissions extends React.Component { ) } loading={loadingCreatePermission} + currentPermissions={permissions} /> ) : null; return ( @@ -130,7 +132,7 @@ class Permissions extends React.Component { const mapStateToProps = (state, ownProps) => { const namespace = ownProps.namespace; const repoName = ownProps.repoName; - const error = getFetchPermissionsFailure(state, namespace, repoName); + const error = getFetchPermissionsFailure(state, namespace, repoName) || getCreatePermissionFailure(state, namespace, repoName); const loading = isFetchPermissionsPending(state, namespace, repoName); const permissions = getPermissionsOfRepo(state, namespace, repoName); const loadingCreatePermission = isCreatePermissionPending( @@ -162,6 +164,12 @@ const mapDispatchToProps = dispatch => { callback?: () => void ) => { dispatch(createPermission(permission, namespace, repoName, callback)); + }, + createPermissionReset: ( + namespace: string, + repoName: string + ) => { + dispatch(createPermissionReset(namespace, repoName)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 222d9fc594..0a120934eb 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,7 +2,11 @@ import { apiClient } from "../../apiclient"; import * as types from "../../modules/types"; import type { Action } from "../../types/Action"; -import type {PermissionCollection, Permission, PermissionEntry} from "../types/Permissions"; +import type { + PermissionCollection, + Permission, + PermissionEntry +} from "../types/Permissions"; import { isPending } from "../../modules/pending"; import { getFailure } from "../../modules/failure"; import { Dispatch } from "redux"; @@ -40,6 +44,9 @@ export const CREATE_PERMISSION_SUCCESS = `${CREATE_PERMISSION}_${ export const CREATE_PERMISSION_FAILURE = `${CREATE_PERMISSION}_${ types.FAILURE_SUFFIX }`; +export const CREATE_PERMISSION_RESET = `${CREATE_PERMISSION}_${ + types.RESET_SUFFIX +}`; export const DELETE_PERMISSION = "scm/permissions/DELETE_PERMISSION"; export const DELETE_PERMISSION_PENDING = `${DELETE_PERMISSION}_${ types.PENDING_SUFFIX @@ -136,7 +143,9 @@ export function modifyPermission( const error = new Error( `failed to modify permission: ${cause.message}` ); - dispatch(modifyPermissionFailure(permission, error, namespace, repoName)); + dispatch( + modifyPermissionFailure(permission, error, namespace, repoName) + ); }); }; } @@ -278,6 +287,13 @@ export function createPermissionFailure( }; } +export function createPermissionReset(namespace: string, repoName: string) { + return { + type: CREATE_PERMISSION_RESET, + itemId: namespace + "/" + repoName + }; +} + // delete permission export function deletePermission( @@ -300,7 +316,9 @@ export function deletePermission( const error = new Error( `could not delete permission ${permission.name}: ${cause.message}` ); - dispatch(deletePermissionFailure(permission, namespace, repoName, error)); + dispatch( + deletePermissionFailure(permission, namespace, repoName, error) + ); }); }; } @@ -490,22 +508,14 @@ export function isCreatePermissionPending( namespace: string, repoName: string ) { - return isPending( - state, - CREATE_PERMISSION, - namespace + "/" + repoName - ); + return isPending(state, CREATE_PERMISSION, namespace + "/" + repoName); } export function getCreatePermissionFailure( state: Object, namespace: string, repoName: string ) { - return getFailure( - state, - CREATE_PERMISSION, - namespace + "/" + repoName - ); + return getFailure(state, CREATE_PERMISSION, namespace + "/" + repoName); } export function isDeletePermissionPending( From 0f78ce9d3abc70574f7a4509f1dc3e8071d63d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 15:29:30 +0200 Subject: [PATCH 35/70] add reset for delete Permission --- .../permissions/containers/SinglePermission.js | 16 +++++++++++++++- scm-ui/src/permissions/modules/permissions.js | 13 +++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index a8a0249625..8e7aa256b9 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -10,7 +10,8 @@ import { modifyPermissionReset, deletePermission, getDeletePermissionFailure, - isDeletePermissionPending + isDeletePermissionPending, + deletePermissionReset } from "../modules/permissions"; import connect from "react-redux/es/connect/connect"; import { withRouter } from "react-router-dom"; @@ -31,6 +32,7 @@ type Props = { loading: boolean, error: Error, permissionReset: (string, string, string) => void, + deletePermissionReset: (string, string, string) => void, deletePermission: (Permission, string, string) => void, deleteLoading: boolean }; @@ -60,6 +62,11 @@ class SinglePermission extends React.Component { this.props.repoName, permission.name ); + this.props.deletePermissionReset( + this.props.namespace, + this.props.repoName, + permission.name + ); if (permission) { this.setState({ permission: { @@ -204,6 +211,13 @@ const mapDispatchToProps = dispatch => { repoName: string ) => { dispatch(deletePermission(permission, namespace, repoName)); + }, + deletePermissionReset: ( + namespace: string, + repoName: string, + permissionname: string + ) => { + dispatch(deletePermissionReset(namespace, repoName, permissionname)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 0a120934eb..a7303a190b 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -57,6 +57,9 @@ export const DELETE_PERMISSION_SUCCESS = `${DELETE_PERMISSION}_${ export const DELETE_PERMISSION_FAILURE = `${DELETE_PERMISSION}_${ types.FAILURE_SUFFIX }`; +export const DELETE_PERMISSION_RESET = `${DELETE_PERMISSION}_${ + types.RESET_SUFFIX +}`; const REPOS_URL = "repositories"; const PERMISSIONS_URL = "permissions"; @@ -366,6 +369,16 @@ export function deletePermissionFailure( }; } +export function deletePermissionReset( + namespace: string, + repoName: string, + permissionname: string +) { + return { + type: DELETE_PERMISSION_RESET, + itemId: namespace + "/" + repoName + "/" + permissionname + }; +} function deletePermissionFromState( oldPermissions: PermissionCollection, permission: Permission From 83627523701934ba4af692d2c02932a3a29113b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 15:45:34 +0200 Subject: [PATCH 36/70] use a new permission array since state think it stays the same if splice is used --- .../src/permissions/containers/Permissions.js | 21 ++++++++++++------- .../containers/SinglePermission.js | 1 - scm-ui/src/permissions/modules/permissions.js | 7 ++++--- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 91f1cd3e28..ab6755a4c7 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -10,7 +10,9 @@ import { getPermissionsOfRepo, hasCreatePermission, createPermission, - isCreatePermissionPending, getCreatePermissionFailure, createPermissionReset + isCreatePermissionPending, + getCreatePermissionFailure, + createPermissionReset } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -49,7 +51,12 @@ type Props = { class Permissions extends React.Component { componentDidMount() { - const { fetchPermissions, namespace, repoName, createPermissionReset } = this.props; + const { + fetchPermissions, + namespace, + repoName, + createPermissionReset + } = this.props; createPermissionReset(namespace, repoName); fetchPermissions(namespace, repoName); @@ -71,7 +78,6 @@ class Permissions extends React.Component { loadingCreatePermission, hasPermissionToCreate } = this.props; - if (error) { return ( { const mapStateToProps = (state, ownProps) => { const namespace = ownProps.namespace; const repoName = ownProps.repoName; - const error = getFetchPermissionsFailure(state, namespace, repoName) || getCreatePermissionFailure(state, namespace, repoName); + const error = + getFetchPermissionsFailure(state, namespace, repoName) || + getCreatePermissionFailure(state, namespace, repoName); const loading = isFetchPermissionsPending(state, namespace, repoName); const permissions = getPermissionsOfRepo(state, namespace, repoName); const loadingCreatePermission = isCreatePermissionPending( @@ -165,10 +173,7 @@ const mapDispatchToProps = dispatch => { ) => { dispatch(createPermission(permission, namespace, repoName, callback)); }, - createPermissionReset: ( - namespace: string, - repoName: string - ) => { + createPermissionReset: (namespace: string, repoName: string) => { dispatch(createPermissionReset(namespace, repoName)); } }; diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 8e7aa256b9..2739fa811b 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -159,7 +159,6 @@ class SinglePermission extends React.Component { const mapStateToProps = (state, ownProps) => { const permission = ownProps.permission; - console.log(permission); const loading = isModifyPermissionPending( state, ownProps.namespace, diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index a7303a190b..7f65818c38 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -383,12 +383,13 @@ function deletePermissionFromState( oldPermissions: PermissionCollection, permission: Permission ) { + let newPermission = []; for (let i = 0; i < oldPermissions.length; i++) { - if (oldPermissions[i] === permission) { - oldPermissions.splice(i, 1); + if (oldPermissions[i] !== permission) { + newPermission.push(oldPermissions[i]); } } - return oldPermissions; + return newPermission; } // reducer From 9f301a8f90571d382009a49d2674a248be5c7737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 15:51:39 +0200 Subject: [PATCH 37/70] remove unused variable --- scm-ui/src/permissions/components/TypeSelector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/src/permissions/components/TypeSelector.js b/scm-ui/src/permissions/components/TypeSelector.js index 2ff147d6d5..edf66101ab 100644 --- a/scm-ui/src/permissions/components/TypeSelector.js +++ b/scm-ui/src/permissions/components/TypeSelector.js @@ -12,7 +12,7 @@ type Props = { class TypeSelector extends React.Component { render() { - const { t, type, handleTypeChange, loading } = this.props; + const { type, handleTypeChange, loading } = this.props; const types = ["READ", "OWNER", "WRITE"]; return ( From e518ab35e565fc90ee488e1153f124311a313252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Mon, 3 Sep 2018 16:00:47 +0200 Subject: [PATCH 38/70] use render instead of component because otherwise component is mounted three times instead of one --- scm-ui/src/repos/containers/RepositoryRoot.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index 1154e6308e..8d8e842fbd 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -101,10 +101,10 @@ class RepositoryRoot extends React.Component { /> ( + render={props => ( )} /> From 463e916180463390f1fb725ddaa03b6ea332203e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 6 Sep 2018 12:09:34 +0200 Subject: [PATCH 39/70] update package.json --- scm-ui/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scm-ui/package.json b/scm-ui/package.json index 82f6322d91..8114de133c 100644 --- a/scm-ui/package.json +++ b/scm-ui/package.json @@ -15,6 +15,7 @@ "i18next-browser-languagedetector": "^2.2.2", "i18next-fetch-backend": "^0.1.0", "moment": "^2.22.2", + "node-sass": "^4.9.3", "react": "^16.4.2", "react-dom": "^16.4.2", "react-i18next": "^7.9.0", From dca3470808e0c77370019db8ec70426717206e0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 6 Sep 2018 12:10:38 +0200 Subject: [PATCH 40/70] solve newly occured error after merge: add permission did not work as it should --- .../src/permissions/containers/Permissions.js | 33 +- .../containers/SinglePermission.js | 4 +- scm-ui/src/permissions/modules/permissions.js | 9 +- .../permissions/modules/permissions.test.js | 1 - scm-ui/yarn.lock | 8677 ----------------- 5 files changed, 27 insertions(+), 8697 deletions(-) delete mode 100644 scm-ui/yarn.lock diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index ab6755a4c7..68c7ae34b4 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -1,7 +1,6 @@ //@flow import React from "react"; -import connect from "react-redux/es/connect/connect"; -import { withRouter } from "react-router-dom"; +import { connect } from "react-redux"; import { translate } from "react-i18next"; import { fetchPermissions, @@ -17,6 +16,7 @@ import { import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; import type { + Permission, PermissionCollection, PermissionEntry } from "../types/Permissions"; @@ -39,7 +39,7 @@ type Props = { permission: PermissionEntry, namespace: string, repoName: string, - callback?: () => void + callback: () => void ) => void, createPermissionReset: (string, string) => void, @@ -63,8 +63,17 @@ class Permissions extends React.Component { } permissionCreated = () => { - const { history, namespace, repoName } = this.props; - history.push(`/repo/${namespace}/${repoName}/permissions`); + const { namespace, repoName } = this.props; + this.props.fetchPermissions(namespace, repoName); + }; + + createPermission = (permission: Permission) => { + this.props.createPermission( + permission, + this.props.namespace, + this.props.repoName, + this.permissionCreated + ); }; render() { @@ -94,18 +103,12 @@ class Permissions extends React.Component { const createPermissionForm = hasPermissionToCreate ? ( - this.props.createPermission( - permission, - namespace, - repoName, - this.permissionCreated() - ) - } + createPermission={permission => this.createPermission(permission)} loading={loadingCreatePermission} currentPermissions={permissions} /> ) : null; + return (
@@ -169,7 +172,7 @@ const mapDispatchToProps = dispatch => { permission: PermissionEntry, namespace: string, repoName: string, - callback?: () => void + callback: () => void ) => { dispatch(createPermission(permission, namespace, repoName, callback)); }, @@ -182,4 +185,4 @@ const mapDispatchToProps = dispatch => { export default connect( mapStateToProps, mapDispatchToProps -)(translate("permissions")(withRouter(Permissions))); +)(translate("permissions")(Permissions)); diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 2739fa811b..76216eae3e 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -13,7 +13,7 @@ import { isDeletePermissionPending, deletePermissionReset } from "../modules/permissions"; -import connect from "react-redux/es/connect/connect"; +import { connect } from "react-redux"; import { withRouter } from "react-router-dom"; import type { History } from "history"; import ErrorNotification from "../../components/ErrorNotification"; @@ -223,4 +223,4 @@ const mapDispatchToProps = dispatch => { export default connect( mapStateToProps, mapDispatchToProps -)(translate("permissions")(withRouter(SinglePermission))); +)(translate("permissions")(SinglePermission)); diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 7f65818c38..a818d725a0 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -224,6 +224,8 @@ export function createPermission( callback?: () => void ) { return function(dispatch: Dispatch) { + console.log("createPermission aufruf"); + console.log(callback); dispatch(createPermissionPending(permission, namespace, repoName)); return apiClient .post( @@ -232,7 +234,9 @@ export function createPermission( CONTENT_TYPE ) .then(() => { + console.log("then Pfad"); dispatch(createPermissionSuccess(permission, namespace, repoName)); + console.log(callback); if (callback) { callback(); } @@ -424,7 +428,8 @@ export default function reducer( } }; case CREATE_PERMISSION_SUCCESS: - const position = action.payload.position; + return state; + /* const position = action.payload.position; const permissions = state[action.payload.position].entries; permissions.push(action.payload.permission); return { @@ -433,7 +438,7 @@ export default function reducer( ...state[position], entries: permissions } - }; + };*/ case DELETE_PERMISSION_SUCCESS: const permissionPosition = action.payload.position; const new_Permissions = deletePermissionFromState( diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index edd51e232b..53805641d6 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -235,7 +235,6 @@ describe("permission fetch", () => { status: 204 }); - // after create, the users are fetched again fetchMock.getOnce( REPOS_URL + "/hitchhiker/puzzle42", hitchhiker_puzzle42RepoPermissions diff --git a/scm-ui/yarn.lock b/scm-ui/yarn.lock deleted file mode 100644 index 9f7d80f11f..0000000000 --- a/scm-ui/yarn.lock +++ /dev/null @@ -1,8677 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz#bd71d9b192af978df915829d39d4094456439a0c" - dependencies: - "@babel/highlight" "7.0.0-beta.51" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0.tgz#0cb0c0fd2e78a0a2bec97698f549ae9ce0b99515" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.0.0" - "@babel/helpers" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - convert-source-map "^1.1.0" - debug "^3.1.0" - json5 "^0.5.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.51.tgz#6c7575ffde761d07485e04baedc0392c6d9e30f6" - dependencies: - "@babel/types" "7.0.0-beta.51" - jsesc "^2.5.1" - lodash "^4.17.5" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/generator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" - dependencies: - "@babel/types" "^7.0.0" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0.tgz#ba26336beb2abb547d58b6eba5b84d77975a39eb" - dependencies: - "@babel/helper-explode-assignable-expression" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-builder-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" - dependencies: - "@babel/types" "^7.0.0" - esutils "^2.0.0" - -"@babel/helper-call-delegate@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0.tgz#e036956bb33d76e59c07a04a1fff144e9f62ab78" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-define-map@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0.tgz#a5684dd2adf30f0137cf9b0bde436f8c2db17225" - dependencies: - "@babel/helper-function-name" "^7.0.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-explode-assignable-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0.tgz#fdfa4c88603ae3e954d0fc3244d5ca82fb468497" - dependencies: - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz#21b4874a227cf99ecafcc30a90302da5a2640561" - dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.51" - "@babel/template" "7.0.0-beta.51" - "@babel/types" "7.0.0-beta.51" - -"@babel/helper-function-name@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz#a68cc8d04420ccc663dd258f9cc41b8261efa2d4" - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz#3281b2d045af95c172ce91b20825d85ea4676411" - dependencies: - "@babel/types" "7.0.0-beta.51" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-hoist-variables@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-member-expression-to-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0.tgz#b01ee7d543e81e8c3fc404b19c9f26acb6e4cf4c" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.0.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/types" "^7.0.0" - lodash "^4.17.10" - -"@babel/helper-optimise-call-expression@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - -"@babel/helper-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" - dependencies: - lodash "^4.17.10" - -"@babel/helper-remap-async-to-generator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0.tgz#6512273c2feb91587822335cf913fdf680c26901" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-replace-supers@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0.tgz#b6f21237280e0be54f591f63a464b66627ced707" - dependencies: - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0.tgz#ff36a27983ae4c27122da2f7f294dced80ecbd08" - dependencies: - "@babel/template" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz#8a6c3f66c4d265352fc077484f9f6e80a51ab978" - dependencies: - "@babel/types" "7.0.0-beta.51" - -"@babel/helper-split-export-declaration@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-wrap-function@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0.tgz#1c8e42a2cfb0808e3140189dfe9490782a6fa740" - dependencies: - "@babel/helper-function-name" "^7.0.0" - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/helpers@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0.tgz#7213388341eeb07417f44710fd7e1d00acfa6ac0" - dependencies: - "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/highlight@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.51.tgz#e8844ae25a1595ccfd42b89623b4376ca06d225d" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/highlight@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0-beta.51.tgz#27cec2df409df60af58270ed8f6aa55409ea86f6" - -"@babel/parser@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775" - -"@babel/plugin-proposal-async-generator-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0.tgz#5d1eb6b44fd388b97f964350007ab9da090b1d70" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.0.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0.tgz#a16b5c076ba6c3d87df64d2480a380e979543731" - dependencies: - "@babel/helper-function-name" "^7.0.0" - "@babel/helper-member-expression-to-functions" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.0.0" - "@babel/plugin-syntax-class-properties" "^7.0.0" - -"@babel/plugin-proposal-json-strings@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-json-strings" "^7.0.0" - -"@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.2.0" - -"@babel/plugin-syntax-async-generators@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-class-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0.tgz#e051af5d300cbfbcec4a7476e37a803489881634" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-flow@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-json-strings@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-object-rest-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-async-to-generator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0.tgz#feaf18f4bfeaf2236eea4b2d4879da83006cc8f5" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.0.0" - -"@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-block-scoping@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - lodash "^4.17.10" - -"@babel/plugin-transform-classes@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0.tgz#9e65ca401747dde99e344baea90ab50dccb4c468" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-define-map" "^7.0.0" - "@babel/helper-function-name" "^7.0.0" - "@babel/helper-optimise-call-expression" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.0.0" - "@babel/helper-split-export-declaration" "^7.0.0" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-destructuring@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/plugin-transform-duplicate-keys@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-exponentiation-operator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0.tgz#c51b45e090a01876f64d32b5b46c0799c85ea56c" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.0.0.tgz#c40ced34c2783985d90d9f9ac77a13e6fb396a01" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.0.0" - -"@babel/plugin-transform-for-of@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-function-name@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0.tgz#eeda18dc22584e13c3581a68f6be4822bb1d1d81" - dependencies: - "@babel/helper-function-name" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-literals@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-amd@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0.tgz#2430ab73db9960c4ca89966f425b803f5d0d0468" - dependencies: - "@babel/helper-module-transforms" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0.tgz#20b906e5ab130dd8e456b694a94d9575da0fd41f" - dependencies: - "@babel/helper-module-transforms" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.0.0" - -"@babel/plugin-transform-modules-systemjs@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" - dependencies: - "@babel/helper-hoist-variables" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-modules-umd@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0.tgz#e7bb4f2a6cd199668964241951a25013450349be" - dependencies: - "@babel/helper-module-transforms" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-object-super@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0.tgz#b8587d511309b3a0e96e9e38169908b3e392041e" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-replace-supers" "^7.0.0" - -"@babel/plugin-transform-parameters@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0.tgz#da864efa111816a6df161d492f33de10e74b1949" - dependencies: - "@babel/helper-call-delegate" "^7.0.0" - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-display-name@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.0.0.tgz#a84bb70fea302d915ea81d9809e628266bb0bc11" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - -"@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.0.0.tgz#28e00584f9598c0dd279f6280eee213fa0121c3c" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - -"@babel/plugin-transform-react-jsx@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.0.0.tgz#524379e4eca5363cd10c4446ba163f093da75f3e" - dependencies: - "@babel/helper-builder-react-jsx" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - -"@babel/plugin-transform-regenerator@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" - dependencies: - regenerator-transform "^0.13.3" - -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-spread@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-sticky-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - -"@babel/plugin-transform-template-literals@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-typeof-symbol@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-unicode-regex@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.0.0" - regexpu-core "^4.1.3" - -"@babel/preset-env@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0.tgz#f450f200c14e713f98cb14d113bf0c2cfbb89ca9" - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-json-strings" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" - "@babel/plugin-syntax-async-generators" "^7.0.0" - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.0.0" - "@babel/plugin-transform-block-scoped-functions" "^7.0.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.0.0" - "@babel/plugin-transform-dotall-regex" "^7.0.0" - "@babel/plugin-transform-duplicate-keys" "^7.0.0" - "@babel/plugin-transform-exponentiation-operator" "^7.0.0" - "@babel/plugin-transform-for-of" "^7.0.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-amd" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-modules-systemjs" "^7.0.0" - "@babel/plugin-transform-modules-umd" "^7.0.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-regenerator" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-template-literals" "^7.0.0" - "@babel/plugin-transform-typeof-symbol" "^7.0.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - browserslist "^4.1.0" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/preset-flow@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-flow-strip-types" "^7.0.0" - -"@babel/preset-react@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - -"@babel/template@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.51.tgz#9602a40aebcf357ae9677e2532ef5fc810f5fbff" - dependencies: - "@babel/code-frame" "7.0.0-beta.51" - "@babel/parser" "7.0.0-beta.51" - "@babel/types" "7.0.0-beta.51" - lodash "^4.17.5" - -"@babel/template@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/types" "^7.0.0" - -"@babel/traverse@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.51.tgz#981daf2cec347a6231d3aa1d9e1803b03aaaa4a8" - dependencies: - "@babel/code-frame" "7.0.0-beta.51" - "@babel/generator" "7.0.0-beta.51" - "@babel/helper-function-name" "7.0.0-beta.51" - "@babel/helper-split-export-declaration" "7.0.0-beta.51" - "@babel/parser" "7.0.0-beta.51" - "@babel/types" "7.0.0-beta.51" - debug "^3.1.0" - globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.17.5" - -"@babel/traverse@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.0.0" - "@babel/helper-function-name" "^7.0.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/types" "^7.0.0" - debug "^3.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/types@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.51.tgz#d802b7b543b5836c778aa691797abf00f3d97ea9" - dependencies: - esutils "^2.0.2" - lodash "^4.17.5" - to-fast-properties "^2.0.0" - -"@babel/types@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@fortawesome/fontawesome-free@^5.3.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.3.1.tgz#5466b8f31c1f493a96754c1426c25796d0633dd9" - -"@gimenete/type-writer@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@gimenete/type-writer/-/type-writer-0.1.3.tgz#2d4f26118b18d71f5b34ca24fdd6d1fd455c05b6" - dependencies: - camelcase "^5.0.0" - prettier "^1.13.7" - -"@gulp-sourcemaps/identity-map@1.X": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9" - dependencies: - acorn "^5.0.3" - css "^2.2.1" - normalize-path "^2.1.1" - source-map "^0.6.0" - through2 "^2.0.3" - -"@gulp-sourcemaps/map-sources@1.X": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda" - dependencies: - normalize-path "^2.0.1" - through2 "^2.0.3" - -"@octokit/rest@^15.2.6": - version "15.10.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.10.0.tgz#9baf7430e55edf1a1024c35ae72ed2f5fc6e90e9" - dependencies: - "@gimenete/type-writer" "^0.1.3" - before-after-hook "^1.1.0" - btoa-lite "^1.0.0" - debug "^3.1.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.0" - lodash "^4.17.4" - node-fetch "^2.1.1" - url-template "^2.0.8" - -"@scm-manager/eslint-config@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@scm-manager/eslint-config/-/eslint-config-0.0.2.tgz#94cc8c3fb4f51f870b235893dc134fc6c423ae85" - -"@scm-manager/ui-bundler@^0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-bundler/-/ui-bundler-0.0.9.tgz#b61bdccaf6cf0ff3f4856098f95b462223c626c8" - dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/preset-env" "^7.0.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-react" "^7.0.0" - "@scm-manager/eslint-config" "^0.0.2" - babel-core "^7.0.0-0" - babel-eslint "^9.0.0-beta.3" - babel-jest "^23.4.2" - babelify "^9.0.0" - browser-sync "^2.24.7" - browserify "^16.2.2" - browserify-css "^0.14.0" - colors "^1.3.1" - commander "^2.17.1" - connect-history-api-fallback "^1.5.0" - eslint "^5.4.0" - eslint-config-react-app "^2.1.0" - eslint-plugin-flowtype "^2.50.0" - eslint-plugin-import "^2.14.0" - eslint-plugin-jsx-a11y "^6.1.1" - eslint-plugin-react "^7.11.1" - fast-xml-parser "^3.12.0" - flow-bin "^0.79.1" - gulp "^3.9.1" - gulp-sourcemaps "^2.6.4" - gulp-util "^3.0.8" - jest "^23.5.0" - jest-junit "^5.1.0" - node-mkdirs "^0.0.1" - pom-parser "^1.1.1" - prettier "^1.14.2" - vinyl-buffer "^1.0.1" - vinyl-source-stream "^2.0.0" - watchify "^3.11.0" - -"@scm-manager/ui-extensions@^0.0.7": - version "0.0.7" - resolved "https://registry.yarnpkg.com/@scm-manager/ui-extensions/-/ui-extensions-0.0.7.tgz#a0a657a1410b78838ba0b36096ef631dca7fe27e" - dependencies: - react "^16.4.2" - react-dom "^16.4.2" - -"@types/node@*": - version "10.9.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897" - -JSONStream@^1.0.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.4.tgz#615bb2adb0cd34c8f4c447b5f6512fa1d8f16a2e" - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -abab@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -accepts@~1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -acorn-dynamic-import@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" - dependencies: - acorn "^5.0.0" - -acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - dependencies: - acorn "^5.0.0" - -acorn-jsx@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" - dependencies: - acorn "^5.0.3" - -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.5.2.tgz#2ca723df19d997b05824b69f6c7fb091fc42c322" - dependencies: - acorn "^5.7.1" - acorn-dynamic-import "^3.0.0" - xtend "^4.0.1" - -acorn@5.X, acorn@^5.0.0, acorn@^5.0.3, acorn@^5.5.3, acorn@^5.6.0, acorn@^5.7.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5" - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - -agent-base@4, agent-base@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - dependencies: - es6-promisify "^5.0.0" - -ajv-keywords@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv@^5.1.0, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.0.1, ajv@^6.5.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-escapes@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" - -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - dependencies: - default-require-extensions "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -aria-query@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" - dependencies: - ast-types-flow "0.0.7" - commander "^2.11.0" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - -array-filter@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -array-map@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" - -array-reduce@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" - -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1, array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -array.prototype.flat@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz#812db8f02cad24d3fab65dd67eabe3b8903494a4" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.10.0" - function-bind "^1.1.1" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - -assert@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -ast-types-flow@0.0.7, ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - -async-each-series@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-0.1.1.tgz#7617c1917401fd8ca4a28aadce3dbae98afeb432" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - -async@1.5.2, async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4: - version "2.6.1" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" - dependencies: - lodash "^4.17.10" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - -aws4@^1.2.1, aws4@^1.6.0, aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - -axios@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" - dependencies: - follow-redirects "^1.2.5" - is-buffer "^1.1.5" - -axobject-query@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.1.tgz#05dfa705ada8ad9db993fa6896f22d395b0b0a07" - dependencies: - ast-types-flow "0.0.7" - -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - dependencies: - 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" - -babel-core@^7.0.0-0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - -babel-eslint@^9.0.0-beta.3: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - "@babel/types" "^7.0.0" - eslint-scope "3.7.1" - eslint-visitor-keys "^1.0.0" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.4.2.tgz#f276de67798a5d68f2d6e87ff518c2f6e1609877" - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babelify@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/babelify/-/babelify-9.0.0.tgz#6b2e39ffeeda3765aee60eeb5b581fd947cc64ec" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - dependencies: - tweetnacl "^0.14.3" - -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - -before-after-hook@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.1.0.tgz#83165e15a59460d13702cb8febd6a1807896db5a" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - dependencies: - callsite "1.0.0" - -big-integer@^1.6.17: - version "1.6.34" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.34.tgz#701affc8f0d73c490930a6b482dc23ed6ffc7484" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -binary@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" - dependencies: - buffers "~0.1.1" - chainsaw "~0.1.0" - -bl@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.3.3: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bluebird@~3.4.1: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - 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" - -brcast@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" - -browser-resolve@^1.11.0, browser-resolve@^1.11.3, browser-resolve@^1.7.0: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - dependencies: - resolve "1.1.7" - -browser-sync-ui@v1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz#9740527b26d1d7ace259acc0c79e5b5e37d0fdf2" - dependencies: - async-each-series "0.1.1" - connect-history-api-fallback "^1.1.0" - immutable "^3.7.6" - server-destroy "1.0.1" - socket.io-client "2.0.4" - stream-throttle "^0.1.3" - -browser-sync@^2.24.7: - version "2.24.7" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.24.7.tgz#0f93bcaabfb84a35a5c98e07682c9e45c6251a93" - dependencies: - browser-sync-ui v1.0.1 - bs-recipes "1.3.4" - chokidar "1.7.0" - connect "3.6.6" - connect-history-api-fallback "^1.5.0" - dev-ip "^1.0.1" - easy-extender "^2.3.4" - eazy-logger "3.0.2" - etag "^1.8.1" - fresh "^0.5.2" - fs-extra "3.0.1" - http-proxy "1.15.2" - immutable "3.8.2" - localtunnel "1.9.0" - micromatch "2.3.11" - opn "5.3.0" - portscanner "2.1.1" - qs "6.2.3" - raw-body "^2.3.2" - resp-modifier "6.0.2" - rx "4.1.0" - serve-index "1.9.1" - serve-static "1.13.2" - server-destroy "1.0.1" - socket.io "2.1.1" - ua-parser-js "0.7.17" - yargs "6.4.0" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-css@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/browserify-css/-/browserify-css-0.14.0.tgz#5ece581aa6f8c9aab262956fd06d57c526c9a334" - dependencies: - clean-css "^4.1.5" - concat-stream "^1.6.0" - css "^2.2.1" - find-node-modules "^1.0.4" - lodash "^4.17.4" - mime "^1.3.6" - strip-css-comments "^3.0.0" - through2 "2.0.x" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserify@^16.1.0, browserify@^16.2.2: - version "16.2.2" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.2.2.tgz#4b1f66ba0e54fa39dbc5aa4be9629142143d91b0" - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^2.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -browserslist@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.0.tgz#81cbb8e52dfa09918f93c6e051d779cb7360785d" - dependencies: - caniuse-lite "^1.0.30000878" - electron-to-chromium "^1.3.61" - node-releases "^1.0.0-alpha.11" - -bs-recipes@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/bs-recipes/-/bs-recipes-1.3.4.tgz#0d2d4d48a718c8c044769fdc4f89592dc8b69585" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - -buffer-indexof-polyfill@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz#a9fb806ce8145d5428510ce72f278bb363a638bf" - -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^5.0.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buffers@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" - -builtin-modules@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bulma@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.7.1.tgz#73c2e3b2930c90cc272029cbd19918b493fca486" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cached-path-relative@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - -camelcase@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - -caniuse-lite@^1.0.30000878: - version "1.0.30000883" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000883.tgz#597c1eabfb379bd9fbeaa778632762eb574706ac" - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - dependencies: - rsvp "^3.3.3" - -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chainsaw@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" - dependencies: - traverse ">=0.3.0 <0.4" - -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: - version "1.1.3" - resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - -charenc@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.2" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -chokidar@1.7.0, chokidar@^1.0.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - 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.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -ci-info@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -classnames@^2.2.5: - version "2.2.6" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" - -clean-css@^4.1.5: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - dependencies: - source-map "~0.6.0" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^1.0.0, clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - -cloneable-readable@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - -colors@0.5.x: - version "0.5.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" - -colors@^1.1.2, colors@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5, combined-stream@~1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@^2.11.0, commander@^2.17.1, commander@^2.2.0, commander@^2.9.0: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - -compare-versions@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - -component-emitter@1.2.1, component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -connect-history-api-fallback@^1.1.0, connect-history-api-fallback@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" - -connect@3.6.6: - version "3.6.6" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" - dependencies: - debug "2.6.9" - finalhandler "1.1.0" - parseurl "~1.3.2" - utils-merge "1.0.1" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - -convert-source-map@1.X, convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -copyfiles@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.0.0.tgz#bbd78bb78e8fd6db5c67adf54249317b24560f2a" - dependencies: - glob "^7.0.5" - minimatch "^3.0.3" - mkdirp "^0.5.1" - noms "0.0.0" - through2 "^2.0.1" - yargs "^11.0.0" - -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - -core-js@^2.4.0, core-js@^2.5.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -coveralls@^2.11.3: - version "2.13.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7" - dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.79.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.4, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -crypt@~0.0.1: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -crypto-browserify@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-vendor@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" - dependencies: - is-in-browser "^1.0.2" - -css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" - -css@2.X, css@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.3.tgz#f861f4ba61e79bedc962aa548e5780fd95cbc6be" - dependencies: - inherits "^2.0.1" - source-map "^0.1.38" - source-map-resolve "^0.5.1" - urix "^0.1.0" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" - -cssstyle@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" - dependencies: - cssom "0.3.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - dependencies: - es5-ext "^0.10.9" - -damerau-levenshtein@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.1.0" - whatwg-url "^7.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" - -debug-fabulous@1.X: - version "1.1.0" - resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.1.0.tgz#af8a08632465224ef4174a9f06308c3c2a1ebc8e" - dependencies: - debug "3.X" - memoizee "0.4.X" - object-assign "4.X" - -debug@2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@3.X, debug@^3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -decompress-response@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - dependencies: - mimic-response "^1.0.0" - -deep-diff@^0.3.5: - version "0.3.8" - resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - dependencies: - strip-bom "^3.0.0" - -defaults@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -deprecated@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" - -deps-sort@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" - dependencies: - JSONStream "^1.0.3" - shasum "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-file@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" - dependencies: - fs-exists-sync "^0.1.0" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -detect-newline@2.X, detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - -detective@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.1.0.tgz#7a20d89236d7b331ccea65832e7123b5551bb7cb" - dependencies: - acorn-node "^1.3.0" - defined "^1.0.0" - minimist "^1.1.1" - -dev-ip@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domain-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -domelementtype@1, domelementtype@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - dependencies: - dom-serializer "0" - domelementtype "1" - -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer2@~0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -easy-extender@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/easy-extender/-/easy-extender-2.3.4.tgz#298789b64f9aaba62169c77a2b3b64b4c9589b8f" - dependencies: - lodash "^4.17.10" - -eazy-logger@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.0.2.tgz#a325aa5e53d13a2225889b2ac4113b2b9636f4fc" - dependencies: - tfunk "^3.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -electron-to-chromium@^1.3.61: - version "1.3.62" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.62.tgz#2e8e2dc070c800ec8ce23ff9dfcceb585d6f9ed8" - -elliptic@^6.0.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" - -encodeurl@~1.0.1, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" - dependencies: - once "~1.3.0" - -engine.io-client@~3.1.0: - version "3.1.6" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.6.tgz#5bdeb130f8b94a50ac5cbeb72583e7a4a063ddfd" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.0.tgz#54332506f42f2edc71690d2f2a42349359f3bf7d" - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -enzyme-adapter-react-16@^1.1.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.3.1.tgz#a0f04273aee62c47521da7a2f6c7134182bd7f73" - dependencies: - enzyme-adapter-utils "^1.6.0" - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - object.values "^1.0.4" - prop-types "^15.6.2" - react-is "^16.4.2" - react-test-renderer "^16.0.0-0" - -enzyme-adapter-utils@^1.6.0: - version "1.6.1" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.6.1.tgz#f19acb8b23ddd21b2de99506b181e46138368f2a" - dependencies: - function.prototype.name "^1.1.0" - object.assign "^4.1.0" - prop-types "^15.6.2" - -enzyme@^3.3.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.5.0.tgz#fd452a698fd1352c737b641dd3a64e079f42d9d5" - dependencies: - array.prototype.flat "^1.2.1" - cheerio "^1.0.0-rc.2" - function.prototype.name "^1.1.0" - has "^1.0.3" - is-boolean-object "^1.0.0" - is-callable "^1.1.4" - is-number-object "^1.0.3" - is-string "^1.0.4" - is-subset "^0.1.1" - 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" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.10.0, es-abstract@^1.4.3, es-abstract@^1.5.1, es-abstract@^1.6.1, es-abstract@^1.7.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - -es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.46" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "1" - -es6-iterator@^2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.0.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - dependencies: - esprima "^3.1.3" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-react-app@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-2.1.0.tgz#23c909f71cbaff76b945b831d2d814b8bde169eb" - -eslint-import-resolver-node@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" - dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-flowtype@^2.50.0: - version "2.50.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.0.tgz#953e262fa9b5d0fa76e178604892cf60dfb916da" - dependencies: - lodash "^4.17.10" - -eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" - dependencies: - contains-path "^0.1.0" - debug "^2.6.8" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.2.0" - has "^1.0.1" - lodash "^4.17.4" - minimatch "^3.0.3" - read-pkg-up "^2.0.0" - resolve "^1.6.0" - -eslint-plugin-jsx-a11y@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.1.tgz#7bf56dbe7d47d811d14dbb3ddff644aa656ce8e1" - dependencies: - aria-query "^3.0.0" - array-includes "^3.0.3" - ast-types-flow "^0.0.7" - axobject-query "^2.0.1" - damerau-levenshtein "^1.0.4" - emoji-regex "^6.5.1" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - -eslint-plugin-react@^7.11.1: - version "7.11.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.0.1" - prop-types "^15.6.2" - -eslint-scope@3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - -eslint@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.4.0.tgz#d068ec03006bb9e06b429dc85f7e46c1b69fac62" - dependencies: - ajv "^6.5.0" - babel-code-frame "^6.26.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^4.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^4.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.2" - imurmurhash "^0.1.4" - inquirer "^5.2.0" - is-resolvable "^1.1.0" - js-yaml "^3.11.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.5" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^2.0.0" - require-uncached "^1.0.3" - semver "^5.5.0" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^4.0.3" - text-table "^0.2.0" - -espree@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" - dependencies: - acorn "^5.6.0" - acorn-jsx "^4.1.1" - -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.0, esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@^1.8.1, etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - dependencies: - d "1" - es5-ext "~0.10.14" - -event-stream@~3.3.0: - version "3.3.4" - resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - -events@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - dependencies: - merge "^1.2.0" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - 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" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - dependencies: - fill-range "^2.1.0" - -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" - dependencies: - os-homedir "^1.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - dependencies: - homedir-polyfill "^1.0.1" - -expect@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.5.0.tgz#18999a0eef8f8acf99023fde766d9c323c2562ed" - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.5.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.5.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.0, extend@~3.0.1, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -external-editor@^2.1.0: - version "2.2.0" - resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - 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" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -fancy-log@^1.1.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - time-stamp "^1.0.0" - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fast-xml-parser@^3.12.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.12.0.tgz#84ddcd98ca005f94e99af3ac387adc32ffb239d8" - dependencies: - nimnjs "^1.3.2" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -fbjs@^0.8.16: - version "0.8.17" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -fetch-mock@^6.5.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/fetch-mock/-/fetch-mock-6.5.2.tgz#b3842b305c13ea0f81c85919cfaa7de387adfa3e" - dependencies: - babel-polyfill "^6.26.0" - glob-to-regexp "^0.4.0" - path-to-regexp "^2.2.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" - dependencies: - debug "2.6.9" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.3.1" - unpipe "~1.0.0" - -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - -find-node-modules@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-1.0.4.tgz#b6deb3cccb699c87037677bcede2c5f5862b2550" - dependencies: - findup-sync "0.4.2" - merge "^1.2.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -findup-sync@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.2.tgz#a8117d0f73124f5a4546839579fe52d7129fb5e5" - dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" - -flagged-respawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7" - -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - -flow-bin@^0.79.1: - version "0.79.1" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.79.1.tgz#01c9f427baa6556753fa878c192d42e1ecb764b6" - -flow-typed@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.5.1.tgz#0ff565cc94d2af8c557744ba364b6f14726a6b9f" - dependencies: - "@octokit/rest" "^15.2.6" - babel-polyfill "^6.26.0" - colors "^1.1.2" - fs-extra "^5.0.0" - glob "^7.1.2" - got "^7.1.0" - md5 "^2.1.0" - mkdirp "^0.5.1" - rimraf "^2.6.2" - semver "^5.5.0" - table "^4.0.2" - through "^2.3.8" - unzipper "^0.8.11" - which "^1.3.0" - yargs "^4.2.0" - -follow-redirects@^1.2.5: - version "1.5.7" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.7.tgz#a39e4804dacb90202bca76a9e2ac10433ca6a69a" - dependencies: - debug "^3.1.0" - -font-awesome@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - dependencies: - for-in "^1.0.1" - -for-own@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1, form-data@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2, fresh@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" - -fs-extra@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.0.0, fsevents@^1.2.2, fsevents@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -function.prototype.name@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.0.tgz#8bd763cc0af860a859cc5d49384d74b932cd2327" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - is-callable "^1.1.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" - dependencies: - globule "~0.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - dependencies: - globule "^1.0.0" - -generate-function@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.2.0.tgz#1aeac896147293d27bce65eb295ce5f3f094a292" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-stream@^3.1.5: - version "3.1.18" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" - dependencies: - glob "^4.3.1" - glob2base "^0.0.12" - minimatch "^2.0.1" - ordered-read-streams "^0.1.0" - through2 "^0.6.1" - unique-stream "^1.0.0" - -glob-to-regexp@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.0.tgz#49bd677b1671022bd10921c3788f23cdebf9c7e6" - -glob-watcher@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" - dependencies: - gaze "^0.5.1" - -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - dependencies: - find-index "^0.1.1" - -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" - dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -globals@^11.1.0, globals@^11.7.0: - version "11.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globule@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -globule@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" - dependencies: - glob "~3.1.21" - lodash "~1.0.1" - minimatch "~0.2.11" - -glogg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" - dependencies: - sparkles "^1.0.0" - -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - -graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gulp-sourcemaps@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz#cbb2008450b1bcce6cd23bf98337be751bf6e30a" - dependencies: - "@gulp-sourcemaps/identity-map" "1.X" - "@gulp-sourcemaps/map-sources" "1.X" - acorn "5.X" - convert-source-map "1.X" - css "2.X" - debug-fabulous "1.X" - detect-newline "2.X" - graceful-fs "4.X" - source-map "~0.6.0" - strip-bom-string "1.X" - through2 "2.X" - -gulp-util@^3.0.0, gulp-util@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulp@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" - dependencies: - archy "^1.0.0" - chalk "^1.0.0" - deprecated "^0.0.1" - gulp-util "^3.0.0" - interpret "^1.0.0" - liftoff "^2.1.0" - minimist "^1.1.0" - orchestrator "^0.3.0" - pretty-hrtime "^1.0.0" - semver "^4.1.0" - tildify "^1.0.0" - v8flags "^2.0.2" - vinyl-fs "^0.3.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" - -handlebars@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" - har-schema "^2.0.0" - -har-validator@~5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" - dependencies: - ajv "^5.3.0" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - dependencies: - has-symbol-support-x "^1.4.1" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -history@^4.7.2: - version "4.7.2" - resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" - dependencies: - invariant "^2.2.1" - loose-envify "^1.2.0" - resolve-pathname "^2.2.0" - value-equal "^0.4.0" - warning "^3.0.0" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" - dependencies: - parse-passwd "^1.0.0" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - dependencies: - whatwg-encoding "^1.0.1" - -html-parse-stringify2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" - dependencies: - void-elements "^2.0.1" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - -htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - -http-errors@1.6.3, http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - dependencies: - agent-base "4" - debug "3.1.0" - -http-proxy@1.15.2: - version "1.15.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.2.tgz#642fdcaffe52d3448d2bda3b0079e9409064da31" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -https-proxy-agent@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" - dependencies: - agent-base "^4.1.0" - debug "^3.1.0" - -hyphenate-style-name@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" - -i18next-browser-languagedetector@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-2.2.3.tgz#4196a9964b6d51b76254706a267ba746c9ca19de" - -i18next-fetch-backend@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/i18next-fetch-backend/-/i18next-fetch-backend-0.1.0.tgz#18b67920d0e605e616f93bbdf897e59adf9c9c05" - dependencies: - i18next-xhr-backend "^1.4.3" - -i18next-xhr-backend@^1.4.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/i18next-xhr-backend/-/i18next-xhr-backend-1.5.1.tgz#50282610780c6a696d880dfa7f4ac1d01e8c3ad5" - -i18next@^11.4.0: - version "11.6.0" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-11.6.0.tgz#e0047aa3e3a0080f6f318426f90597cbb0d6ddd5" - -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.2: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - -immutable@3.8.2, immutable@^3.7.6: - version "3.8.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - dependencies: - source-map "~0.5.3" - -inquirer@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.1.0" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^5.5.2" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -insert-module-globals@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - -interpret@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" - -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-boolean-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" - -is-buffer@^1.1.0, is-buffer@^1.1.5, is-buffer@~1.1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3, is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - -is-ci@^1.0.10: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.0.tgz#3f4a08d6303a09882cef3f0fb97439c5f5ce2d53" - dependencies: - ci-info "^1.3.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-in-browser@^1.0.2, is-in-browser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" - -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.19.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz#8fd6e40363cd06b963fa877d444bfb5eddc62175" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number-like@^1.0.3: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-number-like/-/is-number-like-1.0.8.tgz#2e129620b50891042e44e9bbbb30593e75cfbbe3" - dependencies: - lodash.isfinite "^3.3.2" - -is-number-object@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - dependencies: - path-is-inside "^1.0.1" - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - -is-promise@^2.1, is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - dependencies: - is-unc-path "^1.0.0" - -is-resolvable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - -is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - -is-string@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - dependencies: - unc-path-regex "^0.1.2" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - -isarray@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul-api@^1.3.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.6.tgz#0c695f17e533131de8c49e0657175dcfd8af8a8f" - dependencies: - 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 "^2.1.0" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.5" - istanbul-reports "^1.4.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" - -istanbul-lib-coverage@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" - -istanbul-lib-hook@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" - semver "^5.3.0" - -istanbul-lib-instrument@^2.1.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz#b287cbae2b5f65f3567b05e2e29b275eaf92d25e" - dependencies: - "@babel/generator" "7.0.0-beta.51" - "@babel/parser" "7.0.0-beta.51" - "@babel/template" "7.0.0-beta.51" - "@babel/traverse" "7.0.0-beta.51" - "@babel/types" "7.0.0-beta.51" - istanbul-lib-coverage "^2.0.1" - semver "^5.5.0" - -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" - dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.4.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.0.tgz#c6c2867fa65f59eb7dcedb7f845dfc76aaee70f9" - dependencies: - handlebars "^4.0.11" - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - dependencies: - throat "^4.0.0" - -jest-cli@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.5.0.tgz#d316b8e34a38a610a1efc4f0403d8ef8a55e4492" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - 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.5.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.5.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.5.0" - jest-runner "^23.5.0" - jest-runtime "^23.5.0" - jest-snapshot "^23.5.0" - jest-util "^23.4.0" - jest-validate "^23.5.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 "^11.0.0" - -jest-config@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.5.0.tgz#3770fba03f7507ee15f3b8867c742e48f31a9773" - dependencies: - babel-core "^6.0.0" - babel-jest "^23.4.2" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.5.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.5.0" - jest-util "^23.4.0" - jest-validate "^23.5.0" - micromatch "^2.3.11" - pretty-format "^23.5.0" - -jest-diff@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.5.0.tgz#250651a433dd0050290a07642946cc9baaf06fba" - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.5.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.5.0.tgz#77f7e2afe6132a80954b920006e78239862b10ba" - dependencies: - chalk "^2.0.1" - pretty-format "^23.5.0" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - -jest-haste-map@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.5.0.tgz#d4ca618188bd38caa6cb20349ce6610e194a8065" - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - 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@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.5.0.tgz#05fe7f1788e650eeb5a03929e6461ea2e9f3db53" - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.5.0" - is-generator-fn "^1.0.0" - jest-diff "^23.5.0" - jest-each "^23.5.0" - jest-matcher-utils "^23.5.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.5.0" - jest-util "^23.4.0" - pretty-format "^23.5.0" - -jest-junit@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/jest-junit/-/jest-junit-5.1.0.tgz#e8e497d810a829bf02783125aab74b5df6caa8fe" - dependencies: - jest-validate "^23.0.1" - mkdirp "^0.5.1" - strip-ansi "^4.0.0" - xml "^1.0.1" - -jest-leak-detector@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.5.0.tgz#14ac2a785bd625160a2ea968fd5d98b7dcea3e64" - dependencies: - pretty-format "^23.5.0" - -jest-matcher-utils@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.5.0.tgz#0e2ea67744cab78c9ab15011c4d888bdd3e49e2a" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.5.0" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" - -jest-resolve-dependencies@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.5.0.tgz#10c4d135beb9d2256de1fedc7094916c3ad74af7" - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.5.0" - -jest-resolve@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.5.0.tgz#3b8e7f67e84598f0caf63d1530bd8534a189d0e6" - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.5.0.tgz#570f7a044da91648b5bb9b6baacdd511076c71d7" - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.5.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.5.0" - jest-jasmine2 "^23.5.0" - jest-leak-detector "^23.5.0" - jest-message-util "^23.4.0" - jest-runtime "^23.5.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.5.0.tgz#eb503525a196dc32f2f9974e3482d26bdf7b63ce" - dependencies: - babel-core "^6.0.0" - 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 "^23.5.0" - jest-haste-map "^23.5.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.5.0" - jest-snapshot "^23.5.0" - jest-util "^23.4.0" - jest-validate "^23.5.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 "^11.0.0" - -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - -jest-snapshot@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.5.0.tgz#cc368ebd8513e1175e2a7277f37a801b7358ae79" - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.5.0" - jest-matcher-utils "^23.5.0" - jest-message-util "^23.4.0" - jest-resolve "^23.5.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.5.0" - semver "^5.5.0" - -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^23.0.1, jest-validate@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.5.0.tgz#f5df8f761cf43155e1b2e21d6e9de8a2852d0231" - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.5.0" - -jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - string-length "^2.0.0" - -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - dependencies: - merge-stream "^1.0.1" - -jest@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.5.0.tgz#80de353d156ea5ea4a7332f7962ac79135fbc62e" - dependencies: - import-local "^1.0.0" - jest-cli "^23.5.0" - -js-base64@^2.1.8: - version "2.4.9" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" - -js-levenshtein@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5" - -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - -js-yaml@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - -js-yaml@^3.11.0, js-yaml@^3.7.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - dependencies: - 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 "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - 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.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - -jsesc@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jss-camel-case@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44" - dependencies: - hyphenate-style-name "^1.0.2" - -jss-compose@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" - dependencies: - warning "^3.0.0" - -jss-default-unit@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" - -jss-expand@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.3.0.tgz#02be076efe650125c842f5bb6fb68786fe441ed6" - -jss-extend@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.2.0.tgz#4af09d0b72fb98ee229970f8ca852fec1ca2a8dc" - dependencies: - warning "^3.0.0" - -jss-global@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" - -jss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" - dependencies: - warning "^3.0.0" - -jss-preset-default@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.5.0.tgz#d3a457012ccd7a551312014e394c23c4b301cadd" - dependencies: - jss-camel-case "^6.1.0" - jss-compose "^5.0.0" - jss-default-unit "^8.0.2" - jss-expand "^5.3.0" - jss-extend "^6.2.0" - jss-global "^3.0.0" - jss-nested "^6.0.1" - jss-props-sort "^6.0.0" - jss-template "^1.0.1" - jss-vendor-prefixer "^7.0.0" - -jss-props-sort@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" - -jss-template@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.1.tgz#09aed9d86cc547b07f53ef355d7e1777f7da430a" - dependencies: - warning "^3.0.0" - -jss-vendor-prefixer@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" - dependencies: - css-vendor "^0.3.8" - -jss@^9.7.0: - version "9.8.7" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05" - dependencies: - is-in-browser "^1.1.3" - symbol-observable "^1.1.0" - warning "^3.0.0" - -jsx-ast-utils@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" - dependencies: - array-includes "^3.0.3" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - -labeled-stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.1.tgz#9cffa32fd99e1612fd1d86a8db962416d5292926" - dependencies: - inherits "^2.0.1" - isarray "^2.0.4" - stream-splicer "^2.0.0" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - dependencies: - invert-kv "^1.0.0" - -lcov-parse@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -liftoff@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - dependencies: - extend "^3.0.0" - findup-sync "^2.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - -limiter@^1.0.5: - version "1.1.3" - resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.3.tgz#32e2eb55b2324076943e5d04c1185ffb387968ef" - -listenercount@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -localtunnel@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.9.0.tgz#8ffecdcf8c8a14f62df1056cf9d54acbb0bb9a8f" - dependencies: - axios "0.17.1" - debug "2.6.8" - openurl "1.1.1" - yargs "6.6.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -lodash-es@^4.17.5: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - -lodash.clonedeep@^4.3.2: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - -lodash.isfinite@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3" - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - -lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@~4.17.10: - version "4.17.10" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" - -lodash@~1.0.1: - version "1.0.2" - resolved "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" - -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - -lru-cache@^4.0.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-queue@0.1: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - dependencies: - es5-ext "~0.10.2" - -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - dependencies: - kind-of "^6.0.2" - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.0, map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -math-random@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -md5@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9" - dependencies: - charenc "~0.0.1" - crypt "~0.0.1" - is-buffer "~1.1.1" - -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -memoizee@0.4.X: - version "0.4.14" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" - dependencies: - d "1" - es5-ext "^0.10.45" - es6-weak-map "^2.0.2" - event-emitter "^0.3.5" - is-promise "^2.1" - lru-queue "0.1" - next-tick "1" - timers-ext "^0.1.5" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - -merge@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -micromatch@2.3.11, micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.0.4, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - 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" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@~1.36.0: - version "1.36.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19, mime-types@~2.1.7: - version "2.1.20" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" - dependencies: - mime-db "~1.36.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.3.6: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@^2.0.1: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimatch@~0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -minimist@0.0.8: - version "0.0.8" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.0" - resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -module-deps@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.1.0.tgz#d1e1efc481c6886269f7112c52c3236188e16479" - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.0.2" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -moment@^2.22.2: - version "2.22.2" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" - -moo@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.4.3.tgz#3f847a26f31cf625a956a87f2b10fbc013bfd10e" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.10.0, nan@^2.9.2: - version "2.11.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - 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-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natives@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.4.tgz#2f0f224fc9a7dd53407c7667c84cf8dbe773de58" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -nearley@^2.7.10: - version "2.15.1" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.15.1.tgz#965e4e6ec9ed6b80fc81453e161efbcebb36d247" - dependencies: - moo "^0.4.3" - nomnom "~1.6.2" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - semver "^5.4.1" - -needle@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -next-tick@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - -nimn-date-parser@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nimn-date-parser/-/nimn-date-parser-1.0.0.tgz#4ce55d1fd5ea206bbe82b76276f7b7c582139351" - -nimn_schema_builder@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/nimn_schema_builder/-/nimn_schema_builder-1.1.0.tgz#b370ccf5b647d66e50b2dcfb20d0aa12468cd247" - -nimnjs@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/nimnjs/-/nimnjs-1.3.2.tgz#a6a877968d87fad836375a4f616525e55079a5ba" - dependencies: - nimn-date-parser "^1.0.0" - nimn_schema_builder "^1.0.0" - -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - -node-fetch@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" - -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-mkdirs@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/node-mkdirs/-/node-mkdirs-0.0.1.tgz#b20f50ba796a4f543c04a69942d06d06f8aaf552" - -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" - dependencies: - growly "^1.3.0" - semver "^5.4.1" - shellwords "^0.1.1" - which "^1.3.0" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.0.0-alpha.11: - version "1.0.0-alpha.11" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" - dependencies: - semver "^5.3.0" - -node-sass-chokidar@^1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/node-sass-chokidar/-/node-sass-chokidar-1.3.3.tgz#0bc83b6f4a8264ae27cbc80b18c49ed445d07d68" - dependencies: - async-foreach "^0.1.3" - chokidar "^2.0.4" - get-stdin "^4.0.1" - glob "^7.0.3" - meow "^3.7.0" - node-sass "^4.9.2" - sass-graph "^2.1.1" - stdout-stream "^1.4.0" - -node-sass@^4.9.2: - version "4.9.3" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.3.tgz#f407cf3d66f78308bb1e346b24fa428703196224" - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash.assign "^4.2.0" - lodash.clonedeep "^4.3.2" - lodash.mergewith "^4.6.0" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.10.0" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "2.87.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -nomnom@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.6.2.tgz#84a66a260174408fc5b77a18f888eccc44fb6971" - dependencies: - colors "0.5.x" - underscore "~1.4.4" - -noms@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" - dependencies: - inherits "^2.0.1" - readable-stream "~1.0.31" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" - -npm-packlist@^1.1.6: - version "1.1.11" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npm-run-all@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.3.tgz#49f15b55a66bb4101664ce270cb18e7103f8f185" - dependencies: - ansi-styles "^3.2.0" - chalk "^2.1.0" - cross-spawn "^6.0.4" - memorystream "^0.3.1" - minimatch "^3.0.4" - ps-tree "^1.1.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - dependencies: - path-key "^2.0.0" - -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" - dependencies: - boolbase "~1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -nwsapi@^2.0.7: - version "2.0.8" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" - -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - -object-assign@4.X, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" - -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" - -object-path@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - -object.entries@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.2.0, object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -object.values@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - -openurl@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/openurl/-/openurl-1.1.1.tgz#3875b4b0ef7a52c156f0db41d4609dbb0f94b387" - -opn@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" - dependencies: - is-wsl "^1.1.0" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -orchestrator@^0.3.0: - version "0.3.8" - resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" - dependencies: - end-of-stream "~0.1.5" - sequencify "~0.0.7" - stream-consume "~0.1.0" - -ordered-read-streams@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" - -os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -os-homedir@^1.0.0, os-homedir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - dependencies: - lcid "^1.0.0" - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@0, osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -outpipe@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" - dependencies: - shell-quote "^1.4.2" - -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - dependencies: - p-finally "^1.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - dependencies: - "@types/node" "*" - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-parse@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - dependencies: - path-root-regex "^0.1.0" - -path-to-regexp@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" - dependencies: - isarray "0.0.1" - -path-to-regexp@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - dependencies: - through "~2.3" - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - -pom-parser@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pom-parser/-/pom-parser-1.1.1.tgz#6fab4d2498e87c862072ab205aa88b1209e5f966" - dependencies: - bluebird "^3.3.3" - coveralls "^2.11.3" - traverse "^0.6.6" - xml2js "^0.4.9" - -portscanner@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.1.1.tgz#eabb409e4de24950f5a2a516d35ae769343fbb96" - dependencies: - async "1.5.2" - is-number-like "^1.0.3" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.13.7, prettier@^1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" - -pretty-format@^23.5.0: - version "23.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.5.0.tgz#0f9601ad9da70fe690a269cd3efca732c210687c" - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - -private@^0.1.6, private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" - -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - dependencies: - asap "~2.0.3" - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" - object-assign "^4.1.1" - -ps-tree@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" - dependencies: - event-stream "~3.3.0" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - -psl@^1.1.24: - version "1.1.29" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - -qs@6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - -qs@~6.5.1, qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -raf@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - dependencies: - performance-now "^2.1.0" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -randomatic@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^16.4.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.4.2.tgz#4afed569689f2c561d2b8da0b819669c38a0bda4" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -react-i18next@^7.9.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-7.11.0.tgz#8933cc8d75dce015204ba921ece099810e2944d4" - dependencies: - hoist-non-react-statics "^2.3.1" - html-parse-stringify2 "2.0.1" - prop-types "^15.6.0" - -react-is@^16.4.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.2.tgz#84891b56c2b6d9efdee577cc83501dfc5ecead88" - -react-jss@^8.6.0: - version "8.6.1" - resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.6.1.tgz#a06e2e1d2c4d91b4d11befda865e6c07fbd75252" - dependencies: - hoist-non-react-statics "^2.5.0" - jss "^9.7.0" - jss-preset-default "^4.3.0" - prop-types "^15.6.0" - theming "^1.3.0" - -react-redux@^5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.7.tgz#0dc1076d9afb4670f993ffaef44b8f8c1155a4c8" - dependencies: - hoist-non-react-statics "^2.5.0" - invariant "^2.0.0" - lodash "^4.17.5" - lodash-es "^4.17.5" - loose-envify "^1.1.0" - prop-types "^15.6.0" - -react-router-dom@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" - dependencies: - history "^4.7.2" - invariant "^2.2.4" - loose-envify "^1.3.1" - prop-types "^15.6.1" - react-router "^4.3.1" - warning "^4.0.1" - -react-router-redux@^5.0.0-alpha.9: - version "5.0.0-alpha.9" - resolved "https://registry.yarnpkg.com/react-router-redux/-/react-router-redux-5.0.0-alpha.9.tgz#825431516e0e6f1fd93b8807f6bd595e23ec3d10" - dependencies: - history "^4.7.2" - prop-types "^15.6.0" - react-router "^4.2.0" - -react-router@^4.2.0, react-router@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" - dependencies: - history "^4.7.2" - hoist-non-react-statics "^2.5.0" - invariant "^2.2.4" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.1" - warning "^4.0.1" - -react-test-renderer@^16.0.0-0, react-test-renderer@^16.4.1: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.4.2.tgz#4e03eca9359bb3210d4373f7547d1364218ef74e" - dependencies: - fbjs "^0.8.16" - object-assign "^4.1.1" - prop-types "^15.6.0" - react-is "^16.4.2" - -react@^16.4.2: - version "16.4.2" - resolved "https://registry.yarnpkg.com/react/-/react-16.4.2.tgz#2cd90154e3a9d9dd8da2991149fdca3c260e129f" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.0" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - dependencies: - readable-stream "^2.0.2" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@~2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -realpath-native@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" - dependencies: - util.promisify "^1.0.0" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redux-devtools-extension@^2.13.5: - version "2.13.5" - resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.5.tgz#3ff34f7227acfeef3964194f5f7fc2765e5c5a39" - -redux-logger@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf" - dependencies: - deep-diff "^0.3.5" - -redux-mock-store@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.5.3.tgz#1f10528949b7ce8056c2532624f7cafa98576c6d" - dependencies: - lodash.isplainobject "^4.0.6" - -redux-thunk@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" - -redux@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03" - dependencies: - loose-envify "^1.1.0" - symbol-observable "^1.2.0" - -regenerate-unicode-properties@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regenerator-transform@^0.13.3: - version "0.13.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" - dependencies: - private "^0.1.6" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365" - -regexpu-core@^4.1.3, regexpu-core@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^7.0.0" - regjsgen "^0.4.0" - regjsparser "^0.3.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.0.2" - -regjsgen@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" - -regjsparser@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" - dependencies: - lodash "^4.13.1" - -request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@2.79.0: - version "2.79.0" - resolved "http://registry.npmjs.org/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -request@2.87.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - -request@^2.87.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.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.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@1.x.x: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-pathname@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -resp-modifier@6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" - dependencies: - debug "^2.2.0" - minimatch "^3.0.2" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - -rx@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" - -rxjs@^5.5.2: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - dependencies: - symbol-observable "1.0.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sass-graph@^2.1.1, sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - -sax@>=0.6.0, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" - -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -sequencify@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" - -serve-index@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -server-destroy@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5, setimmediate@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shell-quote@^1.4.2, shell-quote@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" - dependencies: - array-filter "~0.0.0" - array-map "~0.0.0" - array-reduce "~0.0.0" - jsonify "~0.0.0" - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - dependencies: - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - -socket.io-adapter@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" - -socket.io-client@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~2.6.4" - engine.io-client "~3.1.0" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.1.1" - to-array "0.1.4" - -socket.io-client@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" - to-array "0.1.4" - -socket.io-parser@~3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - has-binary2 "~1.0.2" - isarray "2.0.1" - -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - dependencies: - debug "~3.1.0" - engine.io "~3.2.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.6: - version "0.5.9" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.1.38: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.4.2, source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - -spdx-correct@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -sshpk@^1.7.0: - version "1.14.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - safer-buffer "^2.0.2" - optionalDependencies: - bcrypt-pbkdf "^1.0.0" - ecc-jsbn "~0.1.1" - jsbn "~0.1.0" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - dependencies: - readable-stream "^2.0.1" - -stealthy-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - -stream-browserify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - -stream-consume@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" - -stream-http@^2.0.0: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-splicer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -stream-throttle@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/stream-throttle/-/stream-throttle-0.1.3.tgz#add57c8d7cc73a81630d31cd55d3961cfafba9c3" - dependencies: - commander "^2.2.0" - limiter "^1.0.5" - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" - -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -stringstream@~0.0.4: - version "0.0.6" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-bom-string@1.X: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" - dependencies: - first-chunk-stream "^1.0.0" - is-utf8 "^0.2.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-css-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-css-comments/-/strip-css-comments-3.0.0.tgz#7a5625eff8a2b226cf8947a11254da96e13dae89" - dependencies: - is-regexp "^1.0.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - dependencies: - minimist "^1.1.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - dependencies: - has-flag "^3.0.0" - -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - -symbol-observable@^1.1.0, symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - -symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - dependencies: - acorn-node "^1.2.0" - -table@^4.0.2, table@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" - dependencies: - ajv "^6.0.1" - ajv-keywords "^3.0.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -tar@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -tar@^4: - version "4.4.6" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -test-exclude@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.2.tgz#8b67aa8408f84afc225b06669e25c510f8582820" - dependencies: - arrify "^1.0.1" - minimatch "^3.0.4" - read-pkg-up "^3.0.0" - require-main-filename "^1.0.1" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - -tfunk@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-3.1.0.tgz#38e4414fc64977d87afdaa72facb6d29f82f7b5b" - dependencies: - chalk "^1.1.1" - object-path "^0.9.0" - -theming@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" - dependencies: - brcast "^3.0.1" - is-function "^1.0.1" - is-plain-object "^2.0.1" - prop-types "^15.5.8" - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - -through2@2.0.x, through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -through2@^0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -tildify@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - dependencies: - os-homedir "^1.0.0" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - dependencies: - process "~0.11.0" - -timers-ext@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.5.tgz#77147dd4e76b660c2abb8785db96574cbbd12922" - dependencies: - es5-ext "~0.10.14" - next-tick "1" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - -"traverse@>=0.3.0 <0.4": - version "0.3.9" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" - -traverse@^0.6.6: - version "0.6.6" - resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - dependencies: - glob "^7.1.2" - -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - dependencies: - safe-buffer "^5.0.1" - -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -ua-parser-js@0.7.17: - version "0.7.17" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" - -ua-parser-js@^0.7.18: - version "0.7.18" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.18.tgz#a7bfd92f56edfb117083b69e31d2aa8882d4b1ed" - -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - -undeclared-identifiers@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.2.tgz#7d850a98887cff4bd0bf64999c014d08ed6d1acc" - dependencies: - acorn-node "^1.3.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - -underscore@~1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unique-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzipper@^0.8.11: - version "0.8.14" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" - dependencies: - big-integer "^1.6.17" - binary "~0.3.0" - bluebird "~3.4.1" - buffer-indexof-polyfill "~1.0.0" - duplexer2 "~0.1.4" - fstream "~1.0.10" - listenercount "~1.0.1" - readable-stream "~2.1.5" - setimmediate "~1.0.4" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - dependencies: - prepend-http "^1.0.1" - -url-template@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - -url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util.promisify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - dependencies: - inherits "2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^3.0.0, uuid@^3.1.0, uuid@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - -v8flags@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vinyl-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vinyl-buffer/-/vinyl-buffer-1.0.1.tgz#96c1a3479b8c5392542c612029013b5b27f88bbf" - dependencies: - bl "^1.2.1" - through2 "^2.0.3" - -vinyl-fs@^0.3.0: - version "0.3.14" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" - dependencies: - defaults "^1.0.0" - glob-stream "^3.1.5" - glob-watcher "^0.0.6" - graceful-fs "^3.0.0" - mkdirp "^0.5.0" - strip-bom "^1.0.0" - through2 "^0.6.1" - vinyl "^0.4.0" - -vinyl-source-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-2.0.0.tgz#f38a5afb9dd1e93b65d550469ac6182ac4f54b8e" - dependencies: - through2 "^2.0.3" - vinyl "^2.1.0" - -vinyl@^0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - -vinyl@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -vm-browserify@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" - -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - -w3c-hr-time@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" - dependencies: - browser-process-hrtime "^0.1.2" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - dependencies: - makeerror "1.0.x" - -warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" - dependencies: - loose-envify "^1.0.0" - -warning@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607" - dependencies: - loose-envify "^1.0.0" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchify@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.11.0.tgz#03f1355c643955e7ab8dcbf399f624644221330f" - dependencies: - anymatch "^1.3.0" - browserify "^16.1.0" - chokidar "^1.0.0" - defined "^1.0.0" - outpipe "^1.1.0" - through2 "^2.0.0" - xtend "^4.0.0" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" - dependencies: - iconv-lite "0.4.23" - -whatwg-fetch@>=0.10.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" - -whatwg-mimetype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - dependencies: - async-limiter "~1.0.0" - -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - -xml2js@^0.4.9: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" - -xml@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" - -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs-parser@^4.1.0, yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - dependencies: - camelcase "^3.0.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - dependencies: - camelcase "^4.1.0" - -yargs@6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.4.0.tgz#816e1a866d5598ccf34e5596ddce22d92da490d4" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^4.1.0" - -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^4.2.0: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 3097e884f1f4443697745ca63087d1a8be07727b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 6 Sep 2018 12:18:08 +0200 Subject: [PATCH 41/70] remove test that got wrong after modifying state and remove unneccessary console logging --- scm-ui/src/permissions/modules/permissions.js | 4 ---- scm-ui/src/permissions/modules/permissions.test.js | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index a818d725a0..4cb55b9b2b 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -224,8 +224,6 @@ export function createPermission( callback?: () => void ) { return function(dispatch: Dispatch) { - console.log("createPermission aufruf"); - console.log(callback); dispatch(createPermissionPending(permission, namespace, repoName)); return apiClient .post( @@ -234,9 +232,7 @@ export function createPermission( CONTENT_TYPE ) .then(() => { - console.log("then Pfad"); dispatch(createPermissionSuccess(permission, namespace, repoName)); - console.log(callback); if (callback) { callback(); } diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 53805641d6..03952ac998 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -470,7 +470,7 @@ describe("permissions reducer", () => { ); }); - it("should add permission", () => { + /*it("should add permission", () => { //changing state had to be removed because of errors const oldState = { "hitchhiker/puzzle42": { entries: [hitchhiker_puzzle42Permission_user_eins] @@ -495,7 +495,7 @@ describe("permissions reducer", () => { expect(newState["hitchhiker/puzzle42"]).toEqual( expectedState["hitchhiker/puzzle42"] ); - }); + });*/ }); describe("permissions selectors", () => { From 50d0769db0328ff49893cdf062dd24545bfe02d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Fri, 7 Sep 2018 09:55:07 +0200 Subject: [PATCH 42/70] correct wrong mocking url --- scm-ui/src/permissions/modules/permissions.test.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 03952ac998..8d5a0a8ad6 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -94,13 +94,14 @@ const hitchhiker_puzzle42RepoPermissions = { }, _links: { create: { - link: "link" + href: + "http://localhost:8081/scm/api/rest/v2/repositories/hitchhiker/puzzle42/permissions" } } }; describe("permission fetch", () => { - const REPOS_URL = "/scm/api/rest/v2/repositories"; + const REPOS_URL = "/api/rest/v2/repositories"; const mockStore = configureMockStore([thunk]); afterEach(() => { @@ -118,7 +119,7 @@ describe("permission fetch", () => { { type: FETCH_PERMISSIONS_PENDING, payload: { - namespace: namespace, + namespace: "hitchhiker", repoName: "puzzle42" }, itemId: "hitchhiker/puzzle42" @@ -236,7 +237,7 @@ describe("permission fetch", () => { }); fetchMock.getOnce( - REPOS_URL + "/hitchhiker/puzzle42", + REPOS_URL + "/hitchhiker/puzzle42/permissions", hitchhiker_puzzle42RepoPermissions ); From 46132585e8861de45d74d96aa3c0504739e2d954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Fri, 7 Sep 2018 10:04:42 +0200 Subject: [PATCH 43/70] add check if links exists in order to update permissions directly before fetching --- scm-ui/src/permissions/containers/SinglePermission.js | 2 +- scm-ui/src/permissions/modules/permissions.js | 6 +++--- scm-ui/src/permissions/modules/permissions.test.js | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 76216eae3e..58525f1090 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -90,7 +90,7 @@ class SinglePermission extends React.Component { render() { const { permission } = this.state; const { loading, error, namespace, repoName } = this.props; - const typeSelector = this.props.permission._links.update ? ( + const typeSelector = this.props.permission._links && this.props.permission._links.update ? ( - ) : ( - - ); - - const errorNotification = error ? ( - - ) : null; + const { loading, namespace, repoName } = this.props; + const typeSelector = + this.props.permission._links && this.props.permission._links.update ? ( + + ) : ( + + ); return ( @@ -122,7 +113,6 @@ class SinglePermission extends React.Component { deletePermission={this.deletePermission} loading={this.props.deleteLoading} /> - {errorNotification} ); @@ -166,19 +156,6 @@ const mapStateToProps = (state, ownProps) => { ownProps.repoName, permission.name ); - const error = - getModifyPermissionFailure( - state, - ownProps.namespace, - ownProps.repoName, - permission.name - ) || - getDeletePermissionFailure( - state, - ownProps.namespace, - ownProps.repoName, - permission.name - ); const deleteLoading = isDeletePermissionPending( state, ownProps.namespace, @@ -186,7 +163,7 @@ const mapStateToProps = (state, ownProps) => { permission.name ); - return { loading, error, deleteLoading }; + return { loading, deleteLoading }; }; const mapDispatchToProps = dispatch => { diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index c279660160..298a909aac 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -233,13 +233,8 @@ export function createPermission( CONTENT_TYPE ) .then(response => { - console.log(response); - const location = response.headers.Location; - return apiClient.get( - `${REPOS_URL}/${namespace}/${repoName}/${PERMISSIONS_URL}/${ - permission.name - }` - ); + const location = response.headers.get("Location"); + return apiClient.get(location); }) .then(response => response.json()) .then(createdPermission => { @@ -600,3 +595,32 @@ export function getDeletePermissionsFailure( } return null; } + +export function getModifyPermissionsFailure( + state: Object, + namespace: string, + repoName: string +) { + const permissions = + state.permissions && state.permissions[namespace + "/" + repoName] + ? state.permissions[namespace + "/" + repoName].entries + : null; + if (permissions == null) return undefined; + for (let i = 0; i < permissions.length; i++) { + if ( + getModifyPermissionFailure( + state, + namespace, + repoName, + permissions[i].name + ) + ) { + return getFailure( + state, + MODIFY_PERMISSION, + namespace + "/" + repoName + "/" + permissions[i].name + ); + } + } + return null; +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 9247b0c4be..9c8416746c 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -18,6 +18,7 @@ import reducer, { deletePermissionSuccess, getDeletePermissionFailure, isDeletePermissionPending, + getModifyPermissionsFailure, MODIFY_PERMISSION_FAILURE, MODIFY_PERMISSION_PENDING, FETCH_PERMISSIONS, @@ -234,12 +235,15 @@ describe("permission fetch", () => { it("should add a permission successfully", () => { // unmatched fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { - status: 204 + status: 204, + headers: { + location: "/hitchhiker/puzzle42/permissions/user_eins" + } }); fetchMock.getOnce( - REPOS_URL + "/hitchhiker/puzzle42/permissions", - hitchhiker_puzzle42RepoPermissions + REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins", + hitchhiker_puzzle42Permission_user_eins ); const store = mockStore({}); @@ -283,9 +287,16 @@ describe("permission fetch", () => { it("should call the callback after permission successfully created", () => { // unmatched fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { - status: 204 + status: 204, + headers: { + location: "/hitchhiker/puzzle42/permissions/user_eins" + } }); + fetchMock.getOnce( + REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins", + hitchhiker_puzzle42Permission_user_eins + ); let callMe = "not yet"; const callback = () => { @@ -566,13 +577,13 @@ describe("permissions selectors", () => { ).toEqual(true); }); - it("should return false, when modify permissions is not pending", () => { + it("should return false, when modify permission is not pending", () => { expect( isModifyPermissionPending({}, "hitchiker", "puzzle42", "user_eins") ).toEqual(false); }); - it("should return error when modify permissions did fail", () => { + it("should return error when modify permission did fail", () => { const state = { failure: { [MODIFY_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error @@ -583,12 +594,32 @@ describe("permissions selectors", () => { ).toEqual(error); }); - it("should return undefined when modify permissions did not fail", () => { + it("should return undefined when modify permission did not fail", () => { expect( getModifyPermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") ).toBe(undefined); }); + it("should return error when one of the modify permissions did fail", () => { + const state = { + permissions: { + "hitchhiker/puzzle42": { entries: hitchhiker_puzzle42Permissions } + }, + failure: { + [MODIFY_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error + } + }; + expect( + getModifyPermissionsFailure(state, "hitchhiker", "puzzle42") + ).toEqual(error); + }); + + it("should return undefined when no modify permissions did not fail", () => { + expect(getModifyPermissionsFailure({}, "hitchhiker", "puzzle42")).toBe( + undefined + ); + }); + it("should return true, when createPermission is true", () => { const state = { permissions: { @@ -622,13 +653,13 @@ describe("permissions selectors", () => { ).toEqual(true); }); - it("should return false, when delete permissions is not pending", () => { + it("should return false, when delete permission is not pending", () => { expect( isDeletePermissionPending({}, "hitchiker", "puzzle42", "user_eins") ).toEqual(false); }); - it("should return error when delete permissions did fail", () => { + it("should return error when delete permission did fail", () => { const state = { failure: { [DELETE_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error @@ -639,7 +670,7 @@ describe("permissions selectors", () => { ).toEqual(error); }); - it("should return undefined when delete permissions did not fail", () => { + it("should return undefined when delete permission did not fail", () => { expect( getDeletePermissionFailure({}, "hitchhiker", "puzzle42", "user_eins") ).toBe(undefined); diff --git a/scm-ui/src/repos/components/PermissionsNavLink.test.js b/scm-ui/src/repos/components/PermissionsNavLink.test.js index 43ea25079f..b8b44f346a 100644 --- a/scm-ui/src/repos/components/PermissionsNavLink.test.js +++ b/scm-ui/src/repos/components/PermissionsNavLink.test.js @@ -4,10 +4,7 @@ import "../../tests/enzyme"; import "../../tests/i18n"; import PermissionsNavLink from "./PermissionsNavLink"; -jest.mock("../../components/modals/ConfirmAlert"); -jest.mock("../../components/navigation/NavLink", () => () =>
foo
); - -describe("PermissionsNavLink", () => { +xdescribe("PermissionsNavLink", () => { it("should render nothing, if the modify link is missing", () => { const repository = { _links: {} From a31914f7ca460c6c5e7a5b025eb0874bc49d1214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 15:45:55 +0200 Subject: [PATCH 48/70] use only one reset state for all permissions --- scm-ui/src/modules/failure.js | 18 ++++++++++- scm-ui/src/modules/pending.js | 19 +++++++++++- .../src/permissions/containers/Permissions.js | 20 +++++++++++-- .../containers/SinglePermission.js | 30 +------------------ scm-ui/src/permissions/modules/permissions.js | 25 ++++++++-------- 5 files changed, 65 insertions(+), 47 deletions(-) diff --git a/scm-ui/src/modules/failure.js b/scm-ui/src/modules/failure.js index 67df22623b..49a48e7876 100644 --- a/scm-ui/src/modules/failure.js +++ b/scm-ui/src/modules/failure.js @@ -13,6 +13,20 @@ function extractIdentifierFromFailure(action: Action) { return identifier; } +function removeAllEntriesOfIdentifierFromState( + state: Object, + payload: any, + identifier: string +) { + const newState = {}; + for (let failureType in state) { + if (failureType !== identifier && !failureType.startsWith(identifier)) { + newState[failureType] = state[failureType]; + } + } + return newState; +} + function removeFromState(state: Object, identifier: string) { const newState = {}; for (let failureType in state) { @@ -47,7 +61,9 @@ export default function reducer( if (action.itemId) { identifier += "/" + action.itemId; } - return removeFromState(state, identifier); + if (action.payload) + return removeAllEntriesOfIdentifierFromState(state, action.payload, identifier); + else return removeFromState(state, identifier); } } return state; diff --git a/scm-ui/src/modules/pending.js b/scm-ui/src/modules/pending.js index e83345aee6..306d8a157a 100644 --- a/scm-ui/src/modules/pending.js +++ b/scm-ui/src/modules/pending.js @@ -19,6 +19,20 @@ function removeFromState(state: Object, identifier: string) { return newState; } +function removeAllEntriesOfIdentifierFromState( + state: Object, + payload: any, + identifier: string +) { + const newState = {}; + for (let childType in state) { + if (childType !== identifier && !childType.startsWith(identifier)) { + newState[childType] = state[childType]; + } + } + return newState; +} + function extractIdentifierFromPending(action: Action) { const type = action.type; let identifier = type.substring(0, type.length - PENDING_SUFFIX.length); @@ -48,7 +62,10 @@ export default function reducer( if (action.itemId) { identifier += "/" + action.itemId; } - return removeFromState(state, identifier); + if (action.payload) + return removeAllEntriesOfIdentifierFromState(state, action.payload, identifier); + else + return removeFromState(state, identifier); } } } diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 53ccc4b84a..93409a47ad 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -12,7 +12,10 @@ import { isCreatePermissionPending, getCreatePermissionFailure, createPermissionReset, - getDeletePermissionsFailure, getModifyPermissionsFailure + getDeletePermissionsFailure, + getModifyPermissionsFailure, + modifyPermissionReset, + deletePermissionReset } from "../modules/permissions"; import { Loading, ErrorPage } from "@scm-manager/ui-components"; import type { @@ -42,7 +45,8 @@ type Props = { callback?: () => void ) => void, createPermissionReset: (string, string) => void, - + modifyPermissionReset: (string, string) => void, + deletePermissionReset: (string, string) => void, // context props t: string => string, match: any, @@ -55,10 +59,14 @@ class Permissions extends React.Component { fetchPermissions, namespace, repoName, - createPermissionReset + modifyPermissionReset, + createPermissionReset, + deletePermissionReset } = this.props; createPermissionReset(namespace, repoName); + modifyPermissionReset(namespace, repoName); + deletePermissionReset(namespace, repoName); fetchPermissions(namespace, repoName); } @@ -174,6 +182,12 @@ const mapDispatchToProps = dispatch => { }, createPermissionReset: (namespace: string, repoName: string) => { dispatch(createPermissionReset(namespace, repoName)); + }, + modifyPermissionReset: (namespace: string, repoName: string) => { + dispatch(modifyPermissionReset(namespace, repoName)); + }, + deletePermissionReset: (namespace: string, repoName: string) => { + dispatch(deletePermissionReset(namespace, repoName)); } }; }; diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 2b1c469f1e..a96788296f 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -5,10 +5,8 @@ import { translate } from "react-i18next"; import { modifyPermission, isModifyPermissionPending, - modifyPermissionReset, deletePermission, - isDeletePermissionPending, - deletePermissionReset + isDeletePermissionPending } from "../modules/permissions"; import { connect } from "react-redux"; import type { History } from "history"; @@ -26,8 +24,6 @@ type Props = { match: any, history: History, loading: boolean, - permissionReset: (string, string, string) => void, - deletePermissionReset: (string, string, string) => void, deletePermission: (Permission, string, string) => void, deleteLoading: boolean }; @@ -52,16 +48,6 @@ class SinglePermission extends React.Component { componentDidMount() { const { permission } = this.props; - this.props.permissionReset( - this.props.namespace, - this.props.repoName, - permission.name - ); - this.props.deletePermissionReset( - this.props.namespace, - this.props.repoName, - permission.name - ); if (permission) { this.setState({ permission: { @@ -175,26 +161,12 @@ const mapDispatchToProps = dispatch => { ) => { dispatch(modifyPermission(permission, namespace, repoName)); }, - permissionReset: ( - namespace: string, - repoName: string, - permissionname: string - ) => { - dispatch(modifyPermissionReset(namespace, repoName, permissionname)); - }, deletePermission: ( permission: Permission, namespace: string, repoName: string ) => { dispatch(deletePermission(permission, namespace, repoName)); - }, - deletePermissionReset: ( - namespace: string, - repoName: string, - permissionname: string - ) => { - dispatch(deletePermissionReset(namespace, repoName, permissionname)); } }; }; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 298a909aac..aa05f37fda 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -206,14 +206,14 @@ function newPermissions( } } -export function modifyPermissionReset( - namespace: string, - repoName: string, - permissionname: string -) { +export function modifyPermissionReset(namespace: string, repoName: string) { return { type: MODIFY_PERMISSION_RESET, - itemId: namespace + "/" + repoName + "/" + permissionname + payload: { + namespace, + repoName + }, + itemId: namespace + "/" + repoName }; } @@ -377,14 +377,14 @@ export function deletePermissionFailure( }; } -export function deletePermissionReset( - namespace: string, - repoName: string, - permissionname: string -) { +export function deletePermissionReset(namespace: string, repoName: string) { return { type: DELETE_PERMISSION_RESET, - itemId: namespace + "/" + repoName + "/" + permissionname + payload: { + namespace, + repoName + }, + itemId: namespace + "/" + repoName }; } function deletePermissionFromState( @@ -408,7 +408,6 @@ export default function reducer( if (!action.payload) { return state; } - switch (action.type) { case FETCH_PERMISSIONS_SUCCESS: return { From fe33e55befea42e4e25173650a7b5e4ad5f3124c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 16:00:15 +0200 Subject: [PATCH 49/70] move permissions to repo --- scm-ui/src/createReduxStore.js | 2 +- scm-ui/src/repos/containers/RepositoryRoot.js | 2 +- .../permissions/components/CreatePermissionForm.js | 2 +- .../{ => repos}/permissions/components/TypeSelector.js | 2 +- .../components/buttons/DeletePermissionButton.js | 2 +- .../components/buttons/DeletePermissionButton.test.js | 6 +++--- .../{ => repos}/permissions/containers/Permissions.js | 2 +- .../permissions/containers/SinglePermission.js | 2 +- .../src/{ => repos}/permissions/modules/permissions.js | 10 +++++----- .../permissions/modules/permissions.test.js | 0 .../src/{ => repos}/permissions/types/Permissions.js | 0 11 files changed, 15 insertions(+), 15 deletions(-) rename scm-ui/src/{ => repos}/permissions/components/CreatePermissionForm.js (96%) rename scm-ui/src/{ => repos}/permissions/components/TypeSelector.js (91%) rename scm-ui/src/{ => repos}/permissions/components/buttons/DeletePermissionButton.js (95%) rename scm-ui/src/{ => repos}/permissions/components/buttons/DeletePermissionButton.test.js (94%) rename scm-ui/src/{ => repos}/permissions/containers/Permissions.js (98%) rename scm-ui/src/{ => repos}/permissions/containers/SinglePermission.js (97%) rename scm-ui/src/{ => repos}/permissions/modules/permissions.js (97%) rename scm-ui/src/{ => repos}/permissions/modules/permissions.test.js (100%) rename scm-ui/src/{ => repos}/permissions/types/Permissions.js (100%) diff --git a/scm-ui/src/createReduxStore.js b/scm-ui/src/createReduxStore.js index 7c84b55013..9906091162 100644 --- a/scm-ui/src/createReduxStore.js +++ b/scm-ui/src/createReduxStore.js @@ -11,7 +11,7 @@ import groups from "./groups/modules/groups"; import auth from "./modules/auth"; import pending from "./modules/pending"; import failure from "./modules/failure"; -import permissions from "./permissions/modules/permissions"; +import permissions from "./repos/permissions/modules/permissions"; import config from "./config/modules/config"; import type { BrowserHistory } from "history/createBrowserHistory"; diff --git a/scm-ui/src/repos/containers/RepositoryRoot.js b/scm-ui/src/repos/containers/RepositoryRoot.js index 920bc26031..8119071ac1 100644 --- a/scm-ui/src/repos/containers/RepositoryRoot.js +++ b/scm-ui/src/repos/containers/RepositoryRoot.js @@ -22,7 +22,7 @@ import { translate } from "react-i18next"; import RepositoryDetails from "../components/RepositoryDetails"; import DeleteNavAction from "../components/DeleteNavAction"; import Edit from "../containers/Edit"; -import Permissions from "../../permissions/containers/Permissions"; +import Permissions from "../permissions/containers/Permissions"; import type { History } from "history"; import EditNavLink from "../components/EditNavLink"; diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js similarity index 96% rename from scm-ui/src/permissions/components/CreatePermissionForm.js rename to scm-ui/src/repos/permissions/components/CreatePermissionForm.js index be6a71aa12..143f5f1065 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js @@ -1,7 +1,7 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import { Checkbox, InputField, SubmitButton } from "@scm-manager/ui-components"; +import { Checkbox, InputField, SubmitButton } from "../../../../../scm-ui-components/packages/ui-components/src/index"; import TypeSelector from "./TypeSelector"; import type { PermissionCollection, diff --git a/scm-ui/src/permissions/components/TypeSelector.js b/scm-ui/src/repos/permissions/components/TypeSelector.js similarity index 91% rename from scm-ui/src/permissions/components/TypeSelector.js rename to scm-ui/src/repos/permissions/components/TypeSelector.js index 2422868941..80d522d3e6 100644 --- a/scm-ui/src/permissions/components/TypeSelector.js +++ b/scm-ui/src/repos/permissions/components/TypeSelector.js @@ -3,7 +3,7 @@ import React from "react"; import { translate } from "react-i18next"; import { Select -} from "@scm-manager/ui-components"; +} from "../../../../../scm-ui-components/packages/ui-components/src/index"; type Props = { t: string => string, diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js similarity index 95% rename from scm-ui/src/permissions/components/buttons/DeletePermissionButton.js rename to scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js index 9f81a5c88f..540b606d67 100644 --- a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.js +++ b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js @@ -5,7 +5,7 @@ import type { Permission } from "../../types/Permissions"; import { confirmAlert, DeleteButton -} from "@scm-manager/ui-components"; +} from "../../../../../../scm-ui-components/packages/ui-components/src/index"; type Props = { permission: Permission, diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js similarity index 94% rename from scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js rename to scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js index cf6bc2d9a0..450dc352fc 100644 --- a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js +++ b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js @@ -1,7 +1,7 @@ import React from "react"; import { mount, shallow } from "enzyme"; -import "../../../tests/enzyme"; -import "../../../tests/i18n"; +import "../../../../tests/enzyme"; +import "../../../../tests/i18n"; import DeletePermissionButton from "./DeletePermissionButton"; import { confirmAlert } from "@scm-manager/ui-components"; @@ -10,7 +10,7 @@ jest.mock("@scm-manager/ui-components", () => ({ NavAction: require.requireActual("@scm-manager/ui-components").NavAction })); -xdescribe("DeletePermissionButton", () => { +describe("DeletePermissionButton", () => { it("should render nothing, if the delete link is missing", () => { const permission = { _links: {} diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/repos/permissions/containers/Permissions.js similarity index 98% rename from scm-ui/src/permissions/containers/Permissions.js rename to scm-ui/src/repos/permissions/containers/Permissions.js index 93409a47ad..6062f60f10 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/repos/permissions/containers/Permissions.js @@ -17,7 +17,7 @@ import { modifyPermissionReset, deletePermissionReset } from "../modules/permissions"; -import { Loading, ErrorPage } from "@scm-manager/ui-components"; +import { Loading, ErrorPage } from "../../../../../scm-ui-components/packages/ui-components/src/index"; import type { Permission, PermissionCollection, diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/repos/permissions/containers/SinglePermission.js similarity index 97% rename from scm-ui/src/permissions/containers/SinglePermission.js rename to scm-ui/src/repos/permissions/containers/SinglePermission.js index a96788296f..c4ab746a71 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/repos/permissions/containers/SinglePermission.js @@ -10,7 +10,7 @@ import { } from "../modules/permissions"; import { connect } from "react-redux"; import type { History } from "history"; -import { Checkbox } from "@scm-manager/ui-components"; +import { Checkbox } from "../../../../../scm-ui-components/packages/ui-components/src/index"; import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; import TypeSelector from "../components/TypeSelector"; diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/repos/permissions/modules/permissions.js similarity index 97% rename from scm-ui/src/permissions/modules/permissions.js rename to scm-ui/src/repos/permissions/modules/permissions.js index aa05f37fda..089a1afb34 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/repos/permissions/modules/permissions.js @@ -1,15 +1,15 @@ // @flow -import { apiClient } from "@scm-manager/ui-components"; -import * as types from "../../modules/types"; -import type { Action } from "@scm-manager/ui-types"; +import { apiClient } from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import * as types from "../../../modules/types"; +import type { Action } from "../../../../../scm-ui-components/packages/ui-types/src/index"; import type { PermissionCollection, Permission, PermissionEntry } from "../types/Permissions"; -import { isPending } from "../../modules/pending"; -import { getFailure } from "../../modules/failure"; +import { isPending } from "../../../modules/pending"; +import { getFailure } from "../../../modules/failure"; import { Dispatch } from "redux"; export const FETCH_PERMISSIONS = "scm/permissions/FETCH_PERMISSIONS"; diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/repos/permissions/modules/permissions.test.js similarity index 100% rename from scm-ui/src/permissions/modules/permissions.test.js rename to scm-ui/src/repos/permissions/modules/permissions.test.js diff --git a/scm-ui/src/permissions/types/Permissions.js b/scm-ui/src/repos/permissions/types/Permissions.js similarity index 100% rename from scm-ui/src/permissions/types/Permissions.js rename to scm-ui/src/repos/permissions/types/Permissions.js From 09924a03cb9a7e492f243326a2df7f2b36d0e4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 16:17:11 +0200 Subject: [PATCH 50/70] enable failing tests again and use form instead of table for create permission --- .../components/PermissionsNavLink.test.js | 6 +- .../components/CreatePermissionForm.js | 69 ++++++++----------- .../buttons/DeletePermissionButton.js | 5 +- 3 files changed, 35 insertions(+), 45 deletions(-) diff --git a/scm-ui/src/repos/components/PermissionsNavLink.test.js b/scm-ui/src/repos/components/PermissionsNavLink.test.js index b8b44f346a..c1c7d2e621 100644 --- a/scm-ui/src/repos/components/PermissionsNavLink.test.js +++ b/scm-ui/src/repos/components/PermissionsNavLink.test.js @@ -4,7 +4,11 @@ import "../../tests/enzyme"; import "../../tests/i18n"; import PermissionsNavLink from "./PermissionsNavLink"; -xdescribe("PermissionsNavLink", () => { +jest.mock("@scm-manager/ui-components", () => ({ + NavAction: require.requireActual("@scm-manager/ui-components").NavAction +})); + +describe("PermissionsNavLink", () => { it("should render nothing, if the modify link is missing", () => { const repository = { _links: {} diff --git a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js index 143f5f1065..417f3480fc 100644 --- a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js @@ -1,7 +1,11 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import { Checkbox, InputField, SubmitButton } from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import { + Checkbox, + InputField, + SubmitButton +} from "../../../../../scm-ui-components/packages/ui-components/src/index"; import TypeSelector from "./TypeSelector"; import type { PermissionCollection, @@ -41,45 +45,30 @@ class CreatePermissionForm extends React.Component {

{t("add-permission.add-permission-heading")}

-
{ ); }); - /*it("should add permission", () => { //changing state had to be removed because of errors + it("should add permission", () => { + //changing state had to be removed because of errors const oldState = { "hitchhiker/puzzle42": { entries: [hitchhiker_puzzle42Permission_user_eins] @@ -496,7 +497,7 @@ describe("permissions reducer", () => { expect(newState["hitchhiker/puzzle42"]).toEqual( expectedState["hitchhiker/puzzle42"] ); - });*/ + }); }); describe("permissions selectors", () => { From 7c0e8ef90bf5fd59b3b9b0c554eba70db8658329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Fri, 7 Sep 2018 11:34:14 +0200 Subject: [PATCH 44/70] add function for getting an error if one permission has delete error state --- .../src/permissions/containers/Permissions.js | 5 ++-- scm-ui/src/permissions/modules/permissions.js | 29 +++++++++++++++++++ .../permissions/modules/permissions.test.js | 23 ++++++++++++++- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 68c7ae34b4..d98cb77fe0 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -11,7 +11,8 @@ import { createPermission, isCreatePermissionPending, getCreatePermissionFailure, - createPermissionReset + createPermissionReset, + getDeletePermissionsFailure } from "../modules/permissions"; import Loading from "../../components/Loading"; import ErrorPage from "../../components/ErrorPage"; @@ -143,7 +144,7 @@ const mapStateToProps = (state, ownProps) => { const repoName = ownProps.repoName; const error = getFetchPermissionsFailure(state, namespace, repoName) || - getCreatePermissionFailure(state, namespace, repoName); + getCreatePermissionFailure(state, namespace, repoName); //|| getDeletePermissionsFailure(state, namespace, repoName); const loading = isFetchPermissionsPending(state, namespace, repoName); const permissions = getPermissionsOfRepo(state, namespace, repoName); const loadingCreatePermission = isCreatePermissionPending( diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 1460228bff..47cb2a8746 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -558,3 +558,32 @@ export function getDeletePermissionFailure( namespace + "/" + repoName + "/" + permissionname ); } + +export function getDeletePermissionsFailure( + state: Object, + namespace: string, + repoName: string +) { + const permissions = + state.permissions && state.permissions[namespace + "/" + repoName] + ? state.permissions[namespace + "/" + repoName].entries + : null; + if (permissions == null) return undefined; + for (let i = 0; i < permissions.length; i++) { + if ( + getDeletePermissionFailure( + state, + namespace, + repoName, + permissions[i].name + ) + ) { + return getFailure( + state, + DELETE_PERMISSION, + namespace + "/" + repoName + "/" + permissions[i].name + ); + } + } + return null; +} diff --git a/scm-ui/src/permissions/modules/permissions.test.js b/scm-ui/src/permissions/modules/permissions.test.js index 0d12b58346..9247b0c4be 100644 --- a/scm-ui/src/permissions/modules/permissions.test.js +++ b/scm-ui/src/permissions/modules/permissions.test.js @@ -36,7 +36,8 @@ import reducer, { CREATE_PERMISSION, createPermissionSuccess, getCreatePermissionFailure, - isCreatePermissionPending + isCreatePermissionPending, + getDeletePermissionsFailure } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; @@ -644,6 +645,26 @@ describe("permissions selectors", () => { ).toBe(undefined); }); + it("should return error when one of the delete permissions did fail", () => { + const state = { + permissions: { + "hitchhiker/puzzle42": { entries: hitchhiker_puzzle42Permissions } + }, + failure: { + [DELETE_PERMISSION + "/hitchhiker/puzzle42/user_eins"]: error + } + }; + expect( + getDeletePermissionsFailure(state, "hitchhiker", "puzzle42") + ).toEqual(error); + }); + + it("should return undefined when no delete permissions did not fail", () => { + expect(getDeletePermissionsFailure({}, "hitchhiker", "puzzle42")).toBe( + undefined + ); + }); + it("should return true, when create permission is pending", () => { const state = { pending: { From 75ba5f33b1abcb0f9f3494c8fac220ca33f63159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 10:22:22 +0200 Subject: [PATCH 45/70] try to correct add permission --- scm-ui/src/permissions/containers/Permissions.js | 10 +++++----- scm-ui/src/permissions/modules/permissions.js | 15 ++++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index df1829e150..a359d2bd71 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -14,10 +14,7 @@ import { createPermissionReset, getDeletePermissionsFailure } from "../modules/permissions"; -import { - Loading, - ErrorPage -} from "@scm-manager/ui-components"; +import { Loading, ErrorPage } from "@scm-manager/ui-components"; import type { Permission, PermissionCollection, @@ -66,11 +63,14 @@ class Permissions extends React.Component { } permissionCreated = () => { - const { namespace, repoName } = this.props; + const { namespace, repoName, history } = this.props; + console.log("fetch permissions!"); + //history.push(`/repo/${namespace}/${repoName}/permissions`); this.props.fetchPermissions(namespace, repoName); }; createPermission = (permission: Permission) => { + console.log("create Permission"); this.props.createPermission( permission, this.props.namespace, diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index 45365c7bea..b09197380b 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -2,9 +2,7 @@ import { apiClient } from "@scm-manager/ui-components"; import * as types from "../../modules/types"; -import type { - Action -} from "@scm-manager/ui-types"; +import type { Action } from "@scm-manager/ui-types"; import type { PermissionCollection, Permission, @@ -234,8 +232,15 @@ export function createPermission( permission, CONTENT_TYPE ) - .then(() => { - dispatch(createPermissionSuccess(permission, namespace, repoName)); + .then(response => { + const location = response.headers.Location; + return apiClient.get(location); + }) + .then(response => response.json()) + .then(createdPermission => { + dispatch( + createPermissionSuccess(createdPermission, namespace, repoName) + ); if (callback) { callback(); } From 00694da93539f01c168f87840ada19853c1ce0ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 11:17:11 +0200 Subject: [PATCH 46/70] solved problem with not returning header by using self build url --- .../components/CreatePermissionForm.js | 15 ++++++++++----- scm-ui/src/permissions/containers/Permissions.js | 15 +++------------ scm-ui/src/permissions/modules/permissions.js | 7 ++++++- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/scm-ui/src/permissions/components/CreatePermissionForm.js b/scm-ui/src/permissions/components/CreatePermissionForm.js index 9c3397e2aa..be6a71aa12 100644 --- a/scm-ui/src/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/permissions/components/CreatePermissionForm.js @@ -1,11 +1,7 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import { - Checkbox, - InputField, - SubmitButton -} from "@scm-manager/ui-components"; +import { Checkbox, InputField, SubmitButton } from "@scm-manager/ui-components"; import TypeSelector from "./TypeSelector"; import type { PermissionCollection, @@ -113,6 +109,15 @@ class CreatePermissionForm extends React.Component { type: this.state.type, groupPermission: this.state.groupPermission }); + this.removeState(); + }; + + removeState = () => { + this.setState({ + name: "", + type: "READ", + groupPermission: false + }); }; handleTypeChange = (type: string) => { diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index a359d2bd71..66d4890e1b 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -39,7 +39,7 @@ type Props = { permission: PermissionEntry, namespace: string, repoName: string, - callback: () => void + callback?: () => void ) => void, createPermissionReset: (string, string) => void, @@ -62,20 +62,11 @@ class Permissions extends React.Component { fetchPermissions(namespace, repoName); } - permissionCreated = () => { - const { namespace, repoName, history } = this.props; - console.log("fetch permissions!"); - //history.push(`/repo/${namespace}/${repoName}/permissions`); - this.props.fetchPermissions(namespace, repoName); - }; - createPermission = (permission: Permission) => { - console.log("create Permission"); this.props.createPermission( permission, this.props.namespace, - this.props.repoName, - this.permissionCreated + this.props.repoName ); }; @@ -175,7 +166,7 @@ const mapDispatchToProps = dispatch => { permission: PermissionEntry, namespace: string, repoName: string, - callback: () => void + callback?: () => void ) => { dispatch(createPermission(permission, namespace, repoName, callback)); }, diff --git a/scm-ui/src/permissions/modules/permissions.js b/scm-ui/src/permissions/modules/permissions.js index b09197380b..c279660160 100644 --- a/scm-ui/src/permissions/modules/permissions.js +++ b/scm-ui/src/permissions/modules/permissions.js @@ -233,8 +233,13 @@ export function createPermission( CONTENT_TYPE ) .then(response => { + console.log(response); const location = response.headers.Location; - return apiClient.get(location); + return apiClient.get( + `${REPOS_URL}/${namespace}/${repoName}/${PERMISSIONS_URL}/${ + permission.name + }` + ); }) .then(response => response.json()) .then(createdPermission => { From e6253c47e1df76ccf264f369e0a3db3b992ba600 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 14:24:58 +0200 Subject: [PATCH 47/70] show failure for modify permission or delete permission --- .../buttons/DeletePermissionButton.test.js | 9 ++-- .../src/permissions/containers/Permissions.js | 6 ++- .../containers/SinglePermission.js | 53 ++++++------------- scm-ui/src/permissions/modules/permissions.js | 38 ++++++++++--- .../permissions/modules/permissions.test.js | 51 ++++++++++++++---- .../components/PermissionsNavLink.test.js | 5 +- 6 files changed, 98 insertions(+), 64 deletions(-) diff --git a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js index d86f15604d..cf6bc2d9a0 100644 --- a/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js +++ b/scm-ui/src/permissions/components/buttons/DeletePermissionButton.test.js @@ -4,10 +4,13 @@ import "../../../tests/enzyme"; import "../../../tests/i18n"; import DeletePermissionButton from "./DeletePermissionButton"; -import { confirmAlert } from "../../../components/modals/ConfirmAlert"; -jest.mock("../../../components/modals/ConfirmAlert"); +import { confirmAlert } from "@scm-manager/ui-components"; +jest.mock("@scm-manager/ui-components", () => ({ + confirmAlert: jest.fn(), + NavAction: require.requireActual("@scm-manager/ui-components").NavAction +})); -describe("DeletePermissionButton", () => { +xdescribe("DeletePermissionButton", () => { it("should render nothing, if the delete link is missing", () => { const permission = { _links: {} diff --git a/scm-ui/src/permissions/containers/Permissions.js b/scm-ui/src/permissions/containers/Permissions.js index 66d4890e1b..53ccc4b84a 100644 --- a/scm-ui/src/permissions/containers/Permissions.js +++ b/scm-ui/src/permissions/containers/Permissions.js @@ -12,7 +12,7 @@ import { isCreatePermissionPending, getCreatePermissionFailure, createPermissionReset, - getDeletePermissionsFailure + getDeletePermissionsFailure, getModifyPermissionsFailure } from "../modules/permissions"; import { Loading, ErrorPage } from "@scm-manager/ui-components"; import type { @@ -137,7 +137,9 @@ const mapStateToProps = (state, ownProps) => { const repoName = ownProps.repoName; const error = getFetchPermissionsFailure(state, namespace, repoName) || - getCreatePermissionFailure(state, namespace, repoName); //|| getDeletePermissionsFailure(state, namespace, repoName); + getCreatePermissionFailure(state, namespace, repoName) || + getDeletePermissionsFailure(state, namespace, repoName) || + getModifyPermissionsFailure(state, namespace, repoName); const loading = isFetchPermissionsPending(state, namespace, repoName); const permissions = getPermissionsOfRepo(state, namespace, repoName); const loadingCreatePermission = isCreatePermissionPending( diff --git a/scm-ui/src/permissions/containers/SinglePermission.js b/scm-ui/src/permissions/containers/SinglePermission.js index 36a7d2c020..2b1c469f1e 100644 --- a/scm-ui/src/permissions/containers/SinglePermission.js +++ b/scm-ui/src/permissions/containers/SinglePermission.js @@ -5,19 +5,14 @@ import { translate } from "react-i18next"; import { modifyPermission, isModifyPermissionPending, - getModifyPermissionFailure, modifyPermissionReset, deletePermission, - getDeletePermissionFailure, isDeletePermissionPending, deletePermissionReset } from "../modules/permissions"; import { connect } from "react-redux"; import type { History } from "history"; -import { - ErrorNotification, - Checkbox -} from "@scm-manager/ui-components"; +import { Checkbox } from "@scm-manager/ui-components"; import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; import TypeSelector from "../components/TypeSelector"; @@ -31,7 +26,6 @@ type Props = { match: any, history: History, loading: boolean, - error: Error, permissionReset: (string, string, string) => void, deletePermissionReset: (string, string, string) => void, deletePermission: (Permission, string, string) => void, @@ -90,22 +84,19 @@ class SinglePermission extends React.Component { render() { const { permission } = this.state; - const { loading, error, namespace, repoName } = this.props; - const typeSelector = this.props.permission._links && this.props.permission._links.update ? ( - - - {permission.type} + + {permission.type}
- - - - - - - - - - - - - - -
{t("permission.name")} - -
{t("permission.group-permission")} - -
{t("permission.type")} - -
- +
+ + + + +
); } diff --git a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js index 540b606d67..25407e4f54 100644 --- a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js +++ b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js @@ -2,10 +2,7 @@ import React from "react"; import { translate } from "react-i18next"; import type { Permission } from "../../types/Permissions"; -import { - confirmAlert, - DeleteButton -} from "../../../../../../scm-ui-components/packages/ui-components/src/index"; +import { confirmAlert, DeleteButton } from "@scm-manager/ui-components"; type Props = { permission: Permission, From 6e0fdaecc6642166ee87161845dae8ed3b1f4105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Tue, 11 Sep 2018 16:45:54 +0200 Subject: [PATCH 51/70] change urls in tests --- scm-ui/src/repos/permissions/modules/permissions.test.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scm-ui/src/repos/permissions/modules/permissions.test.js b/scm-ui/src/repos/permissions/modules/permissions.test.js index 9c8416746c..937c23a5ce 100644 --- a/scm-ui/src/repos/permissions/modules/permissions.test.js +++ b/scm-ui/src/repos/permissions/modules/permissions.test.js @@ -42,9 +42,6 @@ import reducer, { } from "./permissions"; import type { Permission, PermissionCollection } from "../types/Permissions"; -const namespace = "hitchhiker"; -const repoName = "puzzle42"; - const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", type: "READ", @@ -237,7 +234,7 @@ describe("permission fetch", () => { fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { status: 204, headers: { - location: "/hitchhiker/puzzle42/permissions/user_eins" + location: REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins" } }); @@ -289,7 +286,7 @@ describe("permission fetch", () => { fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { status: 204, headers: { - location: "/hitchhiker/puzzle42/permissions/user_eins" + location: REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins" } }); From 8811f9abd783b73288ef9d871a298b6dd1df124b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 08:28:50 +0200 Subject: [PATCH 52/70] correct permissionsNavLink tests --- .../repos/components/PermissionsNavLink.test.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/scm-ui/src/repos/components/PermissionsNavLink.test.js b/scm-ui/src/repos/components/PermissionsNavLink.test.js index c1c7d2e621..4aa67f989c 100644 --- a/scm-ui/src/repos/components/PermissionsNavLink.test.js +++ b/scm-ui/src/repos/components/PermissionsNavLink.test.js @@ -2,20 +2,21 @@ import React from "react"; import { mount, shallow } from "enzyme"; import "../../tests/enzyme"; import "../../tests/i18n"; +import ReactRouterEnzymeContext from "react-router-enzyme-context"; import PermissionsNavLink from "./PermissionsNavLink"; - -jest.mock("@scm-manager/ui-components", () => ({ - NavAction: require.requireActual("@scm-manager/ui-components").NavAction -})); +import EditNavLink from "./EditNavLink"; describe("PermissionsNavLink", () => { + const options = new ReactRouterEnzymeContext(); + it("should render nothing, if the modify link is missing", () => { const repository = { _links: {} }; const navLink = shallow( - + , + options.get() ); expect(navLink.text()).toBe(""); }); @@ -30,8 +31,9 @@ describe("PermissionsNavLink", () => { }; const navLink = mount( - + , + options.get() ); - expect(navLink.text()).toBe("foo"); + expect(navLink.text()).toBe("repository-root.permissions"); }); }); From 9c04a3d78dd6ac6180ebca97eeedfa71d493bfb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 08:31:56 +0200 Subject: [PATCH 53/70] correct DeletePermissionButton tests --- .../components/buttons/DeletePermissionButton.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js index 450dc352fc..0e722e78e8 100644 --- a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js +++ b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.test.js @@ -7,7 +7,7 @@ import DeletePermissionButton from "./DeletePermissionButton"; import { confirmAlert } from "@scm-manager/ui-components"; jest.mock("@scm-manager/ui-components", () => ({ confirmAlert: jest.fn(), - NavAction: require.requireActual("@scm-manager/ui-components").NavAction + DeleteButton: require.requireActual("@scm-manager/ui-components").DeleteButton })); describe("DeletePermissionButton", () => { From 6b2e3ccf2a4a0c3728338ebdca8e33e4d3dd6f6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 08:46:41 +0200 Subject: [PATCH 54/70] correct permissions tests --- scm-ui/src/repos/permissions/modules/permissions.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm-ui/src/repos/permissions/modules/permissions.test.js b/scm-ui/src/repos/permissions/modules/permissions.test.js index 937c23a5ce..4eb26f5efa 100644 --- a/scm-ui/src/repos/permissions/modules/permissions.test.js +++ b/scm-ui/src/repos/permissions/modules/permissions.test.js @@ -234,7 +234,7 @@ describe("permission fetch", () => { fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { status: 204, headers: { - location: REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins" + location: "repositories/hitchhiker/puzzle42/permissions/user_eins" } }); @@ -286,7 +286,7 @@ describe("permission fetch", () => { fetchMock.postOnce(REPOS_URL + "/hitchhiker/puzzle42/permissions", { status: 204, headers: { - location: REPOS_URL + "/hitchhiker/puzzle42/permissions/user_eins" + location: "repositories/hitchhiker/puzzle42/permissions/user_eins" } }); From 29b205292a7c84d32c95f1a37c4ae62ada08a9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 09:41:45 +0200 Subject: [PATCH 55/70] use correct imports and put permission types to ui-components --- .../packages/ui-types/src/RepositoryPermissions.js | 4 ++-- scm-ui-components/packages/ui-types/src/index.js | 2 ++ .../repos/permissions/components/CreatePermissionForm.js | 8 ++------ scm-ui/src/repos/permissions/components/TypeSelector.js | 2 +- .../components/buttons/DeletePermissionButton.js | 2 +- scm-ui/src/repos/permissions/containers/Permissions.js | 4 ++-- .../src/repos/permissions/containers/SinglePermission.js | 4 ++-- scm-ui/src/repos/permissions/modules/permissions.js | 6 +++--- scm-ui/src/repos/permissions/modules/permissions.test.js | 2 +- 9 files changed, 16 insertions(+), 18 deletions(-) rename scm-ui/src/repos/permissions/types/Permissions.js => scm-ui-components/packages/ui-types/src/RepositoryPermissions.js (79%) diff --git a/scm-ui/src/repos/permissions/types/Permissions.js b/scm-ui-components/packages/ui-types/src/RepositoryPermissions.js similarity index 79% rename from scm-ui/src/repos/permissions/types/Permissions.js rename to scm-ui-components/packages/ui-types/src/RepositoryPermissions.js index 00b3d13748..ceb5fe135e 100644 --- a/scm-ui/src/repos/permissions/types/Permissions.js +++ b/scm-ui-components/packages/ui-types/src/RepositoryPermissions.js @@ -1,11 +1,11 @@ //@flow -import type { Links } from "../../types/hal"; +import type { Links } from "./hal"; export type Permission = { name: string, type: string, groupPermission: boolean, - _links: Links + _links?: Links }; export type PermissionEntry = { diff --git a/scm-ui-components/packages/ui-types/src/index.js b/scm-ui-components/packages/ui-types/src/index.js index 109fb9bb6a..4b9e6c3810 100644 --- a/scm-ui-components/packages/ui-types/src/index.js +++ b/scm-ui-components/packages/ui-types/src/index.js @@ -10,3 +10,5 @@ export type { Repository, RepositoryCollection, RepositoryGroup } from "./Reposi export type { RepositoryType, RepositoryTypeCollection } from "./RepositoryTypes"; export type { Config } from "./Config"; + +export type { Permission, PermissionEntry, PermissionCollection } from "./RepositoryPermissions"; diff --git a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js index 417f3480fc..2261c89d3b 100644 --- a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js @@ -1,16 +1,12 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import { - Checkbox, - InputField, - SubmitButton -} from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import { Checkbox, InputField, SubmitButton } from "@scm-manager/ui-components"; import TypeSelector from "./TypeSelector"; import type { PermissionCollection, PermissionEntry -} from "../types/Permissions"; +} from "@scm-manager/ui-types"; type Props = { t: string => string, diff --git a/scm-ui/src/repos/permissions/components/TypeSelector.js b/scm-ui/src/repos/permissions/components/TypeSelector.js index 80d522d3e6..2422868941 100644 --- a/scm-ui/src/repos/permissions/components/TypeSelector.js +++ b/scm-ui/src/repos/permissions/components/TypeSelector.js @@ -3,7 +3,7 @@ import React from "react"; import { translate } from "react-i18next"; import { Select -} from "../../../../../scm-ui-components/packages/ui-components/src/index"; +} from "@scm-manager/ui-components"; type Props = { t: string => string, diff --git a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js index 25407e4f54..05831e9a07 100644 --- a/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js +++ b/scm-ui/src/repos/permissions/components/buttons/DeletePermissionButton.js @@ -1,7 +1,7 @@ // @flow import React from "react"; import { translate } from "react-i18next"; -import type { Permission } from "../../types/Permissions"; +import type { Permission } from "@scm-manager/ui-types"; import { confirmAlert, DeleteButton } from "@scm-manager/ui-components"; type Props = { diff --git a/scm-ui/src/repos/permissions/containers/Permissions.js b/scm-ui/src/repos/permissions/containers/Permissions.js index 6062f60f10..97d65d91fc 100644 --- a/scm-ui/src/repos/permissions/containers/Permissions.js +++ b/scm-ui/src/repos/permissions/containers/Permissions.js @@ -17,12 +17,12 @@ import { modifyPermissionReset, deletePermissionReset } from "../modules/permissions"; -import { Loading, ErrorPage } from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import { Loading, ErrorPage } from "@scm-manager/ui-components"; import type { Permission, PermissionCollection, PermissionEntry -} from "../types/Permissions"; +} from "@scm-manager/ui-types"; import SinglePermission from "./SinglePermission"; import CreatePermissionForm from "../components/CreatePermissionForm"; import type { History } from "history"; diff --git a/scm-ui/src/repos/permissions/containers/SinglePermission.js b/scm-ui/src/repos/permissions/containers/SinglePermission.js index c4ab746a71..2e3294b3d9 100644 --- a/scm-ui/src/repos/permissions/containers/SinglePermission.js +++ b/scm-ui/src/repos/permissions/containers/SinglePermission.js @@ -1,6 +1,6 @@ // @flow import React from "react"; -import type { Permission } from "../types/Permissions"; +import type { Permission } from "@scm-manager/ui-types"; import { translate } from "react-i18next"; import { modifyPermission, @@ -10,7 +10,7 @@ import { } from "../modules/permissions"; import { connect } from "react-redux"; import type { History } from "history"; -import { Checkbox } from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import { Checkbox } from "@scm-manager/ui-components"; import DeletePermissionButton from "../components/buttons/DeletePermissionButton"; import TypeSelector from "../components/TypeSelector"; diff --git a/scm-ui/src/repos/permissions/modules/permissions.js b/scm-ui/src/repos/permissions/modules/permissions.js index 089a1afb34..fc0e10e03a 100644 --- a/scm-ui/src/repos/permissions/modules/permissions.js +++ b/scm-ui/src/repos/permissions/modules/permissions.js @@ -1,13 +1,13 @@ // @flow -import { apiClient } from "../../../../../scm-ui-components/packages/ui-components/src/index"; +import { apiClient } from "@scm-manager/ui-components"; import * as types from "../../../modules/types"; -import type { Action } from "../../../../../scm-ui-components/packages/ui-types/src/index"; +import type { Action } from "@scm-manager/ui-components"; import type { PermissionCollection, Permission, PermissionEntry -} from "../types/Permissions"; +} from "@scm-manager/ui-types"; import { isPending } from "../../../modules/pending"; import { getFailure } from "../../../modules/failure"; import { Dispatch } from "redux"; diff --git a/scm-ui/src/repos/permissions/modules/permissions.test.js b/scm-ui/src/repos/permissions/modules/permissions.test.js index 4eb26f5efa..f96c313a52 100644 --- a/scm-ui/src/repos/permissions/modules/permissions.test.js +++ b/scm-ui/src/repos/permissions/modules/permissions.test.js @@ -40,7 +40,7 @@ import reducer, { isCreatePermissionPending, getDeletePermissionsFailure } from "./permissions"; -import type { Permission, PermissionCollection } from "../types/Permissions"; +import type { Permission, PermissionCollection } from "@scm-manager/ui-types"; const hitchhiker_puzzle42Permission_user_eins: Permission = { name: "user_eins", From 5a18f091fc6646360ecb7cd753c0b007959046c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 09:59:15 +0200 Subject: [PATCH 56/70] prevent reloading after submit form --- .../src/repos/permissions/components/CreatePermissionForm.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js index 2261c89d3b..2697673a61 100644 --- a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js @@ -88,13 +88,14 @@ class CreatePermissionForm extends React.Component { return false; }; - submit = () => { + submit = e => { this.props.createPermission({ name: this.state.name, type: this.state.type, groupPermission: this.state.groupPermission }); this.removeState(); + e.preventDefault(); }; removeState = () => { From 06e55d6d4583e95fb72275a3616d5ccaafda6857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maren=20S=C3=BCwer?= Date: Thu, 13 Sep 2018 10:02:15 +0200 Subject: [PATCH 57/70] remove READ tag in createPermissionForm --- .../src/repos/permissions/components/CreatePermissionForm.js | 4 ++-- scm-ui/src/repos/permissions/components/TypeSelector.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js index 2697673a61..88455b9bfa 100644 --- a/scm-ui/src/repos/permissions/components/CreatePermissionForm.js +++ b/scm-ui/src/repos/permissions/components/CreatePermissionForm.js @@ -27,7 +27,7 @@ class CreatePermissionForm extends React.Component { this.state = { name: "", - type: "READ", + type: "", groupPermission: false }; } @@ -101,7 +101,7 @@ class CreatePermissionForm extends React.Component { removeState = () => { this.setState({ name: "", - type: "READ", + type: "", groupPermission: false }); }; diff --git a/scm-ui/src/repos/permissions/components/TypeSelector.js b/scm-ui/src/repos/permissions/components/TypeSelector.js index 2422868941..9f94c11d54 100644 --- a/scm-ui/src/repos/permissions/components/TypeSelector.js +++ b/scm-ui/src/repos/permissions/components/TypeSelector.js @@ -20,7 +20,7 @@ class TypeSelector extends React.Component { return (