From 8e73b6e0cccd8d23d5358d64aae30fd900766461 Mon Sep 17 00:00:00 2001 From: Lucas Azzola Date: Fri, 5 Jan 2018 19:00:07 +1100 Subject: [PATCH] feat: add monorepo support (#16) * feat: add monorepo support to API * feat: add UI for monorepos * feat: add react-select * chore: remove package-lock.json * chore: add package-lock.json to .gitignore * chore: fix mege conflicts --- .eslintrc.yml | 1 + .gitignore | 1 + index.js | 5 +- package.json | 9 +- routes/dependencies/index.js | 13 ++- src/packageUtils.js | 20 +++- src/serve.js | 2 +- ui/components/Dependencies.jsx | 26 +++-- ui/components/NpmUi.jsx | 4 +- ui/components/Packages.jsx | 55 +++++++++ ui/components/Scripts.jsx | 19 ++-- ui/components/styled.js | 4 - ui/ducks/dependencies.js | 65 +++++++---- ui/index.css | 1 + yarn.lock | 197 +++++++++++++++++++++++++++++---- 15 files changed, 345 insertions(+), 77 deletions(-) create mode 100644 ui/components/Packages.jsx diff --git a/.eslintrc.yml b/.eslintrc.yml index d6da05a..801a875 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -15,3 +15,4 @@ env: browser: true node: true jest: true + es6: true diff --git a/.gitignore b/.gitignore index f79d21c..3710291 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules *.log .cache dist +package-lock.json diff --git a/index.js b/index.js index 30b9798..475f8a3 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,6 @@ const cors = require('micro-cors')(); - -let serveStatic = require('./src/serve')('./dist'); -let match = require('fs-router')(__dirname + '/routes'); +const serveStatic = require('./src/serve')(__dirname + '/dist'); +const match = require('fs-router')(__dirname + '/routes'); module.exports = cors(async function(req, res) { let matched = match(req); diff --git a/package.json b/package.json index 9092349..3491d97 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "private": true, "scripts": { "start": "npm run build && ./bin/npm-ui.js", - "develop": "concurrently \"micro-dev --ignore=dist\\|ui\" \"parcel watch index.html --public-url ./\"", + "develop": "concurrently \"micro-dev --ignore=/dist\\|/ui\" \"parcel watch index.html --public-url ./\"", "build": "parcel build index.html --public-url ./", "test": "jest", "lint": "eslint . --ext=js,jsx --ignore-path=.gitignore", @@ -33,6 +33,7 @@ "ansi-html-stream": "^0.0.3", "execa": "^0.8.0", "fs-router": "^0.4.0", + "get-monorepo-packages": "^1.0.1", "get-port": "^3.2.0", "has-yarn": "^1.0.0", "merge-stream": "^1.0.1", @@ -48,7 +49,9 @@ "babel-plugin-transform-object-rest-spread": "^6.26.0", "babel-polyfill": "^6.26.0", "babel-preset-env": "^1.6.1", + "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", + "babel-preset-stage-2": "^6.24.1", "concurrently": "^3.5.1", "enzyme": "^3.3.0", "enzyme-adapter-react-16": "^1.1.1", @@ -68,10 +71,12 @@ "react-dom": "^16.2.0", "react-instantsearch": "^4.4.0", "react-redux": "^5.0.6", + "react-select": "^1.1.0", "react-tabs": "^2.1.1", "redux": "^3.7.2", "redux-saga": "^0.16.0", - "styled-components": "^2.4.0" + "styled-components": "^2.4.0", + "styled-css-grid": "^0.8.0" }, "jest": { "setupTestFrameworkScriptFile": "/test/testSetup.js" diff --git a/routes/dependencies/index.js b/routes/dependencies/index.js index 078e703..4e1fcdb 100644 --- a/routes/dependencies/index.js +++ b/routes/dependencies/index.js @@ -1,3 +1,12 @@ -const { getDependencies } = require('../../src/packageUtils.js'); +const { + getDependencies, + getMonoRepoDependencies, +} = require('../../src/packageUtils.js'); -module.exports = () => getDependencies(); +module.exports = async () => { + const [dependencies, monorepo] = await Promise.all([ + getDependencies(), + getMonoRepoDependencies(), + ]); + return { root: dependencies, monorepo }; +}; diff --git a/src/packageUtils.js b/src/packageUtils.js index 59fe846..d839507 100644 --- a/src/packageUtils.js +++ b/src/packageUtils.js @@ -1,9 +1,13 @@ const readPkgUp = require('read-pkg-up'); +const getPackages = require('get-monorepo-packages'); -async function extract(keys) { +async function readPkg() { const { pkg } = await readPkgUp(); + return pkg; +} - return keys.reduce((prev, p) => { +const extract = keys => pkg => + keys.reduce((prev, p) => { if (Array.isArray(p)) { prev[p[0]] = extract(pkg[p[0]], p[1]); } else if ( @@ -15,10 +19,14 @@ async function extract(keys) { } return prev; }, {}); -} module.exports = { - getScripts: () => extract(['scripts']), - getDependencies: () => extract(['dependencies', 'devDependencies']), - getComplete: () => readPkgUp().then(p => p.pkg), + getScripts: () => readPkg().then(extract(['scripts'])), + getDependencies: () => + readPkg().then(extract(['name', 'dependencies', 'devDependencies'])), + getComplete: () => readPkg(), + getMonoRepoDependencies: () => + getPackages(process.cwd()) + .map(pkg => pkg.package) + .map(extract(['name', 'dependencies', 'devDependencies'])), }; diff --git a/src/serve.js b/src/serve.js index 34bac34..92e2d5a 100644 --- a/src/serve.js +++ b/src/serve.js @@ -5,7 +5,7 @@ const mime = require('mime'); // https://github.com/zeit/serve/issues/267 -module.exports = (prefix = './') => async (req, res) => { +module.exports = (prefix = __dirname) => async (req, res) => { const parseUrl = url.parse(req.url); let file = `${prefix}${parseUrl.pathname}`; diff --git a/ui/components/Dependencies.jsx b/ui/components/Dependencies.jsx index 7f757db..16043d3 100644 --- a/ui/components/Dependencies.jsx +++ b/ui/components/Dependencies.jsx @@ -1,31 +1,39 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; +import { Grid, Cell } from 'styled-css-grid'; import { selectors } from '../ducks/dependencies'; import DependenciesList from './DependenciesList'; import Search from './Search'; -import { Grid } from './styled'; + const Dependencies = ({ dependencies, devDependencies }) => ( - -
+ +

Dependencies

DevDependencies

-
-
+ + -
+
); Dependencies.propTypes = { dependencies: PropTypes.array.isRequired, devDependencies: PropTypes.array.isRequired, + packageName: PropTypes.string.isRequired, }; -export default connect(state => ({ - dependencies: selectors.getDependencies(state.dependencies), - devDependencies: selectors.getDevDependencies(state.dependencies), +export default connect((state, ownProps) => ({ + dependencies: selectors.getDependencies( + state.dependencies, + ownProps.packageName, + ), + devDependencies: selectors.getDevDependencies( + state.dependencies, + ownProps.packageName, + ), }))(Dependencies); diff --git a/ui/components/NpmUi.jsx b/ui/components/NpmUi.jsx index 3862a49..96729ab 100644 --- a/ui/components/NpmUi.jsx +++ b/ui/components/NpmUi.jsx @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'; import Scripts from './Scripts'; -import Dependencies from './Dependencies'; +import Packages from './Packages'; class NpmUi extends Component { render() { @@ -16,7 +16,7 @@ class NpmUi extends Component { - + ); diff --git a/ui/components/Packages.jsx b/ui/components/Packages.jsx new file mode 100644 index 0000000..bb9b67f --- /dev/null +++ b/ui/components/Packages.jsx @@ -0,0 +1,55 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import Select from 'react-select'; +import { connect } from 'react-redux'; +import styled from 'styled-components'; +import { bindActionCreators } from 'redux'; + +import Dependencies from './Dependencies'; +import { actions, selectors } from '../ducks/dependencies'; + +const PackageSelect = styled(Select)` + width: 300px; +`; + +const Packages = ({ + className, + selectedPackageName, + packageNames, + onSelectPackage, +}) => ( +
+ onSelectPackage(selectedOption.value)} + options={packageNames.map(name => ({ + value: name, + label: name || '', + }))} + /> + +
+); + +Packages.propTypes = { + className: PropTypes.string, + packageNames: PropTypes.arrayOf(PropTypes.string).isRequired, + selectedPackageName: PropTypes.string.isRequired, + onSelectPackage: PropTypes.func.isRequired, +}; + +export default connect( + state => ({ + selectedPackageName: selectors.getSelectedPackageName(state.dependencies), + packageNames: selectors.getPackageNames(state.dependencies), + }), + dispatch => + bindActionCreators( + { + onSelectPackage: actions.setSelectedPackage, + }, + dispatch, + ), +)(Packages); diff --git a/ui/components/Scripts.jsx b/ui/components/Scripts.jsx index b870d01..4af1f5b 100644 --- a/ui/components/Scripts.jsx +++ b/ui/components/Scripts.jsx @@ -2,18 +2,23 @@ import React from 'react'; import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; +import { Grid, Cell } from 'styled-css-grid'; import { selectors, actions } from '../ducks/scripts'; import ScriptList from './ScriptList'; -import { Grid, Log, Wrapper } from './styled'; +import { Wrapper, Log } from './styled'; const Scripts = ({ scripts, log, onScriptClick }) => ( - - - -

Terminal output:

- -
+ + + + + + +

Terminal output:

+ +
+
); diff --git a/ui/components/styled.js b/ui/components/styled.js index cd991c7..c98acfc 100644 --- a/ui/components/styled.js +++ b/ui/components/styled.js @@ -1,8 +1,4 @@ import styled from 'styled-components'; -export const Grid = styled.div` - display: grid; - grid-template-columns: repeat(${props => props.col}, 1fr); -`; export const Wrapper = styled.section` overflow: auto; diff --git a/ui/ducks/dependencies.js b/ui/ducks/dependencies.js index f8f5def..ec79fe1 100644 --- a/ui/ducks/dependencies.js +++ b/ui/ducks/dependencies.js @@ -1,46 +1,73 @@ const initialState = { - packageDependencies: { - dependencies: {}, - devDependencies: {}, + selectedPackage: '', + root: { + dependencies: [], + devDependencies: [], + name: '', }, + monorepo: [], }; export const FETCH_DEPENDENCIES = 'FETCH_DEPENDENCIES'; export const SET_DEPENDENCIES = 'SET_DEPENDENCIES'; +export const SET_SELECTED_PACKAGE = 'SET_SELECTED_PACKAGE'; export default (state = initialState, { type, ...payload }) => { switch (type) { + case SET_SELECTED_PACKAGE: + return { + ...state, + selectedPackage: payload.name, + }; case SET_DEPENDENCIES: return { ...state, - packageDependencies: { - devDependencies: payload.devDependencies, - dependencies: payload.dependencies, + selectedPackage: payload.root.name, + root: { + name: payload.root.name, + dependencies: arrayify(payload.root.dependencies, 'version'), + devDependencies: arrayify(payload.root.devDependencies, 'version'), }, + monorepo: payload.monorepo.map(pkg => ({ + name: pkg.name, + dependencies: arrayify(pkg.dependencies, 'version'), + devDependencies: arrayify(pkg.devDependencies, 'version'), + })), }; default: return state; } }; +function arrayify(object = {}, key) { + return Object.keys(object).map(name => ({ + name, + [key]: object[name], + })); +} + export const actions = { fetchDependencies: () => ({ type: FETCH_DEPENDENCIES }), - setDependencies: ({ dependencies, devDependencies }) => ({ + setDependencies: ({ root, monorepo }) => ({ type: SET_DEPENDENCIES, - dependencies, - devDependencies, + root, + monorepo, }), + setSelectedPackage: name => ({ type: SET_SELECTED_PACKAGE, name }), }; export const selectors = { - getDependencies: ({ packageDependencies: { dependencies } }) => - Object.keys(dependencies).map(name => ({ - name, - version: dependencies[name], - })), - getDevDependencies: ({ packageDependencies: { devDependencies } }) => - Object.keys(devDependencies).map(name => ({ - name, - version: devDependencies[name], - })), + getSelectedPackageName: ({ selectedPackage }) => selectedPackage, + getPackageNames: ({ monorepo, root }) => [ + root.name, + ...monorepo.map(({ name }) => name), + ], + getDependencies: ({ monorepo, root }, packageName) => + root.name === packageName + ? root.dependencies + : monorepo.find(({ name }) => name === packageName).dependencies, + getDevDependencies: ({ monorepo, root }, packageName) => + root.name === packageName + ? root.devDependencies + : monorepo.find(({ name }) => name === packageName).devDependencies, }; diff --git a/ui/index.css b/ui/index.css index 66097ce..d01624a 100644 --- a/ui/index.css +++ b/ui/index.css @@ -1,4 +1,5 @@ @import 'react-tabs/style/react-tabs.css'; +@import 'react-select/dist/react-select.css'; body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, diff --git a/yarn.lock b/yarn.lock index e1df25b..be3497e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -450,6 +450,14 @@ babel-generator@^6.18.0, babel-generator@^6.25.0, babel-generator@^6.26.0: source-map "^0.5.6" trim-right "^1.0.1" +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" @@ -492,6 +500,15 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -594,6 +611,22 @@ babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" @@ -614,7 +647,15 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" -babel-plugin-transform-async-to-generator@^6.22.0: +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: @@ -622,6 +663,25 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" @@ -634,7 +694,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.23.0: +babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: @@ -644,7 +704,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-types "^6.26.0" lodash "^4.17.4" -babel-plugin-transform-es2015-classes@^6.23.0: +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: @@ -658,33 +718,33 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0: +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@^6.23.0: +babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: +babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-for-of@^6.23.0: +babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0: +babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: @@ -715,7 +775,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-template "^6.26.0" babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: +babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: @@ -723,7 +783,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.23.0: +babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: @@ -731,14 +791,14 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0: +babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.23.0: +babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: @@ -749,7 +809,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: +babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: @@ -762,7 +822,7 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: +babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: @@ -776,13 +836,13 @@ babel-plugin-transform-es2015-template-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: +babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: +babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: @@ -790,7 +850,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-exponentiation-operator@^6.22.0: +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: @@ -805,7 +865,7 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" -babel-plugin-transform-object-rest-spread@^6.26.0: +babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" dependencies: @@ -840,7 +900,7 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.22.0: +babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: @@ -896,6 +956,35 @@ babel-preset-env@^1.6.1: invariant "^2.2.2" semver "^5.3.0" +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" @@ -920,6 +1009,25 @@ babel-preset-react@^6.24.1: babel-plugin-transform-react-jsx-source "^6.22.0" babel-preset-flow "^6.23.0" +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -1400,7 +1508,7 @@ class-utils@^0.3.5: lazy-cache "^2.0.2" static-extend "^0.1.1" -classnames@^2.2.0, classnames@^2.2.5: +classnames@^2.2.0, classnames@^2.2.4, classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" @@ -1892,6 +2000,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.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" @@ -2598,6 +2713,13 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-monorepo-packages@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-monorepo-packages/-/get-monorepo-packages-1.0.1.tgz#05b707d2fd12f91e20cbaff7bfde3bc7e8e35d54" + dependencies: + globby "^7.1.1" + load-json-file "^4.0.0" + get-port@3.2.0, get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -2681,6 +2803,17 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2937,7 +3070,7 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -ignore@^3.3.3: +ignore@^3.3.3, ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -4977,7 +5110,7 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.6.0: +prop-types@^15.5.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: @@ -5110,6 +5243,12 @@ react-dom@^16.2.0: object-assign "^4.1.1" prop-types "^15.6.0" +react-input-autosize@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.1.2.tgz#a3dc11a5517c434db25229925541309de3f7a8f5" + dependencies: + prop-types "^15.5.8" + react-instantsearch@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/react-instantsearch/-/react-instantsearch-4.4.0.tgz#dd30dec6f71dd5aaaba68d4204e09aee47956196" @@ -5140,6 +5279,14 @@ react-redux@^5.0.6: loose-envify "^1.1.0" prop-types "^15.5.10" +react-select@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-1.1.0.tgz#626a2de839fdea2ade74dd1b143a9bde34be6c82" + dependencies: + classnames "^2.2.4" + prop-types "^15.5.8" + react-input-autosize "^2.1.0" + react-tabs@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-2.1.1.tgz#fd806fe78a990b59f1daf02609aded546fe7016c" @@ -5927,6 +6074,12 @@ styled-components@^2.4.0: stylis "^3.4.0" supports-color "^3.2.3" +styled-css-grid@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/styled-css-grid/-/styled-css-grid-0.8.0.tgz#84a498b49062757de30f33302b3c345c0401eb37" + dependencies: + prop-types "^15.6.0" + stylis@^3.4.0: version "3.4.5" resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.5.tgz#d7b9595fc18e7b9c8775eca8270a9a1d3e59806e"