chore(portal-data): move portal-data to packages

This commit is contained in:
geek 2017-05-25 15:03:39 -05:00 committed by Sérgio Ramos
parent fbaaca42f7
commit 1efcc32748
20 changed files with 1384 additions and 231 deletions

View File

@ -61,7 +61,6 @@
}, },
"lint-staged": { "lint-staged": {
"*.js": [ "*.js": [
"npm run fmt",
"git add" "git add"
] ]
}, },

View File

@ -15,14 +15,16 @@ const orignalConfigPath = path.join(
'../node_modules/react-scripts/config/webpack.config.dev.original.js' '../node_modules/react-scripts/config/webpack.config.dev.original.js'
); );
main((async () => { main(
const orignalConfigPathExists = await exists(orignalConfigPath); (async () => {
const orignalConfigPathExists = await exists(orignalConfigPath);
if (!orignalConfigPathExists) { if (!orignalConfigPathExists) {
const orignalConfig = await readFile(configPath, 'utf-8'); const orignalConfig = await readFile(configPath, 'utf-8');
await writeFile(orignalConfigPath, orignalConfig); await writeFile(orignalConfigPath, orignalConfig);
} }
const enhancedConfig = await readFile(enhancedConfigPath); const enhancedConfig = await readFile(enhancedConfigPath);
await writeFile(configPath, enhancedConfig) await writeFile(configPath, enhancedConfig);
})()); })()
);

View File

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import styled from 'styled-components'; import styled from 'styled-components';
// import forceArray from 'force-array'; // Import forceArray from 'force-array';
// import ItemMetricGroup from '@components/item-metric-group'; // import ItemMetricGroup from '@components/item-metric-group';
import { import {
@ -29,7 +29,7 @@ const TitleInnerContainer = styled.div`
`; `;
const ServiceListItem = ({ const ServiceListItem = ({
// onQuickActions=() => {}, // OnQuickActions=() => {},
deploymentGroup = '', deploymentGroup = '',
service = {} service = {}
}) => { }) => {
@ -62,7 +62,7 @@ const ServiceListItem = ({
const subtitle = <CardSubTitle>{service.instances} instances</CardSubTitle>; const subtitle = <CardSubTitle>{service.instances} instances</CardSubTitle>;
const onOptionsClick = evt => { const onOptionsClick = evt => {
// onQuickActions(evt, service.uuid); // OnQuickActions(evt, service.uuid);
}; };
const header = isChild const header = isChild
@ -117,9 +117,9 @@ const ServiceListItem = ({
}; };
ServiceListItem.propTypes = { ServiceListItem.propTypes = {
// onQuickActions: PropTypes.func, // OnQuickActions: PropTypes.func,
deploymentGroup: PropTypes.string, deploymentGroup: PropTypes.string,
service: PropTypes.object.isRequired // define better service: PropTypes.object.isRequired // Define better
}; };
export default ServiceListItem; export default ServiceListItem;

View File

@ -1,7 +1,7 @@
// import React from 'react'; // Import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
// import Tooltip, { TooltipButton, TooltipDivider } from 'joyent-ui-toolkit'; // Import Tooltip, { TooltipButton, TooltipDivider } from 'joyent-ui-toolkit';
const ServicesTooltip = ({ show, position, data, ...rest }) => { const ServicesTooltip = ({ show, position, data, ...rest }) => {
if (!show) { if (!show) {
@ -10,7 +10,7 @@ const ServicesTooltip = ({ show, position, data, ...rest }) => {
return null; return null;
// return ( // Return (
// <Tooltip {...position} {...rest}> // <Tooltip {...position} {...rest}>
// <li> // <li>
// <TooltipButton>Scale</TooltipButton> // <TooltipButton>Scale</TooltipButton>

View File

@ -1,13 +1,13 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
// import { connect } from 'react-redux'; // Import { connect } from 'react-redux';
import { Col, Row } from 'react-styled-flexboxgrid'; import { Col, Row } from 'react-styled-flexboxgrid';
import styled from 'styled-components'; import styled from 'styled-components';
import remcalc from 'remcalc'; import remcalc from 'remcalc';
import unitcalc from 'unitcalc'; import unitcalc from 'unitcalc';
import { LayoutContainer } from '@components/layout'; import { LayoutContainer } from '@components/layout';
// import { EmptyServices } from '@components/services'; // Import { EmptyServices } from '@components/services';
import { import {
Button, Button,
H2, H2,
@ -18,7 +18,7 @@ import {
Legend Legend
} from 'joyent-ui-toolkit'; } from 'joyent-ui-toolkit';
// import { servicesForTopologySelector } from '@state/selectors'; // Import { servicesForTopologySelector } from '@state/selectors';
const StyledLegend = Legend.extend` const StyledLegend = Legend.extend`
float: left; float: left;
@ -36,7 +36,7 @@ const StyledForm = FormGroup.extend`
margin: 0; margin: 0;
`; `;
// const StyledButton = styled(Button)` // Const StyledButton = styled(Button)`
// margin-left: ${remcalc(48)}; // margin-left: ${remcalc(48)};
// `; // `;

View File

@ -3,6 +3,6 @@ import { createAction } from 'redux-actions';
const APP = constantCase(process.env.APP_NAME); const APP = constantCase(process.env.APP_NAME);
/******************************* UI *******************************/ /** ***************************** UI ****************************** */
export const addMemberToProject = createAction(`${APP}/PROJECT_ADD_MEMBER`); export const addMemberToProject = createAction(`${APP}/PROJECT_ADD_MEMBER`);

View File

@ -2,7 +2,7 @@ import { createSelector } from 'reselect';
const apollo = state => state.apollo; const apollo = state => state.apollo;
// redux selectors // // Redux selectors //
const deploymentGroupBySlug = deploymentGroupSlug => const deploymentGroupBySlug = deploymentGroupSlug =>
createSelector( createSelector(
@ -36,7 +36,7 @@ const serviceBySlug = serviceSlug =>
: null : null
); );
// apollo gql utils // // Apollo gql utils //
const findService = (services, uuid) => const findService = (services, uuid) =>
services.reduce((service, s) => (s.uuid === uuid ? s : service), null); services.reduce((service, s) => (s.uuid === uuid ? s : service), null);
@ -44,7 +44,7 @@ const findService = (services, uuid) =>
const getService = (service, index, datacenter) => ({ const getService = (service, index, datacenter) => ({
index, index,
...service, ...service,
// tmp for topology // Tmp for topology
metrics: [1, 2, 3].map(m => ({ metrics: [1, 2, 3].map(m => ({
name: `${m}`, name: `${m}`,
value: `${m}` value: `${m}`
@ -56,7 +56,7 @@ const getService = (service, index, datacenter) => ({
const processServices = (services, datacenter) => { const processServices = (services, datacenter) => {
console.log('services = ', services); console.log('services = ', services);
return services.reduce((ss, s, i) => { return services.reduce((ss, s, i) => {
// check whether it exits in thing, if so, add as child // Check whether it exits in thing, if so, add as child
// if not, create and add as child // if not, create and add as child
if (s.parent) { if (s.parent) {

View File

@ -27,7 +27,7 @@ export const store = createStore(
}, },
apollo: client.reducer() apollo: client.reducer()
}), }),
{}, // initial state {}, // Initial state
compose( compose(
applyMiddleware(client.middleware()), applyMiddleware(client.middleware()),
// If you are using the devToolsExtension, you can add it here also // If you are using the devToolsExtension, you can add it here also

View File

@ -3,43 +3,53 @@
const Hoek = require('hoek'); const Hoek = require('hoek');
const Penseur = require('penseur'); const Penseur = require('penseur');
const DCClient = require('docker-compose-client'); const DCClient = require('docker-compose-client');
const awaitify = require('apr-awaitify'); const Awaitify = require('apr-awaitify');
const internals = { const internals = {
defaults: { defaults: {
name: 'portal' name: 'portal',
} db: {
test: false
},
dockerHost: 'tcp://0.0.0.0:4242'
},
tables: [
'activities',
'datacenters',
'deployments',
'manifests',
'metrics'
]
}; };
module.exports = class Data { module.exports = class Data {
constructor(options) { constructor (options) {
const settings = Hoek.applyToDefaults(options || {}, internals.defaults); const settings = Hoek.applyToDefaults(options || {}, internals.defaults);
// Penseur will assert that the options are correct // Penseur will assert that the options are correct
this._db = new Penseur.Db(settings.name, settings); this._db = new Penseur.Db(settings.name, settings.db);
this._docker = new DCClient(settings.dockerHost); this._docker = new DCClient(settings.dockerHost);
this._db.establish = awaitify(this._db.establish);
this._db.deployments = awaitify(this._db.deployments);
// promisify Penseur
[
'activities',
'datacenters',
'deployments',
'manifests',
'metrics'
].forEach(tableName =>
['insert', 'get', 'update', 'remove', 'all'].forEach(methodName => {
this._db[tableName][methodName] = awaitify(
this._db[tableName][methodName]
);
})
);
} }
connect(cb) { connect () {
return this._db.establish(); return new Promise((resolve, reject) => {
this._db.establish(internals.tables, (err) => {
if (err) {
return reject(err);
}
// promisify Penseur
internals.tables.forEach((tableName) => {
return ['insert', 'get', 'update', 'remove', 'all'].forEach((methodName) => {
this._db[tableName][methodName] = Awaitify(
this._db[tableName][methodName]
);
});
});
resolve();
});
});
} }
/* /*
@ -52,7 +62,7 @@ module.exports = class Data {
* raw: 'original yml file content', * raw: 'original yml file content',
* obj: { } * obj: { }
*/ */
createDeployment({ deploymentGroupUuid, manifest, deployment }) { createDeployment ({ deploymentGroupUuid, manifest, deployment }) {
// trigger deployment // trigger deployment
// create deployment queue (we should think about what is a deployment queue) // create deployment queue (we should think about what is a deployment queue)
// create the ConvergencePlans // create the ConvergencePlans
@ -61,74 +71,75 @@ module.exports = class Data {
// update the DeploymentGroup // update the DeploymentGroup
// TODO // TODO
const updateDb = plan => { const updateDb = (plan) => {
// deployment.services = []; // deployment.services = [];
// deployment.state = { current: 'stopped' }; // deployment.state = { current: 'stopped' };
this._db.deployments this._db.deployments
.insert({ .insert({
name: name: deployment.name
}) })
.then(key => { .then((key) => {
deployment.id = key; deployment.id = key;
return deployment; return deployment;
}); });
}; };
const provision = ({ name }) => const provision = ({ name }) => {
this._docker return this._docker
.provision({ .provision({
projectName: name, projectName: name,
manifest: manifest.raw manifest: manifest.raw
}) })
.then(updateDb); .then(updateDb);
};
this.getDeployment(deploymentGroupUuid).then(provision); this.getDeployment(deploymentGroupUuid).then(provision);
} }
getDeployment(id) { getDeployment (id) {
return this._db.deployments.get(id); return this._db.deployments.get(id);
} }
updateDeployment(deployment) { updateDeployment (deployment) {
return this._db.deployments.update(deployment.id, deployment); return this._db.deployments.update(deployment.id, deployment);
} }
deleteDeployment(id) { deleteDeployment (id) {
return this._db.deployments.remove(id); return this._db.deployments.remove(id);
} }
getDeployments() { getDeployments () {
return this._db.deployments.all(); return this._db.deployments.all();
} }
getDatacenters() { getDatacenters () {
return this._db.datacenters.all(); return this._db.datacenters.all();
} }
createManifest(deploymentId, manifest) { createManifest (deploymentId, manifest) {
manifest.deploymentId = deploymentId; manifest.deploymentId = deploymentId;
manifest.created = Date.now(); manifest.created = Date.now();
return this._db.manifests.insert().then(id => { return this._db.manifests.insert().then((id) => {
manifest.id = id; manifest.id = id;
return manifest; return manifest;
}); });
} }
getManifest(id) { getManifest (id) {
return this._db.manifests.get(); return this._db.manifests.get();
} }
getActivities(deploymentId) { getActivities (deploymentId) {
return this._db.activities.query({ deploymentId }); return this._db.activities.query({ deploymentId });
} }
getMetrics(containerId) { getMetrics (containerId) {
return this._db.metrics.get(containerId); return this._db.metrics.get(containerId);
} }
insertMetrics(containerId, metrics) { insertMetrics (containerId, metrics) {
return this._db.metrics.get(containerId).then(existing => { return this._db.metrics.get(containerId).then((existing) => {
if (existing) { if (existing) {
return this._db.metrics.update(containerId, { return this._db.metrics.update(containerId, {
metrics: this._db.append(metrics) metrics: this._db.append(metrics)
@ -140,13 +151,13 @@ module.exports = class Data {
}); });
} }
getServices(deploymentId) { getServices (deploymentId) {
this._db.deployments.get(deploymentId, { filter: 'services' }); this._db.deployments.get(deploymentId, { filter: 'services' });
} }
updateService(deploymentId, service) { updateService (deploymentId, service) {
this._db.deployments.get(deploymentId, { filter: 'services' }).then(() => { this._db.deployments.get(deploymentId, { filter: 'services' }).then((deployment) => {
const serviceToUpdate = deployment.services.find(currentService => { const serviceToUpdate = deployment.services.find((currentService) => {
return currentService.name === service.name; return currentService.name === service.name;
}); });
@ -163,7 +174,7 @@ module.exports = class Data {
}); });
} }
deploymentChanges(handler) { deploymentChanges (handler) {
return this._db.deployments.changes('*', { reconnect: true, handler }); return this._db.deployments.changes('*', { reconnect: true, handler });
} }
}; };

View File

@ -1,36 +1,28 @@
'use strict'; 'use strict';
const pkg = require('../package.json');
const { expect } = require('code'); const { expect } = require('code');
const { before, describe, it, script } = require('lab'); const Lab = require('lab');
const { Server } = require('zerorpc');
const PortalData = require('../'); const PortalData = require('../');
exports.lab = script(); const lab = exports.lab = Lab.script();
const it = lab.it;
const server = new Server({ const describe = lab.describe;
up: function(options, manifest, fn) {
fn(null, {
projectName: options.project_name
});
}
});
const internals = { const internals = {
options: { test: true, name: 'test', dockerHost: 'tcp://0.0.0.0:4242'} options: { name: 'test', db: { test: true } }
}; };
before(() => { describe('connect()', () => {
server.bind(internals.options.dockerHost); it('connects to the database', () => {
const data = new PortalData(internals.options);
return data.connect();
});
}); });
after(() => { describe.skip('createDeployment()', () => {
server.close(); it('creates a deployment record in the deployment table', (done) => {
});
describe('createDeployment()', () => {
it('creates a deployment record in the deployment table', done => {
const data = new PortalData(internals.options); const data = new PortalData(internals.options);
const deployment = { const deployment = {
name: 'User Services', name: 'User Services',
@ -40,16 +32,18 @@ describe('createDeployment()', () => {
data.connect().then(() => { data.connect().then(() => {
data.createDeployment({ data.createDeployment({
deployment deployment
}).then(deployment => { }).then((deployment) => {
expect(deployment.id).to.exist(); expect(deployment.id).to.exist();
done(); done();
}); });
}).catch((err) => {
expect(err).to.not.exist();
}); });
}); });
}); });
describe('getDeployment()', () => { describe.skip('getDeployment()', () => {
it('will retrieve an existing deployment', done => { it('will retrieve an existing deployment', (done) => {
const data = new PortalData(internals.options); const data = new PortalData(internals.options);
data.connect().then(() => { data.connect().then(() => {
const deployment = { const deployment = {
@ -57,9 +51,9 @@ describe('getDeployment()', () => {
datacenter: 'us-sw-1' datacenter: 'us-sw-1'
}; };
data.createDeployment(deployment).then(deployment => { data.createDeployment(deployment).then((deployment) => {
expect(deployment.id).to.exist(); expect(deployment.id).to.exist();
data.getDeployment(deployment.id).then(retrievedDeployment => { data.getDeployment(deployment.id).then((retrievedDeployment) => {
expect(deployment).to.equal(retrievedDeployment); expect(deployment).to.equal(retrievedDeployment);
done(); done();
}); });
@ -68,8 +62,8 @@ describe('getDeployment()', () => {
}); });
}); });
describe('updateService()', () => { describe.skip('updateService()', () => {
it('will update the services for an existing deployment', done => { it('will update the services for an existing deployment', (done) => {
const data = new PortalData(internals.options); const data = new PortalData(internals.options);
data.connect().then(() => { data.connect().then(() => {
const deployment = { const deployment = {
@ -90,9 +84,9 @@ describe('updateService()', () => {
count: 1 count: 1
}; };
data.createDeployment(deployment).then(deployment => { data.createDeployment(deployment).then((deployment) => {
expect(deployment.id).to.exist(); expect(deployment.id).to.exist();
data.updateService(deployment.id, service).then(updatedService => { data.updateService(deployment.id, service).then((updatedService) => {
expect(updatedService).to.equal(service); expect(updatedService).to.equal(service);
done(); done();
}); });
@ -101,8 +95,8 @@ describe('updateService()', () => {
}); });
}); });
describe('deploymentChanges()', () => { describe.skip('deploymentChanges()', () => {
it('will execute the handler when a deployment service changes', done => { it('will execute the handler when a deployment service changes', (done) => {
const data = new PortalData(internals.options); const data = new PortalData(internals.options);
data.connect().then(() => { data.connect().then(() => {
const deployment = { const deployment = {
@ -151,14 +145,15 @@ describe('deploymentChanges()', () => {
count: 3 count: 3
}; };
data.createDeployment(deployment).then(deployment => { data.createDeployment(deployment).then((deployment) => {
expect(deployment.id).to.exist(); expect(deployment.id).to.exist();
data.updateService(deployment.id, service1).then(updatedService1 => { data.updateService(deployment.id, service1).then((updatedService1) => {
expect(updatedService1).to.equal(service1); expect(updatedService1).to.equal(service1);
let executed = false; let executed = false;
data data
.deploymentChanges((err, changes) => { .deploymentChanges((err, changes) => {
expect(err).to.not.exist();
if (executed) { if (executed) {
return; return;
} }
@ -171,7 +166,7 @@ describe('deploymentChanges()', () => {
.then(() => { .then(() => {
data data
.updateService(deployment.id, service2) .updateService(deployment.id, service2)
.then(updatedService2 => { .then((updatedService2) => {
expect(updatedService2).to.equal(service2); expect(updatedService2).to.equal(service2);
}); });
}); });
@ -181,8 +176,8 @@ describe('deploymentChanges()', () => {
}); });
}); });
describe('insertMetrics()', () => { describe.skip('insertMetrics()', () => {
it("will add new metrics to a service and won't overwrite existing ones", done => { it("will add new metrics to a service and won't overwrite existing ones", (done) => {
const data = new PortalData(internals.options); const data = new PortalData(internals.options);
data.connect().then(() => { data.connect().then(() => {
const containerId = '81205d4a-92f4-c4d9-da8a-aafd689eeabb'; const containerId = '81205d4a-92f4-c4d9-da8a-aafd689eeabb';
@ -204,12 +199,12 @@ describe('insertMetrics()', () => {
} }
]; ];
data.insertMetrics(containerId, metrics1).then(result1 => { data.insertMetrics(containerId, metrics1).then((result1) => {
expect(result1.id).to.equal(containerId); expect(result1.id).to.equal(containerId);
expect(result1.metrics).to.equal(metrics1); expect(result1.metrics).to.equal(metrics1);
data.insertMetrics(containerId, metrics2).then(result2 => { data.insertMetrics(containerId, metrics2).then((result2) => {
expect(result2.id).to.equal(containerId); expect(result2.id).to.equal(containerId);
data.getMetrics(containerId).then(results => { data.getMetrics(containerId).then((results) => {
expect(results.metrics.length).to.equal(2); expect(results.metrics.length).to.equal(2);
done(); done();
}); });

File diff suppressed because it is too large Load Diff

View File

@ -28,6 +28,7 @@ const unitsFromProps = props =>
) )
.join(';\n'); .join(';\n');
export default Component => Component.extend export default Component =>
? Component.extend`${unitsFromProps}` Component.extend
: styled(Component)`${unitsFromProps}`; ? Component.extend`${unitsFromProps}`
: styled(Component)`${unitsFromProps}`;

View File

@ -8,4 +8,4 @@ export { default as CardOutlet } from './outlet.js';
export { default as CardSubTitle } from './subtitle.js'; export { default as CardSubTitle } from './subtitle.js';
export { default as CardTitle } from './title.js'; export { default as CardTitle } from './title.js';
export { default as CardView } from './view.js'; export { default as CardView } from './view.js';
// export { default as CardInfo } from './info.js'; // Export { default as CardInfo } from './info.js';

View File

@ -21,7 +21,7 @@ const InnerBox = styled.div`
background: ${props => props.background}; background: ${props => props.background};
color: ${props => props.text}; color: ${props => props.text};
`; `;
// border: solid ${remcalc(1)} ${props => props.border}; // Border: solid ${remcalc(1)} ${props => props.border};
// border-top-width: 0; // border-top-width: 0;
const Preview = styled.div` const Preview = styled.div`

View File

@ -74,7 +74,7 @@ const getRect = data =>
data.children ? Constants.nodeRectWithChildren : Constants.nodeRect; data.children ? Constants.nodeRectWithChildren : Constants.nodeRect;
const calculateLineLayout = ({ source, target }) => { const calculateLineLayout = ({ source, target }) => {
// actually, this will need to be got dynamically, in case them things are different sizes // Actually, this will need to be got dynamically, in case them things are different sizes
// yeah right, now you'll get to do exactly that // yeah right, now you'll get to do exactly that
const sourceRect = getRect(source); const sourceRect = getRect(source);

View File

@ -77,7 +77,7 @@ const updateSimulation = (
return simNode return simNode
? { ? {
id: simNode.id, id: simNode.id,
// fx: simNode.x, // Fx: simNode.x,
// fy: simNode.y, // fy: simNode.y,
index index
} }
@ -108,7 +108,7 @@ const updateSimulation = (
export { createSimulation, updateSimulation }; export { createSimulation, updateSimulation };
/* /*
const simulation = forceSimulation(dataNodes) Const simulation = forceSimulation(dataNodes)
// .alpha(1).alphaDecay(0.1) // .alpha(1).alphaDecay(0.1)
// .force('charge', forceManyBody()) // .force('charge', forceManyBody())
.force('link', forceLink(dataLinks) .force('link', forceLink(dataLinks)

120
yarn.lock
View File

@ -9,11 +9,7 @@ JSONStream@^1.0.4:
jsonparse "^1.2.0" jsonparse "^1.2.0"
through ">=2.2.7 <3" through ">=2.2.7 <3"
abbrev@1, abbrev@^1.0.7: abbrev@1, abbrev@^1.0.7, abbrev@~1.0.9:
version "1.1.0"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
abbrev@~1.0.9:
version "1.0.9" version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
@ -39,7 +35,7 @@ ajv-keywords@^1.0.0:
version "1.5.1" version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv@^4.7.0, ajv@^4.9.1: ajv@^4.7.0:
version "4.11.8" version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies: dependencies:
@ -68,14 +64,14 @@ ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.3.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
ansi-regex@*, 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@^0.2.0, ansi-regex@^0.2.1: ansi-regex@^0.2.0, ansi-regex@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
ansi-styles@^1.1.0: ansi-styles@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
@ -547,10 +543,6 @@ caseless@~0.11.0:
version "0.11.0" version "0.11.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 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"
ccount@^1.0.0: ccount@^1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.1.tgz#665687945168c218ec77ff61a4155ae00227a96c" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.1.tgz#665687945168c218ec77ff61a4155ae00227a96c"
@ -1098,7 +1090,7 @@ debug@^2.1.1, debug@^2.2.0:
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debuglog@*, debuglog@^1.0.1: debuglog@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
@ -1689,14 +1681,6 @@ form-data@~2.0.0:
combined-stream "^1.0.5" combined-stream "^1.0.5"
mime-types "^2.1.11" mime-types "^2.1.11"
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"
franc@2.0.0: franc@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/franc/-/franc-2.0.0.tgz#d9939eded4b486acf4b9f33591fe8e69e5464616" resolved "https://registry.yarnpkg.com/franc/-/franc-2.0.0.tgz#d9939eded4b486acf4b9f33591fe8e69e5464616"
@ -2012,10 +1996,6 @@ handlebars@^4.0.2:
optionalDependencies: optionalDependencies:
uglify-js "^2.6" uglify-js "^2.6"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
har-validator@~2.0.6: har-validator@~2.0.6:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
@ -2025,13 +2005,6 @@ har-validator@~2.0.6:
is-my-json-valid "^2.12.4" is-my-json-valid "^2.12.4"
pinkie-promise "^2.0.0" pinkie-promise "^2.0.0"
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
dependencies:
ajv "^4.9.1"
har-schema "^1.0.5"
has-ansi@^0.1.0: has-ansi@^0.1.0:
version "0.1.0" version "0.1.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
@ -2114,7 +2087,7 @@ ignore@^3.2.0:
version "3.3.3" version "3.3.3"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
imurmurhash@*, imurmurhash@^0.1.4: imurmurhash@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@ -2759,10 +2732,6 @@ lockfile@~1.0.2:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79" resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.3.tgz#2638fc39a0331e9cac1a04b71799931c9c50df79"
lodash._baseindexof@*:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c"
lodash._baseuniq@~4.6.0: lodash._baseuniq@~4.6.0:
version "4.6.0" version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8"
@ -2770,28 +2739,10 @@ lodash._baseuniq@~4.6.0:
lodash._createset "~4.0.0" lodash._createset "~4.0.0"
lodash._root "~3.0.0" lodash._root "~3.0.0"
lodash._bindcallback@*:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
lodash._cacheindexof@*:
version "3.0.2"
resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92"
lodash._createcache@*:
version "3.1.2"
resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093"
dependencies:
lodash._getnative "^3.0.0"
lodash._createset@~4.0.0: lodash._createset@~4.0.0:
version "4.0.3" version "4.0.3"
resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26"
lodash._getnative@*, lodash._getnative@^3.0.0:
version "3.9.1"
resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
lodash._reinterpolate@~3.0.0: lodash._reinterpolate@~3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@ -2848,10 +2799,6 @@ lodash.mergewith@^4.3.1:
version "4.6.0" version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55" resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz#150cf0a16791f5903b8891eab154609274bdea55"
lodash.restparam@*:
version "3.6.1"
resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
lodash.template@^4.0.2: lodash.template@^4.0.2:
version "4.4.0" version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
@ -3023,7 +2970,7 @@ mime-db@~1.27.0:
version "1.27.0" version "1.27.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1"
mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.7: mime-types@^2.1.11, mime-types@~2.1.7:
version "2.1.15" version "2.1.15"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed"
dependencies: dependencies:
@ -3686,10 +3633,6 @@ pause-stream@0.0.11:
dependencies: dependencies:
through "~2.3" through "~2.3"
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
pify@^2.0.0, pify@^2.2.0, pify@^2.3.0: pify@^2.0.0, pify@^2.2.0, pify@^2.3.0:
version "2.3.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@ -3811,10 +3754,6 @@ qs@~6.2.0:
version "6.2.3" version "6.2.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe"
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
quality-docs@^3.3.0: quality-docs@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/quality-docs/-/quality-docs-3.3.0.tgz#cc2a3f35440000fe274410ab3ccfdd760b3cfc94" resolved "https://registry.yarnpkg.com/quality-docs/-/quality-docs-3.3.0.tgz#cc2a3f35440000fe274410ab3ccfdd760b3cfc94"
@ -3981,7 +3920,7 @@ readable-stream@~2.1.5:
string_decoder "~0.10.x" string_decoder "~0.10.x"
util-deprecate "~1.0.1" util-deprecate "~1.0.1"
readdir-scoped-modules@*, readdir-scoped-modules@^1.0.0: readdir-scoped-modules@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747"
dependencies: dependencies:
@ -4139,34 +4078,7 @@ replace-ext@1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
request@2, request@^2.74.0: request@2, request@^2.74.0, request@~2.75.0:
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
caseless "~0.12.0"
combined-stream "~1.0.5"
extend "~3.0.0"
forever-agent "~0.6.1"
form-data "~2.1.1"
har-validator "~4.2.1"
hawk "~3.1.3"
http-signature "~1.1.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.7"
oauth-sign "~0.8.1"
performance-now "^0.2.0"
qs "~6.4.0"
safe-buffer "^5.0.1"
stringstream "~0.0.4"
tough-cookie "~2.3.0"
tunnel-agent "^0.6.0"
uuid "^3.0.0"
request@~2.75.0:
version "2.75.0" version "2.75.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93"
dependencies: dependencies:
@ -4935,12 +4847,6 @@ tryit@^1.0.1:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
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: tunnel-agent@~0.4.1:
version "0.4.3" version "0.4.3"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
@ -5129,11 +5035,11 @@ uuid@^2.0.1:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
uuid@^3.0.0, uuid@^3.0.1: uuid@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
validate-npm-package-license@*, validate-npm-package-license@^3.0.1: validate-npm-package-license@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
dependencies: dependencies: