From bb67223abd3d4a5c3654393b4a962daae0588741 Mon Sep 17 00:00:00 2001 From: bozokopic Date: Sun, 15 Apr 2018 19:14:15 +0200 Subject: WIP web frontend --- package.json | 1 + src_js/opcut/common.js | 69 +++++++++++- src_js/opcut/grid.js | 186 +++++++++++++++++++------------- src_js/opcut/validators.js | 56 ++++++++++ src_js/opcut/vt.js | 123 +++++++++++++++------- src_web/style/grid.scss | 53 ++++++++++ src_web/style/main.scss | 52 +++++---- src_web/style/shadow.scss | 23 ++++ yarn.lock | 256 +++++++++------------------------------------ 9 files changed, 478 insertions(+), 341 deletions(-) create mode 100644 src_js/opcut/validators.js create mode 100644 src_web/style/grid.scss create mode 100644 src_web/style/shadow.scss diff --git a/package.json b/package.json index 57c4920..38b23ee 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "tern": "0.21.0", "tmp": "0.0.33", "tv4": "1.3.0", + "uri-js": "4.2.1", "url-loader": "0.6.2", "url-parse": "1.2.0", "vex-js": "4.0.1", diff --git a/src_js/opcut/common.js b/src_js/opcut/common.js index 3f39115..89088ac 100644 --- a/src_js/opcut/common.js +++ b/src_js/opcut/common.js @@ -1,16 +1,77 @@ +import * as URI from 'uri-js'; +import iziToast from 'izitoast'; +import r from 'opcut/renderer'; +import * as u from 'opcut/util'; -export function submit() { +const calculateUrl = URI.resolve(window.location.href, './calculate'); +const generateOutputUrl = URI.resolve(window.location.href, './generate_output'); -} +export function calculate() { + const msg = { + method: r.get('form', 'method'), + params: { + cut_width: u.strictParseFloat(r.get('form', 'cut_width')), + panels: u.pipe( + u.map(panel => [panel.name, {width: u.strictParseFloat(panel.width), + height: u.strictParseFloat(panel.height)}]), + u.fromPairs + )(r.get('form', 'panels', 'items')), + items: u.pipe( + u.map(item => [item.name, {width: u.strictParseFloat(item.width), + height: u.strictParseFloat(item.height), + can_rotate: item.can_rotate}]), + u.fromPairs + )(r.get('form', 'items', 'items')), + } + }; + try { + validateCalculateRequest(msg); + } catch (e) { + showNotification(e, 'error'); + return; + } + const req = new XMLHttpRequest(); + req.onload = () => parseCalculateResponse(JSON.parse(req.responseText)); + req.open('POST', calculateUrl); + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify(msg)); +} -export function addPanel() { +function validateCalculateRequest(msg) { + if (!Number.isFinite(msg.params.cut_width) || msg.params.cut_width < 0) + throw 'Invalid cut width'; + if (u.equals(msg.params.panels, {})) + throw 'No panels defined'; + for (let [name, panel] of u.toPairs(msg.params.panels)) { + if (!name) + throw 'Invalid panel name'; + if (!Number.isFinite(panel.width) || panel.width <= 0) + throw 'Invalid width for panel ' + name; + if (!Number.isFinite(panel.height) || panel.height <= 0) + throw 'Invalid height for panel ' + name; + } + if (u.equals(msg.params.items, {})) + throw 'No items defined'; + for (let [name, item] of u.toPairs(msg.params.items)) { + if (!name) + throw 'Invalid item name'; + if (!Number.isFinite(item.width) || item.width <= 0) + throw 'Invalid width for item ' + name; + if (!Number.isFinite(item.height) || item.height <= 0) + throw 'Invalid height for item ' + name; + } } -export function addItem() { +function parseCalculateResponse(msg) { + +} + +function showNotification(message, type) { + iziToast[type]({message: message}); } diff --git a/src_js/opcut/grid.js b/src_js/opcut/grid.js index 972341d..4403195 100644 --- a/src_js/opcut/grid.js +++ b/src_js/opcut/grid.js @@ -30,39 +30,50 @@ export function tbody(gridPath, columns, validators) { content = checkboxColumn(gridPath, column)(row, rowIndex); } else if (selected) { content = ['input.grid-input', { - type: 'text', - 'ev-change': (evt) => r.set([gridPath, 'items', rowIndex, column], - evt.target.value), - 'ev-blur': _ => { - if (u.equals(gridState.selectedItem, [rowIndex, column])) - r.set([gridPath, 'selectedItem'], null); + props: { + type: 'text', + value: content }, - 'ev-keyup': (evt) => { - switch (evt.key) { - case 'Enter': - evt.target.blur(); - break; - case 'Escape': - evt.target.value = u.get(column, row); - evt.target.blur(); - break; + on: { + change: evt => r.set([gridPath, 'items', rowIndex, column], + evt.target.value), + blur: _ => { + if (u.equals(gridState.selectedItem, [rowIndex, column])) + r.set([gridPath, 'selectedItem'], null); + }, + keyup: evt => { + switch (evt.key) { + case 'Enter': + evt.target.blur(); + break; + case 'Escape': + evt.target.value = u.get(column, row); + evt.target.blur(); + break; + } } - }, - value: content - }]; + }} + ]; } } const title = (validator ? validator(u.get(column, row), row) : null); - return ['td' + (title ? '.invalid' : ''), { - title: (title ? title : ''), - 'ev-click': evt => { - if (u.equals(gridState.selectedItem, [rowIndex, column])) - return; - ev.one(r, 'render', () => { - if (evt.target.firstChild && evt.target.firstChild.focus) - evt.target.firstChild.focus(); - }); - r.set([gridPath, 'selectedItem'], [rowIndex, column]); + return ['td', { + class: { + invalid: title + }, + props: { + title: (title ? title : '') + }, + on: { + click: evt => { + if (u.equals(gridState.selectedItem, [rowIndex, column])) + return; + ev.one(r, 'render', () => { + if (evt.target.firstChild && evt.target.firstChild.focus) + evt.target.firstChild.focus(); + }); + r.set([gridPath, 'selectedItem'], [rowIndex, column]); + } }}, content]; })] @@ -75,36 +86,39 @@ export function tfoot(gridPath, colspan, newItem, csvColumns) { return ['tfoot', ['tr', ['td', { - colSpan: colspan}, + props: { + colSpan: colspan + }}, ['div', ['button', { - 'ev-click': () => r.change(itemsPath, u.append(newItem))}, + on: { + click: () => r.change(itemsPath, u.append(newItem)) + }}, ['span.fa.fa-plus'], ' Add' ], ['span.spacer'], - ['button', { - 'ev-click': () => r.set(itemsPath, [])}, - ['span.fa.fa-trash-o'], - ' Remove all' - ], (!csvColumns ? [] : [ ['button', { - 'ev-click': () => { - const items = importCsv(csvColumns, newItem); - if (!items) - return; - r.change(itemsPath, state => state.concat(items)); + on: { + click: () => { + const items = importCsv(csvColumns, newItem); + if (!items) + return; + r.change(itemsPath, state => state.concat(items)); + } }}, ['span.fa.fa-download'], - ' Import from CSV' + ' CSV Import' ], ['button', { - 'ev-click': () => exportCsv(r.get(itemsPath), csvColumns)}, + on: { + click: () => exportCsv(r.get(itemsPath), csvColumns) + }}, ['span.fa.fa-upload'], - ' Export to CSV' + ' CSV Export' ] ] ) @@ -126,41 +140,58 @@ export function createStringCsvColumns(...columns) { } +export function createBooleanCsvColumns(...columns) { + return u.pipe( + u.map(i => [i, { + toString: u.pipe(u.get(i), x => x ? 'true' : 'false'), + toItem: (x, acc) => u.set(i, x == 'true', acc) + }]), + u.fromPairs + )(columns); +} + + export function deleteColumn(gridPath, showUpDown, onDeleteCb) { const itemsPath = [gridPath, 'items']; return (i, index) => [ (!showUpDown ? [] : [ ['button', { - 'ev-click': () => { - const gridState = r.get(gridPath); - if (index < 1) - return; - r.change(itemsPath, u.pipe( - u.set(index, gridState.items[index-1]), - u.set(index-1, i) - )); + on: { + click: () => { + const gridState = r.get(gridPath); + if (index < 1) + return; + r.change(itemsPath, u.pipe( + u.set(index, gridState.items[index-1]), + u.set(index-1, i) + )); + } }}, ['span.fa.fa-arrow-up'] ], ['button', { - 'ev-click': () => { - const gridState = r.get(gridPath); - if (index > gridState.items.length - 2) - return; - r.change(itemsPath, u.pipe( - u.set(index, gridState.items[index+1]), - u.set(index+1, i) - )); + on: { + click: () => { + const gridState = r.get(gridPath); + if (index > gridState.items.length - 2) + return; + r.change(itemsPath, u.pipe( + u.set(index, gridState.items[index+1]), + u.set(index+1, i) + )); + } }}, ['span.fa.fa-arrow-down'] ] ]), ['button', { - 'ev-click': () => { - const item = r.get(itemsPath, index); - r.change(itemsPath, u.omit(index)); - if (onDeleteCb) - onDeleteCb(item); + on: { + click: () => { + const item = r.get(itemsPath, index); + r.change(itemsPath, u.omit(index)); + if (onDeleteCb) + onDeleteCb(item); + } }}, ['span.fa.fa-minus'] ] @@ -172,11 +203,17 @@ export function checkboxColumn(gridPath, column) { return (i, index) => { const columnPath = [gridPath, 'items', index, column]; return ['div', { - style: 'text-align: center'}, + props: { + style: 'text-align: center' + }}, ['input', { - type: 'checkbox', - 'ev-change': (evt) => r.set(columnPath, evt.target.checked), - checked: r.get(columnPath)} + props: { + type: 'checkbox', + checked: r.get(columnPath) + }, + on: { + change: evt => r.set(columnPath, evt.target.checked) + }} ] ]; }; @@ -191,9 +228,16 @@ export function selectColumn(gridPath, column, values) { i => u.equals(selectedValue, (u.isArray(i) ? i[0] : i))) === undefined; const allValues = (invalid ? u.append(selectedValue, values) : values); return ['select' + (invalid ? '.invalid' : ''), { - title: (invalid ? 'invalid value' : ''), - style: 'width: 100%', - 'ev-change': (evt) => r.set(columnPath, evt.target.value)}, + class: { + invalid: invalid + }, + props: { + title: (invalid ? 'invalid value' : ''), + style: 'width: 100%' + }, + on: { + change: evt => r.set(columnPath, evt.target.value) + }}, allValues.map(i => { const value = (u.isArray(i) ? i[0] : i); const label = (u.isArray(i) ? i[1] : i); diff --git a/src_js/opcut/validators.js b/src_js/opcut/validators.js new file mode 100644 index 0000000..eb49fac --- /dev/null +++ b/src_js/opcut/validators.js @@ -0,0 +1,56 @@ +import * as u from 'opcut/util'; + + +export function notEmptyValidator(value) { + if (!value) + return 'invalid value'; +} + + +export function floatValidator(value) { + const floatValue = u.strictParseFloat(value); + if (!Number.isFinite(floatValue)) + return 'not valid number'; +} + + +export function integerValidator(value) { + const intValue = u.strictParseInt(value); + if (!Number.isFinite(intValue)) + return 'not valid number'; +} + + +export function tcpPortValidator(value) { + const intValue = u.strictParseInt(value); + if (!Number.isFinite(intValue) || intValue < 0 || intValue > 0xFFFF) + return 'not valid TCP port'; +} + + +export function createChainValidator(...validators) { + return value => { + for (let validator of validators) { + let result = validator(value); + if (result) + return result; + } + }; +} + + +export function createUniqueValidator() { + const values = new Set(); + return value => { + if (values.has(value)) + return 'duplicate value'; + values.add(value); + }; +} + + +export function dimensionValidator(value) { + const floatValue = u.strictParseFloat(value); + if (!Number.isFinite(floatValue) || floatValue <= 0) + return 'not valid dimension'; +} diff --git a/src_js/opcut/vt.js b/src_js/opcut/vt.js index c13d35a..f942e4b 100644 --- a/src_js/opcut/vt.js +++ b/src_js/opcut/vt.js @@ -1,6 +1,9 @@ import r from 'opcut/renderer'; - +import * as u from 'opcut/util'; +import * as grid from 'opcut/grid'; import * as common from 'opcut/common'; +import * as states from 'opcut/states'; +import * as validators from 'opcut/validators'; export function main() { @@ -13,6 +16,11 @@ export function main() { function leftPanel() { + const methodPath = ['form', 'method']; + const cutWidthPath = ['form', 'cut_width']; + const cutWidthTitle = (cutWidth => + (Number.isFinite(cutWidth) && cutWidth >= 0) ? '' : 'not valid cut width' + )(u.strictParseFloat(r.get(cutWidthPath))); return ['div.left-panel', ['div.header', ['div.title', 'OPCUT'], @@ -30,7 +38,10 @@ function leftPanel() { ['option', { props: { value: method, - selected: r.get('form', 'method') == method + selected: r.get(methodPath) == method + }, + on: { + change: evt => r.set(methodPath, evt.target.value) }}, method ]) @@ -39,53 +50,87 @@ function leftPanel() { ['div.group', ['label', 'Cut width'], ['input', { + class: { + invalid: cutWidthTitle + }, props: { - value: r.get('form', 'cut_width') + value: r.get(cutWidthPath), + title: cutWidthTitle }, on: { - change: evt => r.set(['form', 'cut_width'], evt.target.value) + change: evt => r.set(cutWidthPath, evt.target.value) }} ] ], - ['div.list', - ['label', 'Panels'], - ['div.content', - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'] - ], - ['button.add', { - on: { - click: common.addPanel - }}, - ['span.fa.fa-plus'], - ' Add panel' - ] - ], - ['div.list', - ['label', 'Items'], - ['div.content', - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'], - 'sdfsdfssfd', ['br'] - ], - ['button.add', { - on: { - click: common.addItem - }}, - ['span.fa.fa-plus'], - ' Add item' - ] + ['div.content', + leftPanelPanels(), + leftPanelItems() ], - ['button.submit', { + ['button.calculate', { on: { - click: common.submit + click: common.calculate }}, 'Calculate' ] ]; } + + +function leftPanelPanels() { + const panelsPath = ['form', 'panels']; + const deleteColumn = grid.deleteColumn(panelsPath); + const nameValidator = validators.createChainValidator( + validators.notEmptyValidator, + validators.createUniqueValidator()); + const widthValidator = validators.dimensionValidator; + const heightValidator = validators.dimensionValidator; + const csvColumns = grid.createStringCsvColumns('name', 'width', 'height'); + return ['div', + ['table.grid', + ['thead', + ['tr', + ['th', 'Panel name'], + ['th.fixed', 'Width'], + ['th.fixed', 'Height'], + ['th.fixed'] + ] + ], + grid.tbody(panelsPath, + ['name', 'width', 'height', deleteColumn], + [nameValidator, widthValidator, heightValidator]), + grid.tfoot(panelsPath, 4, states.panelsItem, csvColumns) + ] + ]; +} + + +function leftPanelItems() { + const itemsPath = ['form', 'items']; + const rotateColumn = grid.checkboxColumn(itemsPath, 'can_rotate'); + const deleteColumn = grid.deleteColumn(itemsPath); + const nameValidator = validators.createChainValidator( + validators.notEmptyValidator, + validators.createUniqueValidator()); + const widthValidator = validators.dimensionValidator; + const heightValidator = validators.dimensionValidator; + const csvColumns = u.merge( + grid.createStringCsvColumns('name', 'width', 'height'), + grid.createBooleanCsvColumns('can_rotate')); + return ['div', + ['table.grid', + ['thead', + ['tr', + ['th', 'Item name'], + ['th.fixed', 'Width'], + ['th.fixed', 'Height'], + ['th.fixed', 'Rotate'], + ['th.fixed'] + ] + ], + grid.tbody(itemsPath, + ['name', 'width', 'height', rotateColumn, deleteColumn], + [nameValidator, widthValidator, heightValidator]), + grid.tfoot(itemsPath, 5, states.itemsItem, csvColumns) + ] + ]; +} diff --git a/src_web/style/grid.scss b/src_web/style/grid.scss new file mode 100644 index 0000000..b1e9bf8 --- /dev/null +++ b/src_web/style/grid.scss @@ -0,0 +1,53 @@ +@import './color'; + + +table.grid { + table-layout: fixed; + border-spacing: 0px; + border: 1px solid $color-grey-400; + + td:not(:last-child) { + border-right: 1px solid $color-grey-300; + } + + thead tr, tfoot tr { + background-color: $color-grey-200; + } + + td, th { + padding: 4px; + overflow: hidden; + text-overflow: ellipsis; + } + + tbody td { + background-color: white; + } + + tbody td, tfoot td { + border-top: 1px solid $color-grey-400; + } + + input { + width: 100%; + } + + input[type=text] { + position: relative; + border: 1px; + font-size: 10pt; + font-family: 'Roboto'; + } + + tfoot td > div { + display: flex; + + & > .spacer { + flex-grow: 1; + } + } + + .invalid { + background-color: rgba(red, 0.2); + } +} diff --git a/src_web/style/main.scss b/src_web/style/main.scss index 6b848b4..612c2a7 100644 --- a/src_web/style/main.scss +++ b/src_web/style/main.scss @@ -1,8 +1,11 @@ @import '~normalize.css/normalize'; +@import '~izitoast/dist/css/iziToast.min'; @import './fonts/fontawesome'; @import './fonts/roboto'; @import './color'; +@import './shadow'; +@import './grid'; html, body { @@ -20,19 +23,12 @@ html, body { .left-panel { - width: 300px; + @include shadow-4dp(); + width: 400px; display: flex; flex-direction: column; background-color: $color-grey-100; - .group { - flex-shrink: 0; - display: flex; - flex-direction: column; - margin: 10px; - margin-bottom: 0px; - } - .header { flex-shrink: 0; margin: 10px; @@ -60,33 +56,49 @@ html, body { } } - .list { + .group { + flex-shrink: 0; + display: flex; + flex-direction: column; + margin: 10px; + margin-bottom: 0px; + } + + .content { flex-grow: 1; display: flex; flex-direction: column; margin: 10px; margin-bottom: 0px; + align-items: stretch; + overflow: auto; - & > * { - flex-shrink: 0; - } + table.grid { + width: 100%; - .content { - flex-grow: 1; - flex-shrink: 1; - overflow: auto; + .fixed { + width: 50px + } + + tbody td:last-child { + text-align: center; + } } - .add { - align-self: flex-end; + & > *:not(:last-child) { + margin-bottom: 10px; } } - .submit { + .calculate { flex-shrink: 0; margin: 10px; padding: 10px; } + + .invalid { + background-color: rgba(red, 0.2); + } } diff --git a/src_web/style/shadow.scss b/src_web/style/shadow.scss new file mode 100644 index 0000000..8bcb900 --- /dev/null +++ b/src_web/style/shadow.scss @@ -0,0 +1,23 @@ + +$shadow-key-umbra-opacity: 0.2 !default; +$shadow-key-penumbra-opacity: 0.14 !default; +$shadow-ambient-shadow-opacity: 0.12 !default; + + +@mixin shadow-1dp() { + box-shadow: 0 1px 1px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity), + 0 2px 1px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity), + 0 1px 2px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity); +} + +@mixin shadow-2dp() { + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity), + 0 3px 1px -2px rgba(0, 0, 0, $shadow-key-umbra-opacity), + 0 1px 5px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity); +} + +@mixin shadow-4dp() { + box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $shadow-key-penumbra-opacity), + 0 1px 10px 0 rgba(0, 0, 0, $shadow-ambient-shadow-opacity), + 0 2px 4px -1px rgba(0, 0, 0, $shadow-key-umbra-opacity); +} diff --git a/yarn.lock b/yarn.lock index 6434c65..8861072 100644 --- a/yarn.lock +++ b/yarn.lock @@ -127,11 +127,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3: - version "1.1.1" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" - -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -228,13 +224,7 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^2.1.2: - version "2.3.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" - dependencies: - lodash "^4.14.0" - -async@^2.1.5: +async@^2.1.2, async@^2.1.5: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -271,15 +261,7 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" - dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, 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: @@ -291,7 +273,7 @@ babylon@7.0.0-beta.19: version "7.0.0-beta.19" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" -balanced-match@^0.4.1, balanced-match@^0.4.2: +balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -368,13 +350,6 @@ boom@2.x.x: dependencies: hoek "2.x.x" -brace-expansion@^1.0.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -485,10 +460,6 @@ buffer-from@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" -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.2: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -622,7 +593,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -761,13 +732,7 @@ collection-visit@^1.0.0: map-visit "^1.0.0" object-visit "^1.0.0" -color-convert@^1.3.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" - dependencies: - color-name "^1.1.1" - -color-convert@^1.9.0: +color-convert@^1.3.0, color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: @@ -809,14 +774,10 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.11.0: +commander@2.11.0, commander@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" -commander@^2.9.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -1103,7 +1064,7 @@ dateformat@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.2.tgz#9a4df4bff158ac2f34bc637abdb15471607e1659" -debug@2.6.9, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -1115,12 +1076,6 @@ debug@3.1.0, debug@^3.1.0: dependencies: ms "2.0.0" -debug@^2.2.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" - dependencies: - ms "0.7.3" - 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" @@ -1485,10 +1440,6 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -1912,7 +1863,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@7.1.2, glob@^7.1.2: +glob@7.1.2, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -1933,17 +1884,6 @@ glob@^6.0.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - global@^4.2.1, global@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -2306,11 +2246,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" - -is-buffer@^1.1.5: +is-buffer@^1.0.2, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2516,18 +2452,10 @@ jodid25519@^1.0.0: dependencies: jsbn "~0.1.0" -js-base64@^2.1.8: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" - -js-base64@^2.1.9: +js-base64@^2.1.8, js-base64@^2.1.9: version "2.1.9" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce" -js-tokens@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" - js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -2539,14 +2467,7 @@ js-yaml@3.9.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.5.2: - version "3.8.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" - dependencies: - argparse "^1.0.7" - esprima "^3.1.1" - -js-yaml@^3.9.1: +js-yaml@^3.5.2, js-yaml@^3.9.1: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: @@ -2599,14 +2520,10 @@ json-formatter-js@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.2.0.tgz#1ed987223ef2f1d945304597faae78b580a8212b" -json-loader@0.5.7: +json-loader@0.5.7, json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" -json-loader@^0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" - 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" @@ -2656,13 +2573,7 @@ kind-of@^2.0.1: dependencies: is-buffer "^1.0.2" -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" - dependencies: - is-buffer "^1.0.2" - -kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^3.2.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0, kind-of@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -2854,11 +2765,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.17.4, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -2885,14 +2792,7 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" -lru-cache@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" - dependencies: - pseudomap "^1.0.1" - yallist "^2.0.0" - -lru-cache@^4.1.1: +lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" dependencies: @@ -3049,18 +2949,12 @@ 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 || 3", minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.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@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -3119,14 +3013,10 @@ mocha@5.0.4: mkdirp "0.5.1" supports-color "4.4.0" -moment@2.20.1: +moment@2.20.1, moment@2.x: version "2.20.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd" -moment@2.x: - version "2.22.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.0.tgz#7921ade01017dd45186e7fee5f424f0b8663a730" - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -3138,10 +3028,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3867,10 +3753,6 @@ prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" -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-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" @@ -3902,7 +3784,7 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" -pseudomap@^1.0.1, pseudomap@^1.0.2: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -4042,7 +3924,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.4, readable-stream@^2.1.5, readable-stream@^2.2.2: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -4054,18 +3936,6 @@ read-pkg@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6: - version "2.2.9" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" - 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 "~1.0.0" - 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" @@ -4147,18 +4017,18 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2, request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" +request@2, request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" - caseless "~0.12.0" + 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 "~4.2.1" + har-validator "~2.0.6" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" @@ -4166,26 +4036,24 @@ request@2, request@2.81.0: 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" + qs "~6.3.0" stringstream "~0.0.4" tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" + tunnel-agent "~0.4.1" uuid "^3.0.0" -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@2.81.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.11.0" + 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 "~2.0.6" + har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" @@ -4193,10 +4061,12 @@ request@~2.79.0: json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" - qs "~6.3.0" + 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.4.1" + tunnel-agent "^0.6.0" uuid "^3.0.0" require-directory@^2.1.1: @@ -4278,13 +4148,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - dependencies: - glob "^7.0.5" - -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, 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: @@ -4316,14 +4180,10 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" -safe-buffer@5.1.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -4563,7 +4423,7 @@ source-map-url@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9" -source-map@0.5.x: +source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -4579,10 +4439,6 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -4639,11 +4495,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2", statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -4708,12 +4560,6 @@ string_decoder@^0.10.25: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string_decoder@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" - dependencies: - buffer-shims "~1.0.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4767,7 +4613,7 @@ style-loader@0.20.1: loader-utils "^1.1.0" schema-utils "^0.4.3" -supports-color@4.4.0: +supports-color@4.4.0, supports-color@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: @@ -4783,12 +4629,6 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - dependencies: - has-flag "^2.0.0" - supports-color@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" @@ -4822,11 +4662,7 @@ taffydb@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" -tapable@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" - -tapable@^0.2.7: +tapable@^0.2.3, tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -5058,6 +4894,12 @@ upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +uri-js@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" + dependencies: + punycode "^2.1.0" + uri-js@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" @@ -5324,7 +5166,7 @@ y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" -yallist@^2.0.0, yallist@^2.1.2: +yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -- cgit v1.2.3-70-g09d2