feat(portal-api): send "Not Found" errors hen entity is not found

This error is only sent when fetching a single entity, or when fetching multiple
with specific filters.
This commit is contained in:
Sérgio Ramos 2017-07-21 15:08:15 +01:00 committed by Sérgio Ramos
parent 5c1b76c92f
commit b5605db095
4 changed files with 199 additions and 65 deletions

View File

@ -109,7 +109,7 @@ exports[`renders <Canvas /> correctly 1`] = `
exports[`renders <Code /> correctly 1`] = `
.NmzmU {
font-family: monospace, monospace;
font-family: monospace,monospace;
font-size: 1rem;
}
@ -245,7 +245,7 @@ exports[`renders <Input /> correctly 1`] = `
exports[`renders <Kbd /> correctly 1`] = `
.cNQErp {
font-family: monospace, monospace;
font-family: monospace,monospace;
font-size: 1rem;
}
@ -325,7 +325,7 @@ exports[`renders <Optgroup /> correctly 1`] = `
exports[`renders <Pre /> correctly 1`] = `
.ePyiae {
font-family: monospace, monospace;
font-family: monospace,monospace;
font-size: 1rem;
}
@ -347,7 +347,7 @@ exports[`renders <Progress /> correctly 1`] = `
exports[`renders <Samp /> correctly 1`] = `
.brPjlW {
font-family: monospace, monospace;
font-family: monospace,monospace;
font-size: 1rem;
}

View File

@ -10,6 +10,7 @@ const Util = require('util');
const DockerClient = require('docker-compose-client');
const Dockerode = require('dockerode');
const Hoek = require('hoek');
const Boom = require('boom');
const Triton = require('triton');
const ParamCase = require('param-case');
const Penseur = require('penseur');
@ -63,6 +64,16 @@ const internals = {
resolve(...args);
};
},
fromKeyValueToDict: (kv) => {
return kv.reduce((acc, { name, value }) => {
return Object.assign(acc, {
[name]: value
});
}, {});
},
isNotFound: (err) => {
return err && (err['typeof'] === Boom.notFound);
}
};
@ -113,15 +124,6 @@ class Data extends EventEmitter {
});
}
fromKeyValueToDict (kv) {
return kv.reduce((acc, { name, value }) => {
return Object.assign(acc, {
[name]: value
});
}, {});
}
// portals
createPortal (clientPortal, cb) {
@ -352,6 +354,10 @@ class Data extends EventEmitter {
return cb(err);
}
if ((ids || name || slug) && (!deploymentGroups || !deploymentGroups.length)) {
return cb(Boom.notFound());
}
if (!deploymentGroups || !deploymentGroups.length) {
return cb(null, []);
}
@ -385,7 +391,7 @@ class Data extends EventEmitter {
}
if (!deploymentGroups || !deploymentGroups.length) {
return cb();
return cb(Boom.notFound());
}
cb(null, Transform.fromDeploymentGroup(this._getDeploymentGroupFns(deploymentGroups[0])));
@ -407,9 +413,17 @@ class Data extends EventEmitter {
VAsync.parallel({
funcs: [
(cb) => {
if (!res.dg) {
return cb();
}
this._db.deployment_groups.remove({ id }, cb);
},
(cb) => {
if (!res.services) {
return cb();
}
VAsync.forEachParallel({
inputs: res.services,
func: ({ id }, next) => {
@ -418,6 +432,10 @@ class Data extends EventEmitter {
});
},
(cb) => {
if (!res.instances) {
return cb();
}
VAsync.forEachParallel({
inputs: res.instances,
func: ({ id }, next) => {
@ -451,16 +469,28 @@ class Data extends EventEmitter {
funcs: [
(cb) => {
this.getDeploymentGroup({ id }, (err, dg) => {
if (internals.isNotFound(err)) {
return cb(null, {});
}
cb(err, { dg });
});
},
(cb) => {
this.getServices({ deploymentGroupId: id }, (err, services) => {
if (internals.isNotFound(err)) {
return cb(null, {});
}
cb(err, { services });
});
},
(cb) => {
this.getInstances({ deploymentGroupId: id }, (err, instances) => {
if (internals.isNotFound(err)) {
return cb(null, {});
}
cb(err, { instances });
});
},
@ -735,7 +765,7 @@ class Data extends EventEmitter {
this._dockerCompose.scale({
projectName: ctx.deploymentGroup.name,
environment: ctx.manifest.environment,
files: this.fromKeyValueToDict(ctx.manifest.files),
files: internals.fromKeyValueToDict(ctx.manifest.files),
manifest: ctx.manifest.raw,
services: {
[ctx.service.name]: replicas
@ -1175,7 +1205,7 @@ class Data extends EventEmitter {
name: serviceName,
deploymentGroupId: ctx.currentDeploymentGroup.id
}, (err, services = []) => {
if (err) {
if (err && !internals.isNotFound(err)) {
return next(err);
}
@ -1247,7 +1277,7 @@ class Data extends EventEmitter {
this._dockerCompose.provision({
projectName: ctx.currentDeploymentGroup.name,
environment: clientManifest.environment,
files: this.fromKeyValueToDict(clientManifest.files),
files: internals.fromKeyValueToDict(clientManifest.files),
manifest: ctx.newManifest.raw
}, handleProvisionResponse);
});
@ -1446,7 +1476,7 @@ class Data extends EventEmitter {
if (!services || !services.length) {
console.log(`-> Service ${Util.inspect(query)} not found`);
return cb();
return cb(Boom.notFound());
}
const service = services.shift();
@ -1474,7 +1504,7 @@ class Data extends EventEmitter {
}
if (!deploymentGroup) {
return cb(null, {});
return cb(Boom.notFound());
}
return this.getServices({ deploymentGroupId: deploymentGroup.id }, cb);
@ -1512,6 +1542,10 @@ class Data extends EventEmitter {
return cb(err);
}
if (((options.ids && options.ids.length) || query.name || query.slug) && (!services || !services.length)) {
return cb(Boom.notFound());
}
if (!services || !services.length) {
return cb();
}
@ -1928,7 +1962,11 @@ class Data extends EventEmitter {
return cb(err);
}
cb(null, instance ? Transform.fromInstance(instance) : {});
if (!instance) {
return cb(Boom.notFound());
}
cb(null, Transform.fromInstance(instance));
});
}
@ -1956,6 +1994,10 @@ class Data extends EventEmitter {
return cb(err);
}
if (((ids && ids.length) || name || machineId) && (!instances || !instances.length)) {
return cb(Boom.notFound());
}
if (!instances || !instances.length) {
return cb(null, []);
}
@ -2100,7 +2142,11 @@ class Data extends EventEmitter {
return cb(err);
}
cb(null, dbPackage ? Transform.fromPackage(dbPackage) : {});
if (!dbPackage) {
return cb(Boom.notFound());
}
cb(null, Transform.fromPackage(dbPackage));
});
}
@ -2129,7 +2175,7 @@ class Data extends EventEmitter {
this._dockerCompose.config({
projectName: deploymentGroupName,
environment,
files: this.fromKeyValueToDict(files),
files: internals.fromKeyValueToDict(files),
manifest: raw
}, (err, config = {}) => {
if (err) {

View File

@ -4,6 +4,7 @@
const TritonWatch = require('triton-watch');
const Get = require('lodash.get');
const Find = require('lodash.find');
const Boom = require('boom');
const Util = require('util');
const ForceArray = require('force-array');
const VAsync = require('vasync');
@ -52,6 +53,10 @@ const SERVICE_DELETING_STATUSES = [
'UNKNOWN'
];
const isNotFound = (err) => {
return err && (err['typeof'] === Boom.notFound);
};
module.exports = class MachineWatcher {
constructor (options) {
options = options || {};
@ -568,8 +573,8 @@ module.exports = class MachineWatcher {
service,
deploymentGroup
}, cb) => {
this.getInstances(service, (err, instances) => {
if (err) {
this.getInstances(service, (err, instances = []) => {
if (err && !isNotFound(err)) {
return cb(err);
}
@ -595,15 +600,15 @@ module.exports = class MachineWatcher {
serviceName,
deploymentGroupId: deploymentGroup.id
}, (err, service) => {
if (err) {
return cb(err);
}
if (!service) {
if (isNotFound(err) || !service) {
console.error(`Service "${serviceName}" form DeploymentGroup "${deploymentGroupName}" for machine ${id} not found`);
return cb();
}
if (err) {
return cb(err);
}
getInstancesAndVersion({
service,
deploymentGroup
@ -614,13 +619,13 @@ module.exports = class MachineWatcher {
// assert that project managed by this portal
// also, lock into `deploymentGroupId` queue
this.getDeploymentGroup(deploymentGroupName, (err, deploymentGroup) => {
if (err) {
console.error(err);
if (isNotFound(err) || !deploymentGroup) {
console.error(`DeploymentGroup "${deploymentGroupName}" for machine ${id} not found`);
return;
}
if (!deploymentGroup) {
console.error(`DeploymentGroup "${deploymentGroupName}" for machine ${id} not found`);
if (err) {
console.error(err);
return;
}

147
yarn.lock
View File

@ -1378,12 +1378,18 @@ babylon@~5.8.3:
version "5.8.38"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd"
backoff@2.4.1, backoff@^2.4.1:
backoff@2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.4.1.tgz#2f68c50e0dd789dbefe24200a62efb04d2456d68"
dependencies:
precond "0.2"
backoff@^2.4.1:
version "2.5.0"
resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f"
dependencies:
precond "0.2"
bail@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764"
@ -1527,7 +1533,11 @@ breeze-async@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/breeze-async/-/breeze-async-0.1.0.tgz#ba4265949980a3d9d8bb9137a61a42e1f87da73a"
breeze-nexttick@*, breeze-nexttick@0.1.0:
breeze-nexttick@*:
version "0.2.1"
resolved "https://registry.yarnpkg.com/breeze-nexttick/-/breeze-nexttick-0.2.1.tgz#1e0b82f45eab600d84f0e91f16aef8d65b2dfbab"
breeze-nexttick@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/breeze-nexttick/-/breeze-nexttick-0.1.0.tgz#d68a56655045d205cb6e36bfaf3c6b2b2c438b2a"
@ -1753,7 +1763,7 @@ camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
camelcase@^2.0.0:
camelcase@^2.0.0, camelcase@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
@ -1961,7 +1971,7 @@ cliui@^2.1.0:
right-align "^0.1.1"
wordwrap "0.0.2"
cliui@^3.2.0:
cliui@^3.0.3, cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
dependencies:
@ -2034,8 +2044,8 @@ code@4.1.x, code@^4.1.0:
hoek "4.x.x"
codemirror@^5.18.2:
version "5.27.4"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.27.4.tgz#0e817c839bfea9959dd16cd48ae14acc0e43c3b6"
version "5.28.0"
resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.28.0.tgz#2978d9280d671351a4f5737d06bbd681a0fd6f83"
coleman-liau@^1.0.0:
version "1.0.1"
@ -2148,8 +2158,8 @@ configstore@^1.0.0:
xdg-basedir "^2.0.0"
configstore@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.0.tgz#45df907073e26dfa1cf4b2d52f5b60545eaa11d1"
version "3.1.1"
resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
dependencies:
dot-prop "^4.1.0"
graceful-fs "^4.1.2"
@ -2433,7 +2443,7 @@ core-js@^2.0.0, core-js@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
core-util-is@~1.0.0:
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
@ -2444,8 +2454,8 @@ cors@2.8.1:
vary "^1"
cosmiconfig@^2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.3.tgz#952771eb0dddc1cb3fa2f6fbe51a522e93b3ee0a"
version "2.2.1"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.1.tgz#7fbdc6fb47597d5f88175de1df696b66d36e5944"
dependencies:
is-directory "^0.3.1"
js-yaml "^3.4.3"
@ -3723,11 +3733,11 @@ extsprintf@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
extsprintf@1.2.0, extsprintf@^1.2.0:
extsprintf@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529"
extsprintf@1.3.0:
extsprintf@1.3.0, extsprintf@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
@ -3748,10 +3758,14 @@ fast-levenshtein@~2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
fast-safe-stringify@1.1.x, fast-safe-stringify@^1.1.3:
fast-safe-stringify@1.1.x:
version "1.1.13"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-1.1.13.tgz#a01e9cd9c9e491715c98a75a42d5f0bbd107ff76"
fast-safe-stringify@^1.1.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-1.2.0.tgz#ebd42666fd18fe4f2ba4f0d295065f3f85cade96"
fbjs@^0.8.5, fbjs@^0.8.9:
version "0.8.12"
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04"
@ -4051,12 +4065,18 @@ get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
getpass@0.1.6, getpass@^0.1.1:
getpass@0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
dependencies:
assert-plus "^1.0.0"
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"
git-raw-commits@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.1.2.tgz#a12d8492aeba2881802d700825ed81c9f39e6f2f"
@ -4142,6 +4162,16 @@ glob@^5.0.14:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^6.0.1:
version "6.0.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
dependencies:
inflight "^1.0.4"
inherits "2"
minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
globals@^9.0.0, globals@^9.14.0, globals@^9.17.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@ -6102,10 +6132,14 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7:
dependencies:
mime-db "~1.27.0"
mime@1.3.4, mime@^1.3.4:
mime@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
mime@^1.3.4:
version "1.3.6"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.6.tgz#591d84d3653a6b0b4a3b9df8de5aa8108e72e5e0"
mimic-fn@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
@ -6525,7 +6559,7 @@ once@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.0.tgz#151af86bfc1f08c4b9f07d06ab250ffcbeb56581"
once@1.3.2, once@~1.3.0:
once@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.2.tgz#d8feeca93b039ec1dcdee7741c92bdac5e28081b"
dependencies:
@ -6537,6 +6571,12 @@ once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.3.3, once@^1.4.0:
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"
onecolor@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/onecolor/-/onecolor-3.0.4.tgz#75a46f80da6c7aaa5b4daae17a47198bd9652494"
@ -7030,10 +7070,14 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
prettier@1.4.4, prettier@^1.3.1:
prettier@1.4.4:
version "1.4.4"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.4.4.tgz#a8d1447b14c9bf67e6d420dcadd10fb9a4fad65a"
prettier@^1.3.1:
version "1.5.3"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.5.3.tgz#59dadc683345ec6b88f88b94ed4ae7e1da394bfe"
pretty-format@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-18.1.0.tgz#fb65a86f7a7f9194963eee91865c1bcf1039e284"
@ -7269,7 +7313,7 @@ raw-body@~2.1.7:
iconv-lite "0.4.13"
unpipe "1.0.0"
rc@1.1.7, rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
rc@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea"
dependencies:
@ -7278,9 +7322,18 @@ rc@1.1.7, rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
minimist "^1.2.0"
strip-json-comments "~2.0.1"
rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
version "1.2.1"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95"
dependencies:
deep-extend "~0.4.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-apollo@^1.4.2:
version "1.4.6"
resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-1.4.6.tgz#b63002879680d0ebdcfb7623acf9df75a0e43bb7"
version "1.4.8"
resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-1.4.8.tgz#b510f207b08ce4bd1e3adbd46a3ede68e3af27e7"
dependencies:
apollo-client "^1.4.0"
graphql-anywhere "^3.0.0"
@ -7300,7 +7353,7 @@ react-broadcast@^0.1.2:
dependencies:
invariant "^2.2.1"
react-bundle@^1.0.4:
react-bundle@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/react-bundle/-/react-bundle-1.0.4.tgz#ea03cae97be357ff8e290e785f4e30d0e065b920"
dependencies:
@ -8051,12 +8104,18 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.
dependencies:
glob "^7.0.5"
rimraf@2.4.4, rimraf@~2.4.0:
rimraf@2.4.4:
version "2.4.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.4.tgz#b528ce2ebe0e6d89fb03b265de11d61da0dbcf82"
dependencies:
glob "^5.0.14"
rimraf@~2.4.0:
version "2.4.5"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"
dependencies:
glob "^6.0.1"
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
@ -9538,12 +9597,20 @@ verror@1.3.6:
dependencies:
extsprintf "1.0.2"
verror@1.6.0, verror@^1.6.0:
verror@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"
dependencies:
extsprintf "1.2.0"
verror@^1.6.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"
vfile-location@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255"
@ -9700,6 +9767,10 @@ 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.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
@ -9817,7 +9888,7 @@ xmlhttprequest@1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
y18n@^3.2.1:
y18n@^3.2.0, y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
@ -9862,14 +9933,17 @@ yargs@^1.2.6:
version "1.3.3"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.3.3.tgz#054de8b61f22eefdb7207059eaef9d6b83fb931a"
yargs@^3.5.4, yargs@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
yargs@^3.5.4:
version "3.32.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
dependencies:
camelcase "^1.0.2"
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
camelcase "^2.0.1"
cliui "^3.0.3"
decamelize "^1.1.1"
os-locale "^1.4.0"
string-width "^1.0.1"
window-size "^0.1.4"
y18n "^3.2.0"
yargs@^6.0.0:
version "6.6.0"
@ -9907,6 +9981,15 @@ yargs@^8.0.1, yargs@^8.0.2:
y18n "^3.2.1"
yargs-parser "^7.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"
z-schema@^3.16.1, z-schema@^3.17.0:
version "3.18.2"
resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.18.2.tgz#e422196b5efe60b46adef3c3f2aef2deaa911161"