From 0322ed73eb2f6024ff4ca24964869ae4dd4fa518 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 11 Feb 2020 14:57:44 +0300 Subject: [PATCH 01/23] Lets try to build --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1ac59fb6..f856c75e 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "parcel": "parcel ./src/index.html --public-url / --no-autoinstall -- watch", "parcel-build": "parcel build ./src/index.html --no-source-maps --no-autoinstall", "server": "moduleserve ./ --port 8000", - "predeploy": "parcel build ./src/index.html --no-source-maps --no-autoinstall", + "predeploy": "yarn build && parcel build ./src/index.html --no-source-maps --no-autoinstall", "deploy": "gh-pages -d dist", "test": "echo \"Error: no test specified\" && exit 1" }, From 08a2f9b058f1f8c0afd2e3302364b263892f97fc Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 11:51:11 +0300 Subject: [PATCH 02/23] Removes obsolete code --- src/_obsolete/LimitedDomainCdf.re | 33 ---------- src/_obsolete/OldFormWithTable.re | 50 ---------------- src/_obsolete/Test1.re | 56 ----------------- src/_obsolete/Test2.re | 60 ------------------- src/_obsolete/TimeLimitedDomainCdf.re | 38 ------------ .../charts/GenericDistributionChart.re | 6 +- src/core/GenericDistribution.re | 1 + src/core/MixedShapeBuilder.re | 6 ++ 8 files changed, 12 insertions(+), 238 deletions(-) delete mode 100644 src/_obsolete/LimitedDomainCdf.re delete mode 100644 src/_obsolete/OldFormWithTable.re delete mode 100644 src/_obsolete/Test1.re delete mode 100644 src/_obsolete/Test2.re delete mode 100644 src/_obsolete/TimeLimitedDomainCdf.re diff --git a/src/_obsolete/LimitedDomainCdf.re b/src/_obsolete/LimitedDomainCdf.re deleted file mode 100644 index 126cf5d1..00000000 --- a/src/_obsolete/LimitedDomainCdf.re +++ /dev/null @@ -1,33 +0,0 @@ -// type t = { - // distribution: Types.ContinuousDistribution.t, - // domainMaxX: float, - // }; - // let make = (~distribution, ~domainMaxX): t => {distribution, domainMaxX}; - // let fromCdf = - // ( - // cdf: Types.ContinuousDistribution.t, - // domainMaxX: float, - // probabilityAtMaxX: float, - // ) => { - // let distribution: Types.ContinuousDistribution.t = { - // xs: cdf.xs, - // ys: cdf.ys |> E.A.fmap(r => r *. probabilityAtMaxX), - // }; - // {distribution, domainMaxX}; - // }; - // let _lastElement = (a: array('a)) => - // switch (Belt.Array.size(a)) { - // | 0 => None - // | n => Belt.Array.get(a, n) - // }; - // let probabilityBeforeDomainMax = (t: t) => _lastElement(t.distribution.ys); - // let domainMaxX = (t: t) => t.domainMaxX /* CdfLibrary.Distribution.findX(yPoint, t.distribution)*/; - // let probabilityDistribution = (t: t) => - // t.distribution |> CdfLibrary.Distribution.toPdf; - // let probability = (t: t, xPoint: float) => - // CdfLibrary.Distribution.findY(xPoint, probabilityDistribution(t)); - // let probabilityInverse = (t: t, yPoint: float) => - // CdfLibrary.Distribution.findX(yPoint, probabilityDistribution(t)); - // let cumulativeProbability = (t: t, xPoint: float) => - // CdfLibrary.Distribution.findY(xPoint, t.distribution); - /* let cumulativeProbabilityInverse = (t: t, yPoint: float) =*/ \ No newline at end of file diff --git a/src/_obsolete/OldFormWithTable.re b/src/_obsolete/OldFormWithTable.re deleted file mode 100644 index 2f767614..00000000 --- a/src/_obsolete/OldFormWithTable.re +++ /dev/null @@ -1,50 +0,0 @@ -// open EAFunds_Data; - // let handleChange = (handleChange, event) => - // handleChange(ReactEvent.Form.target(event)##value); - // [@react.component] - // let make = () => { - // let (year, setYear) = React.useState(() => 2021.); - // <> - //

{"EA Funds Forecasting Model 0.1" |> ReasonReact.string}

- // Js.Float.toString} - // onChange={handleChange(r => - // switch (Js.Float.fromString(r)) { - // | r when r >= 2020.0 && r <= 2050.0 => setYear(_ => r) - // | _ => () - // } - // )} - // /> - // - // - // - // - // - // - // - // - // - // {funds - // |> Belt.Array.map(_, r => - // - // - // - // - // - // ) - // |> ReasonReact.array} - // - //
{"Fund Name" |> ReasonReact.string} {"Donations" |> ReasonReact.string} {"Payouts" |> ReasonReact.string}
- // {r.name |> ReasonReact.string} - // - // {EAFunds_Model.go(r.group, year, DONATIONS) - // |> Model.InputTypes.to_string - // |> ReasonReact.string} - // - // {EAFunds_Model.go(r.group, year, PAYOUTS) - // |> Model.InputTypes.to_string - // |> ReasonReact.string} - //
- // ; - /* }*/ \ No newline at end of file diff --git a/src/_obsolete/Test1.re b/src/_obsolete/Test1.re deleted file mode 100644 index 58091049..00000000 --- a/src/_obsolete/Test1.re +++ /dev/null @@ -1,56 +0,0 @@ -type senate = - | DEMOCRAT_VICTORY; - -type house = - | DEMOCRAT_VICTORY; - -type statement = - | Senate(senate) - | House(house); - -type outcome = - | Bool(bool) - | Option(string); - -type fullStatement = { - statement, - outcome, -}; - -type jointStatement = { - statements: array(fullStatement), - probability: option(float), -}; - -let foo = (joint: jointStatement) => { - [| - { - statements: [| - {statement: Senate(DEMOCRAT_VICTORY), outcome: Bool(true)}, - {statement: House(DEMOCRAT_VICTORY), outcome: Bool(true)}, - |], - probability: Some(0.2), - }, - { - statements: [| - {statement: Senate(DEMOCRAT_VICTORY), outcome: Bool(true)}, - {statement: House(DEMOCRAT_VICTORY), outcome: Bool(false)}, - |], - probability: Some(0.2), - }, - { - statements: [| - {statement: Senate(DEMOCRAT_VICTORY), outcome: Bool(false)}, - {statement: House(DEMOCRAT_VICTORY), outcome: Bool(true)}, - |], - probability: Some(0.5), - }, - { - statements: [| - {statement: Senate(DEMOCRAT_VICTORY), outcome: Bool(false)}, - {statement: House(DEMOCRAT_VICTORY), outcome: Bool(false)}, - |], - probability: Some(0.1), - }, - |]; -}; \ No newline at end of file diff --git a/src/_obsolete/Test2.re b/src/_obsolete/Test2.re deleted file mode 100644 index 9303a7e8..00000000 --- a/src/_obsolete/Test2.re +++ /dev/null @@ -1,60 +0,0 @@ -module Math = { - let normal = (mean: float, std: float) => - Js.Float.( - { - let nMean = toString(mean); - let nStd = toString(std); - {j|normal($(nMean), $(nStd))|j}; - } - ); - - let divide = (str1: string, str2: string) => {j|$(str1)/$(str2)|j}; -}; - -type param = - | SHARE_PRICE - | SHARES_OUTSTANDING - | MARKET_CAP; - -type company = { - name: string, - currentPrice: option(float), - marketCap: option(float), -}; - -type otherSettings = {currentYear: int}; - -let sharesOutstanding = (price, marketCap) => - switch (price, marketCap) { - | (Some(price), Some(marketCap)) => - Some(GuesstimatorDist.divide(marketCap, price)) - | _ => None - }; - -let rec run = - ( - company: company, - year: int, - param: param, - otherSettings: otherSettings, - ) => { - switch (param, year, company.currentPrice, company.marketCap) { - | (SHARE_PRICE, year, Some(price), _) when year > 2019 && year < 2030 => - let diffYears = year - otherSettings.currentYear; - let diffPerYear = 0.1; - Some( - GuesstimatorDist.normal(price, float_of_int(diffYears) *. diffPerYear), - ); - | (MARKET_CAP, year, _, Some(price)) when year > 2019 && year < 2030 => - let diffYears = year - otherSettings.currentYear; - let diffPerYear = 0.1; - Some( - GuesstimatorDist.normal(price, float_of_int(diffYears) *. diffPerYear), - ); - | (SHARES_OUTSTANDING, year, _, _) when year > 2019 && year < 2030 => - let price = run(company, year, SHARE_PRICE, otherSettings); - let marketCap = run(company, year, MARKET_CAP, otherSettings); - sharesOutstanding(price, marketCap); - | _ => None - }; -}; \ No newline at end of file diff --git a/src/_obsolete/TimeLimitedDomainCdf.re b/src/_obsolete/TimeLimitedDomainCdf.re deleted file mode 100644 index 9c4c3b67..00000000 --- a/src/_obsolete/TimeLimitedDomainCdf.re +++ /dev/null @@ -1,38 +0,0 @@ -// open TimeTypes; - // type t = { - // timeVector, - // limitedDomainCdf: LimitedDomainCdf.t, - // }; - // let make = - // ( - // ~timeVector: timeVector, - // ~distribution: Types.ContinuousDistribution.t, - // ~probabilityAtMaxX: float, - // ~maxX: [ | `time(MomentRe.Moment.t) | `x(float)], - // ) - // : t => { - // let domainMaxX = - // switch (maxX) { - // | `time(m) => TimePoint.fromMoment(timeVector, m) - // | `x(r) => r - // }; - // let limitedDomainCdf = - // LimitedDomainCdf.fromCdf(distribution, domainMaxX, probabilityAtMaxX); - // {timeVector, limitedDomainCdf}; - // }; - // let probabilityBeforeDomainMax = (t: t) => - // LimitedDomainCdf.probabilityBeforeDomainMax(t.limitedDomainCdf); - // let domainMaxX = (t: t) => - // LimitedDomainCdf.probabilityBeforeDomainMax(t.limitedDomainCdf) /* |> (r => RelativeTimePoint.toTime(t.timeVector, XValue(r)))*/; - // let probability = (t: t, m: MomentRe.Moment.t) => { - // RelativeTimePoint.toXValue(t.timeVector, Time(m)) - // |> LimitedDomainCdf.probability(t.limitedDomainCdf); - // }; - // let probabilityInverse = (t: t, y: float) => - // LimitedDomainCdf.probabilityInverse(t.limitedDomainCdf, y) - // |> (r => RelativeTimePoint.toTime(t.timeVector, XValue(r))); - // let cumulativeProbability = (t: t, m: MomentRe.Moment.t) => - // RelativeTimePoint.toXValue(t.timeVector, Time(m)) - // |> LimitedDomainCdf.cumulativeProbability(t.limitedDomainCdf); - // let cumulativeProbabilityInverse = (t: t, y: float) => - /* LimitedDomainCdf.cumulativeProbabilityInverse(t.limitedDomainCdf, y*/ \ No newline at end of file diff --git a/src/components/charts/GenericDistributionChart.re b/src/components/charts/GenericDistributionChart.re index c7d2fa85..75d3f69f 100644 --- a/src/components/charts/GenericDistributionChart.re +++ b/src/components/charts/GenericDistributionChart.re @@ -60,10 +60,14 @@ let make = (~dist) => { }), ), }) => + Js.log2("n", n); + Js.log2("d", d); + Js.log2("f", f); + Js.log2("dist", dist);
Shape.Continuous.toPdf} /> {d |> Shape.Discrete.scaleYToTotal(f) |> Shape.Discrete.render} -
+ ; | _ =>
}; }; \ No newline at end of file diff --git a/src/core/GenericDistribution.re b/src/core/GenericDistribution.re index 515382e6..cbc6fbfd 100644 --- a/src/core/GenericDistribution.re +++ b/src/core/GenericDistribution.re @@ -1,4 +1,5 @@ open DistributionTypes; + let make = ( ~generationSource, diff --git a/src/core/MixedShapeBuilder.re b/src/core/MixedShapeBuilder.re index 9ed0ca0a..af2e7e8b 100644 --- a/src/core/MixedShapeBuilder.re +++ b/src/core/MixedShapeBuilder.re @@ -1,11 +1,13 @@ type assumption = | ADDS_TO_1 | ADDS_TO_CORRECT_PROBABILITY; + type assumptions = { continuous: assumption, discrete: assumption, discreteProbabilityMass: option(float), }; + let build = (~continuous, ~discrete, ~assumptions) => switch (assumptions) { | { @@ -21,6 +23,7 @@ let build = (~continuous, ~discrete, ~assumptions) => ~discreteProbabilityMassFraction=r, ), ) + | { continuous: ADDS_TO_1, discrete: ADDS_TO_1, @@ -33,18 +36,21 @@ let build = (~continuous, ~discrete, ~assumptions) => ~discreteProbabilityMassFraction=r, ), ) + | { continuous: ADDS_TO_1, discrete: ADDS_TO_1, discreteProbabilityMass: None, } => None + | { continuous: ADDS_TO_CORRECT_PROBABILITY, discrete: ADDS_TO_1, discreteProbabilityMass: None, } => None + | { continuous: ADDS_TO_1, discrete: ADDS_TO_CORRECT_PROBABILITY, From c7b862ec57da96d6609acada173568a3cae0dd56 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 11:56:24 +0300 Subject: [PATCH 03/23] Removes obsolete code --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 72fa0d42..8a82efaa 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ build yarn-error.log *.bs.js # Local Netlify folder -.netlify \ No newline at end of file +.netlify +.idea \ No newline at end of file From 5c9f840e142579c3b1ebc5fbdb2bc8008a976bfe Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 12:31:47 +0300 Subject: [PATCH 04/23] Fixes legacy JS --- src/components/charts/cdfChartd3.js | 96 ++++++++++++++--------------- 1 file changed, 45 insertions(+), 51 deletions(-) diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index 3b14cc28..b2c82bd0 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -2,7 +2,7 @@ import * as d3 from 'd3'; function chart() { // Id for event handlings. - var attrs = { + const attrs = { id: 'ID' + Math.floor(Math.random() * 1000000), svgWidth: 400, svgHeight: 400, @@ -22,40 +22,40 @@ function chart() { verticalLine: 110, showVerticalLine: true, data: null, - onHover: (e) => {}, + onHover: (e) => { + }, }; - var main = function main() { - // Drawing containers. - var container = d3.select(attrs.container); + function main() { + const container = d3.select(attrs.container); if (container.node() === null) { return; } - var containerRect = container.node().getBoundingClientRect(); + const containerRect = container.node().getBoundingClientRect(); if (containerRect.width > 0) { attrs.svgWidth = containerRect.width; } // Calculated properties. // id for event handlings. - var calc = {}; + const calc = {}; calc.id = 'ID' + Math.floor(Math.random() * 1000000); calc.chartLeftMargin = attrs.marginLeft; calc.chartTopMargin = attrs.marginTop; calc.chartWidth = attrs.svgWidth - attrs.marginRight - attrs.marginLeft; calc.chartHeight = attrs.svgHeight - attrs.marginBottom - attrs.marginTop; - var areaColor = d3.scaleOrdinal().range(attrs.areaColors); + const areaColor = d3.scaleOrdinal().range(attrs.areaColors); - var dataPoints = [getDatapoints('primary')]; + const dataPoints = [getDatapoints('primary')]; // Scales. - var xScale; + let xScale; - var xMin = d3.min(attrs.data.primary.xs); - var xMax = d3.max(attrs.data.primary.xs); + const xMin = d3.min(attrs.data.primary.xs); + const xMax = d3.max(attrs.data.primary.xs); if (attrs.scale === 'linear') { xScale = d3.scaleLinear() @@ -67,25 +67,19 @@ function chart() { } else { xScale = d3.scaleLog() .base(attrs.logBase) - .domain([ - attrs.minX, - attrs.maxX, - ]) + .domain([attrs.minX, attrs.maxX]) .range([0, calc.chartWidth]); } - var yMin = d3.min(attrs.data.primary.ys); - var yMax = d3.max(attrs.data.primary.ys); + const yMin = d3.min(attrs.data.primary.ys); + const yMax = d3.max(attrs.data.primary.ys); - var yScale = d3.scaleLinear() - .domain([ - yMin, - yMax, - ]) + const yScale = d3.scaleLinear() + .domain([yMin, yMax]) .range([calc.chartHeight, 0]); // Axis generator. - var xAxis = d3.axisBottom(xScale) + const xAxis = d3.axisBottom(xScale) .ticks(3) .tickFormat(d => { if (Math.abs(d) < 1) { @@ -94,14 +88,14 @@ function chart() { // Condition which identifies years; 2019, 2020, 2021. return d3.format(".0")(d); } else { - var prefix = d3.formatPrefix(".0", d); - var output = prefix(d); + const prefix = d3.formatPrefix(".0", d); + const output = prefix(d); return output.replace("G", "B"); } }); // Line generator. - var line = d3.line() + const line = d3.line() .x(function (d, i) { return xScale(d.x); }) @@ -109,7 +103,7 @@ function chart() { return yScale(d.y); }); - var area = d3.area() + const area = d3.area() .x(function (d, i) { return xScale(d.x); }) @@ -119,14 +113,14 @@ function chart() { .y0(calc.chartHeight); // Add svg. - var svg = container + const svg = container .patternify({ tag: 'svg', selector: 'svg-chart-container' }) .attr('width', "100%") .attr('height', attrs.svgHeight) .attr('pointer-events', 'none'); // Add container g element. - var chart = svg + const chart = svg .patternify({ tag: 'g', selector: 'chart' }) .attr( 'transform', @@ -147,7 +141,7 @@ function chart() { }) .attr('d', area) .attr('fill', (d, i) => areaColor(i)) - .attr('opacity', (d, i) => i === 0 ? 0.7 : 1); + .attr('opacity', (d, i) => i === 0 ? 0.7 : 0.5); // Draw line. if (attrs.showDistributionLines) { @@ -176,7 +170,7 @@ function chart() { .attr('stroke', 'steelblue'); } - var hoverLine = chart.patternify({ tag: 'line', selector: 'hover-line' }) + const hoverLine = chart.patternify({ tag: 'line', selector: 'hover-line' }) .attr('x1', 0) .attr('x2', 0) .attr('y1', 0) @@ -197,13 +191,13 @@ function chart() { .on('mouseout', mouseout); function mouseover() { - var mouse = d3.mouse(this); + const mouse = d3.mouse(this); hoverLine.attr('opacity', 1) .attr('x1', mouse[0]) .attr('x2', mouse[0]); - var range = [ + const range = [ xScale(dataPoints[dataPoints.length - 1][0].x), xScale( dataPoints @@ -212,7 +206,7 @@ function chart() { ), ]; - var xValue = xScale.invert(mouse[0]).toFixed(2); + const xValue = xScale.invert(mouse[0]).toFixed(2); if (mouse[0] > range[0] && mouse[0] < range[1]) { attrs.onHover(xValue); @@ -230,9 +224,9 @@ function chart() { * @returns {[]} */ function getDatapoints(key) { - var dt = []; - var data = attrs.data[key]; - var len = data.xs.length; + const dt = []; + const data = attrs.data[key]; + const len = data.xs.length; for (let i = 0; i < len; i++) { dt.push({ @@ -243,16 +237,16 @@ function chart() { return dt; } - }; + } d3.selection.prototype.patternify = function patternify(params) { - var container = this; - var selector = params.selector; - var elementTag = params.tag; - var data = params.data || [selector]; + const container = this; + const selector = params.selector; + const elementTag = params.tag; + const data = params.data || [selector]; // Pattern in action. - var selection = container.selectAll('.' + selector).data(data, (d, i) => { + const selection = container.selectAll('.' + selector).data(data, (d, i) => { if (typeof d === 'object') { if (d.id) { return d.id; @@ -262,14 +256,14 @@ function chart() { }); selection.exit().remove(); - selection = selection.enter().append(elementTag).merge(selection); - selection.attr('class', selector); - return selection; + const selection2 = selection.enter().append(elementTag).merge(selection); + selection2.attr('class', selector); + return selection2; }; // @todo: Do not do like that. - // Dynamic keys functions. - // Attach variables to main function. + // @todo: Dynamic keys functions. + // @todo: Attach variables to main function. Object.keys(attrs).forEach((key) => { main[key] = function (_) { if (!arguments.length) { @@ -280,10 +274,10 @@ function chart() { }; }); - //Set attrs as property. + // Set attrs as property. main.attrs = attrs; - //Exposed update functions. + // Exposed update functions. main.data = function data(value) { if (!arguments.length) return attrs.data; attrs.data = value; From 6b3d2f0c8b9e46c1cee53fab4e273b7b40531d53 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 14:29:51 +0300 Subject: [PATCH 05/23] Uses class --- src/components/charts/cdfChartReact.js | 3 +- src/components/charts/cdfChartd3.js | 362 ++++++++++++++----------- 2 files changed, 212 insertions(+), 153 deletions(-) diff --git a/src/components/charts/cdfChartReact.js b/src/components/charts/cdfChartReact.js index f72e5db7..11c3504b 100644 --- a/src/components/charts/cdfChartReact.js +++ b/src/components/charts/cdfChartReact.js @@ -46,7 +46,8 @@ function CdfChart(props) { .verticalLine(props.verticalLine) .showVerticalLine(props.showVerticalLine) .container("#" + id) - .data({ primary: props.primaryDistribution }).render(); + .data({ primary: props.primaryDistribution }) + .render(); }); const style = !!props.width ? { width: props.width + "px" } : {}; diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index b2c82bd0..c612646a 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -1,37 +1,156 @@ -import * as d3 from 'd3'; +const d3 = require('d3'); +const moment = require('moment'); -function chart() { - // Id for event handlings. - const attrs = { - id: 'ID' + Math.floor(Math.random() * 1000000), - svgWidth: 400, - svgHeight: 400, +const format = ts => moment(ts).format("dddd, MMMM Do YYYY, h:mm:ss a"); - marginTop: 5, - marginBottom: 5, - marginRight: 50, - marginLeft: 5, +d3.selection.prototype.patternify = function patternify(params) { + const selector = params.selector; + const elementTag = params.tag; + const data = params.data || [selector]; - container: 'body', - minX: false, - maxX: false, - scale: 'linear', - showDistributionLines: true, - areaColors: ['#E1E5EC', '#E1E5EC'], - logBase: 10, - verticalLine: 110, - showVerticalLine: true, - data: null, - onHover: (e) => { - }, - }; - - function main() { - const container = d3.select(attrs.container); - - if (container.node() === null) { - return; + // Pattern in action. + const selection = this.selectAll('.' + selector).data(data, (d, i) => { + if (typeof d === 'object' && d.id) { + return d.id; } + return i; + }); + + selection.exit().remove(); + + return selection + .enter() + .append(elementTag) + .merge(selection) + .attr('class', selector); +}; + +class Chartigo { + + constructor() { + this.attrs = { + svgWidth: 400, + svgHeight: 400, + + marginTop: 5, + marginBottom: 5, + marginRight: 50, + marginLeft: 5, + + container: 'body', + minX: false, + maxX: false, + scale: 'linear', + showDistributionLines: true, + areaColors: ['#E1E5EC', '#E1E5EC'], + logBase: 10, + verticalLine: 110, + showVerticalLine: true, + data: null, + onHover: (e) => { + }, + }; + this.hoverLine = null; + this.xScale = null; + this.dataPoints = null; + this.mouseover = this.mouseover.bind(this); + this.mouseout = this.mouseout.bind(this); + } + + svgWidth(svgWidth) { + this.attrs.svgWidth = svgWidth; + return this; + } + + svgHeight(height) { + this.attrs.svgHeight = height; + return this; + } + + maxX(maxX) { + this.attrs.maxX = maxX; + return this; + } + + minX(minX) { + this.attrs.minX = minX; + return this; + } + + onHover(onHover) { + this.attrs.onHover = onHover; + return this; + } + + marginBottom(marginBottom) { + this.attrs.marginBottom = marginBottom; + return this; + } + + marginLeft(marginLeft) { + this.attrs.marginLeft = marginLeft; + return this; + } + + marginRight(marginRight) { + this.attrs.marginRight = marginRight; + return this; + } + + marginTop(marginTop) { + this.attrs.marginTop = marginTop; + return this; + } + + showDistributionLines(showDistributionLines) { + this.attrs.showDistributionLines = showDistributionLines; + return this; + } + + verticalLine(verticalLine) { + this.attrs.verticalLine = verticalLine; + return this; + } + + showVerticalLine(showVerticalLine) { + this.attrs.showVerticalLine = showVerticalLine; + return this; + } + + container(container) { + this.attrs.container = container; + return this; + } + + data(data) { + this.attrs.data = data; + return this; + } + + + /** + * @param key + * @returns {[]} + */ + getDatapoints(key) { + const dt = []; + const data = this.attrs.data[key]; + const len = data.xs.length; + + for (let i = 0; i < len; i++) { + dt.push({ + x: data.xs[i], + y: data.ys[i] + }) + } + + return dt; + } + + render() { + const attrs = this.attrs; + const container = d3.select(attrs.container); + if (container.node() === null) return; const containerRect = container.node().getBoundingClientRect(); if (containerRect.width > 0) { @@ -49,7 +168,7 @@ function chart() { const areaColor = d3.scaleOrdinal().range(attrs.areaColors); - const dataPoints = [getDatapoints('primary')]; + this.dataPoints = [this.getDatapoints('primary')]; // Scales. let xScale; @@ -70,6 +189,7 @@ function chart() { .domain([attrs.minX, attrs.maxX]) .range([0, calc.chartWidth]); } + this.xScale = xScale; const yMin = d3.min(attrs.data.primary.ys); const yMax = d3.max(attrs.data.primary.ys); @@ -78,36 +198,33 @@ function chart() { .domain([yMin, yMax]) .range([calc.chartHeight, 0]); + + const xDateScale3 = d3.scaleLinear() + .domain([new Date(2012, 0, 1), new Date(2020, 0, 31)]) + .range([0, calc.chartWidth]); + // Axis generator. - const xAxis = d3.axisBottom(xScale) - .ticks(3) - .tickFormat(d => { - if (Math.abs(d) < 1) { - return d3.format(".2")(d); - } else if (xMin > 1000 && xMax < 3000) { - // Condition which identifies years; 2019, 2020, 2021. - return d3.format(".0")(d); - } else { - const prefix = d3.formatPrefix(".0", d); - const output = prefix(d); - return output.replace("G", "B"); - } - }); + const xAxis = d3.axisBottom() + .scale(xDateScale3) + .ticks(5) + .tickFormat(format); // Line generator. const line = d3.line() .x(function (d, i) { + console.log("d", d, "i", i); return xScale(d.x); }) .y(function (d, i) { + console.log("d", d, "i", i); return yScale(d.y); }); const area = d3.area() - .x(function (d, i) { + .x(function (d) { return xScale(d.x); }) - .y1(function (d, i) { + .y1(function (d) { return yScale(d.y); }) .y0(calc.chartHeight); @@ -120,7 +237,7 @@ function chart() { .attr('pointer-events', 'none'); // Add container g element. - const chart = svg + this.chart = svg .patternify({ tag: 'g', selector: 'chart' }) .attr( 'transform', @@ -128,16 +245,16 @@ function chart() { ); // Add axis. - chart.patternify({ tag: 'g', selector: 'axis' }) + this.chart.patternify({ tag: 'g', selector: 'axis' }) .attr('transform', 'translate(' + 0 + ',' + calc.chartHeight + ')') .call(xAxis); // Draw area. - chart + this.chart .patternify({ tag: 'path', selector: 'area-path', - data: dataPoints + data: this.dataPoints }) .attr('d', area) .attr('fill', (d, i) => areaColor(i)) @@ -145,11 +262,11 @@ function chart() { // Draw line. if (attrs.showDistributionLines) { - chart + this.chart .patternify({ tag: 'path', selector: 'line-path', - data: dataPoints + data: this.dataPoints }) .attr('d', line) .attr('id', (d, i) => 'line-' + (i + 1)) @@ -160,7 +277,8 @@ function chart() { } if (attrs.showVerticalLine) { - chart.patternify({ tag: 'line', selector: 'v-line' }) + this.chart + .patternify({ tag: 'line', selector: 'v-line' }) .attr('x1', xScale(attrs.verticalLine)) .attr('x2', xScale(attrs.verticalLine)) .attr('y1', 0) @@ -170,7 +288,8 @@ function chart() { .attr('stroke', 'steelblue'); } - const hoverLine = chart.patternify({ tag: 'line', selector: 'hover-line' }) + this.hoverLine = this.chart + .patternify({ tag: 'line', selector: 'hover-line' }) .attr('x1', 0) .attr('x2', 0) .attr('y1', 0) @@ -181,116 +300,55 @@ function chart() { .attr('stroke', '#22313F'); // Add drawing rectangle. - chart.patternify({ tag: 'rect', selector: 'mouse-rect' }) + const thi$ = this; + this.chart + .patternify({ tag: 'rect', selector: 'mouse-rect' }) .attr('width', calc.chartWidth) .attr('height', calc.chartHeight) .attr('fill', 'transparent') .attr('pointer-events', 'all') - .on('mouseover', mouseover) - .on('mousemove', mouseover) - .on('mouseout', mouseout); + .on('mouseover', function () { + thi$.mouseover(this); + }) + .on('mousemove', function () { + thi$.mouseover(this); + }) + .on('mouseout', this.mouseout); - function mouseover() { - const mouse = d3.mouse(this); + return this; + } - hoverLine.attr('opacity', 1) - .attr('x1', mouse[0]) - .attr('x2', mouse[0]); + mouseover(constructor) { + const mouse = d3.mouse(constructor); + this.hoverLine.attr('opacity', 1) + .attr('x1', mouse[0]) + .attr('x2', mouse[0]); - const range = [ - xScale(dataPoints[dataPoints.length - 1][0].x), - xScale( - dataPoints - [dataPoints.length - 1] - [dataPoints[dataPoints.length - 1].length - 1].x, - ), - ]; + const xValue = this.xScale.invert(mouse[0]).toFixed(2); - const xValue = xScale.invert(mouse[0]).toFixed(2); + const range = [ + this.xScale(this.dataPoints[this.dataPoints.length - 1][0].x), + this.xScale( + this.dataPoints + [this.dataPoints.length - 1] + [this.dataPoints[this.dataPoints.length - 1].length - 1].x, + ), + ]; - if (mouse[0] > range[0] && mouse[0] < range[1]) { - attrs.onHover(xValue); - } else { - attrs.onHover(0.0); - } - } - - function mouseout() { - hoverLine.attr('opacity', 0) - } - - /** - * @param key - * @returns {[]} - */ - function getDatapoints(key) { - const dt = []; - const data = attrs.data[key]; - const len = data.xs.length; - - for (let i = 0; i < len; i++) { - dt.push({ - x: data.xs[i], - y: data.ys[i] - }) - } - - return dt; + if (mouse[0] > range[0] && mouse[0] < range[1]) { + this.attrs.onHover(xValue); + } else { + this.attrs.onHover(0.0); } } - d3.selection.prototype.patternify = function patternify(params) { - const container = this; - const selector = params.selector; - const elementTag = params.tag; - const data = params.data || [selector]; + mouseout() { + this.hoverLine.attr('opacity', 0) + } +} - // Pattern in action. - const selection = container.selectAll('.' + selector).data(data, (d, i) => { - if (typeof d === 'object') { - if (d.id) { - return d.id; - } - } - return i; - }); - - selection.exit().remove(); - const selection2 = selection.enter().append(elementTag).merge(selection); - selection2.attr('class', selector); - return selection2; - }; - - // @todo: Do not do like that. - // @todo: Dynamic keys functions. - // @todo: Attach variables to main function. - Object.keys(attrs).forEach((key) => { - main[key] = function (_) { - if (!arguments.length) { - return attrs[key]; - } - attrs[key] = _; - return main; - }; - }); - - // Set attrs as property. - main.attrs = attrs; - - // Exposed update functions. - main.data = function data(value) { - if (!arguments.length) return attrs.data; - attrs.data = value; - return main; - }; - - // Run visual. - main.render = function render() { - main(); - return main; - }; - - return main; +function chart() { + return new Chartigo(); } export default chart; From 77c1dada2f48ede179a63d74d22a47adebe3c7ee Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 14:33:32 +0300 Subject: [PATCH 06/23] Uses class --- src/components/charts/cdfChartd3.js | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index c612646a..2aecd6c8 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -171,34 +171,30 @@ class Chartigo { this.dataPoints = [this.getDatapoints('primary')]; // Scales. - let xScale; - const xMin = d3.min(attrs.data.primary.xs); const xMax = d3.max(attrs.data.primary.xs); if (attrs.scale === 'linear') { - xScale = d3.scaleLinear() + this.xScale = d3.scaleLinear() .domain([ attrs.minX || xMin, attrs.maxX || xMax ]) .range([0, calc.chartWidth]); } else { - xScale = d3.scaleLog() + this.xScale = d3.scaleLog() .base(attrs.logBase) .domain([attrs.minX, attrs.maxX]) .range([0, calc.chartWidth]); } - this.xScale = xScale; const yMin = d3.min(attrs.data.primary.ys); const yMax = d3.max(attrs.data.primary.ys); - const yScale = d3.scaleLinear() + this.yScale = d3.scaleLinear() .domain([yMin, yMax]) .range([calc.chartHeight, 0]); - const xDateScale3 = d3.scaleLinear() .domain([new Date(2012, 0, 1), new Date(2020, 0, 31)]) .range([0, calc.chartWidth]); @@ -211,22 +207,12 @@ class Chartigo { // Line generator. const line = d3.line() - .x(function (d, i) { - console.log("d", d, "i", i); - return xScale(d.x); - }) - .y(function (d, i) { - console.log("d", d, "i", i); - return yScale(d.y); - }); + .x(d => this.xScale(d.x)) + .y(d => this.yScale(d.y)); const area = d3.area() - .x(function (d) { - return xScale(d.x); - }) - .y1(function (d) { - return yScale(d.y); - }) + .x(d => this.xScale(d.x)) + .y1(d => this.yScale(d.y)) .y0(calc.chartHeight); // Add svg. From 7eb178107969ad6495395f70c6b17a6c95da0201 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 14:58:34 +0300 Subject: [PATCH 07/23] Adds time support --- .../charts/GenericDistributionChart.re | 6 +- src/components/charts/cdfChartd3.js | 59 +++++++++++-------- 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/components/charts/GenericDistributionChart.re b/src/components/charts/GenericDistributionChart.re index 75d3f69f..c7d2fa85 100644 --- a/src/components/charts/GenericDistributionChart.re +++ b/src/components/charts/GenericDistributionChart.re @@ -60,14 +60,10 @@ let make = (~dist) => { }), ), }) => - Js.log2("n", n); - Js.log2("d", d); - Js.log2("f", f); - Js.log2("dist", dist);
Shape.Continuous.toPdf} /> {d |> Shape.Discrete.scaleYToTotal(f) |> Shape.Discrete.render} -
; +
| _ =>
}; }; \ No newline at end of file diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index 2aecd6c8..3dee5f99 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -1,8 +1,6 @@ const d3 = require('d3'); const moment = require('moment'); -const format = ts => moment(ts).format("dddd, MMMM Do YYYY, h:mm:ss a"); - d3.selection.prototype.patternify = function patternify(params) { const selector = params.selector; const elementTag = params.tag; @@ -55,6 +53,7 @@ class Chartigo { this.dataPoints = null; this.mouseover = this.mouseover.bind(this); this.mouseout = this.mouseout.bind(this); + this.formatDates = this.formatDates.bind(this); } svgWidth(svgWidth) { @@ -127,7 +126,6 @@ class Chartigo { return this; } - /** * @param key * @returns {[]} @@ -176,10 +174,11 @@ class Chartigo { if (attrs.scale === 'linear') { this.xScale = d3.scaleLinear() - .domain([ - attrs.minX || xMin, - attrs.maxX || xMax - ]) + .domain([attrs.minX || xMin, attrs.maxX || xMax]) + .range([0, calc.chartWidth]); + } else if (attrs.scale === 'time') { + this.xScale = d3.scaleLinear() + .domain([new Date(2012, 0, 1), new Date(2020, 0, 31)]) .range([0, calc.chartWidth]); } else { this.xScale = d3.scaleLog() @@ -195,15 +194,27 @@ class Chartigo { .domain([yMin, yMax]) .range([calc.chartHeight, 0]); - const xDateScale3 = d3.scaleLinear() - .domain([new Date(2012, 0, 1), new Date(2020, 0, 31)]) - .range([0, calc.chartWidth]); - // Axis generator. - const xAxis = d3.axisBottom() - .scale(xDateScale3) - .ticks(5) - .tickFormat(format); + if (attrs.scale === 'time') { + this.xAxis = d3.axisBottom() + .scale(this.xScale) + .ticks(5) + .tickFormat(this.formatDates); + } else { + this.xAxis = d3.axisBottom(this.xScale) + .ticks(3) + .tickFormat(d => { + if (Math.abs(d) < 1) { + return d3.format(".2")(d); + } else if (xMin > 1000 && xMax < 3000) { + // Condition which identifies years; 2019, 2020, 2021. + return d3.format(".0")(d); + } else { + const prefix = d3.formatPrefix(".0", d); + return prefix(d).replace("G", "B"); + } + }); + } // Line generator. const line = d3.line() @@ -233,14 +244,14 @@ class Chartigo { // Add axis. this.chart.patternify({ tag: 'g', selector: 'axis' }) .attr('transform', 'translate(' + 0 + ',' + calc.chartHeight + ')') - .call(xAxis); + .call(this.xAxis); // Draw area. this.chart .patternify({ tag: 'path', selector: 'area-path', - data: this.dataPoints + data: this.dataPoints, }) .attr('d', area) .attr('fill', (d, i) => areaColor(i)) @@ -252,21 +263,19 @@ class Chartigo { .patternify({ tag: 'path', selector: 'line-path', - data: this.dataPoints + data: this.dataPoints, }) .attr('d', line) .attr('id', (d, i) => 'line-' + (i + 1)) - .attr('opacity', (d, i) => { - return i === 0 ? 0.7 : 1 - }) + .attr('opacity', (d, i) => i === 0 ? 0.7 : 1) .attr('fill', 'none'); } if (attrs.showVerticalLine) { this.chart .patternify({ tag: 'line', selector: 'v-line' }) - .attr('x1', xScale(attrs.verticalLine)) - .attr('x2', xScale(attrs.verticalLine)) + .attr('x1', this.xScale(attrs.verticalLine)) + .attr('x2', this.xScale(attrs.verticalLine)) .attr('y1', 0) .attr('y2', calc.chartHeight) .attr('stroke-width', 1.5) @@ -331,6 +340,10 @@ class Chartigo { mouseout() { this.hoverLine.attr('opacity', 0) } + + formatDates(ts) { + return moment(ts).format("dddd, MMMM Do YYYY, h:mm:ss a"); + } } function chart() { From 702044d4d5591b05940d5e70ae97407d74c0a1f1 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Tue, 18 Feb 2020 15:11:22 +0300 Subject: [PATCH 08/23] Adds time support --- src/components/charts/CdfChart__Base.re | 2 ++ src/components/charts/CdfChart__Plain.re | 2 ++ src/components/charts/GenericDistributionChart.re | 5 +++-- src/components/charts/cdfChartReact.js | 8 +------- src/components/charts/cdfChartd3.js | 5 +++++ 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/components/charts/CdfChart__Base.re b/src/components/charts/CdfChart__Base.re index 6abb50bc..273bc028 100644 --- a/src/components/charts/CdfChart__Base.re +++ b/src/components/charts/CdfChart__Base.re @@ -20,6 +20,7 @@ let make = ~minX=?, ~onHover=(f: float) => (), ~primaryDistribution=?, + ~scale=?, ~children=[||], ) => ReasonReact.wrapJsForReason( @@ -36,6 +37,7 @@ let make = ~maxX?, ~minX?, ~primaryDistribution?, + ~scale?, (), ), children, diff --git a/src/components/charts/CdfChart__Plain.re b/src/components/charts/CdfChart__Plain.re index 72067a3e..8f4859de 100644 --- a/src/components/charts/CdfChart__Plain.re +++ b/src/components/charts/CdfChart__Plain.re @@ -21,6 +21,7 @@ let make = ~data, ~minX=?, ~maxX=?, + ~scale=?, ~height=200, ~color=`hex("111"), ~onHover: float => unit, @@ -30,6 +31,7 @@ let make = height ?minX ?maxX + ?scale marginBottom=50 marginTop=0 onHover diff --git a/src/components/charts/GenericDistributionChart.re b/src/components/charts/GenericDistributionChart.re index c7d2fa85..3e0b96f7 100644 --- a/src/components/charts/GenericDistributionChart.re +++ b/src/components/charts/GenericDistributionChart.re @@ -1,6 +1,6 @@ module Continuous = { [@react.component] - let make = (~data) => { + let make = (~data, ~unit) => { let (x, setX) = React.useState(() => 0.); let chart = React.useMemo1( @@ -51,6 +51,7 @@ module Continuous = { let make = (~dist) => { switch ((dist: option(DistributionTypes.genericDistribution))) { | Some({ + unit, generationSource: Shape( Mixed({ @@ -61,7 +62,7 @@ let make = (~dist) => { ), }) =>
- Shape.Continuous.toPdf} /> + Shape.Continuous.toPdf} unit /> {d |> Shape.Discrete.scaleYToTotal(f) |> Shape.Discrete.render}
| _ =>
diff --git a/src/components/charts/cdfChartReact.js b/src/components/charts/cdfChartReact.js index 11c3504b..be5b13a4 100644 --- a/src/components/charts/cdfChartReact.js +++ b/src/components/charts/cdfChartReact.js @@ -14,13 +14,6 @@ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } -/** - * Example input: - * { - * xs: [50,100,300,400,500,600], - * ys: [0.1, 0.4, 0.6, 0.7,0.8, 0.9]} - * } - */ function CdfChart(props) { const id = "chart-" + getRandomInt(0, 100000); const [sized, { width }] = useSize(() => { @@ -47,6 +40,7 @@ function CdfChart(props) { .showVerticalLine(props.showVerticalLine) .container("#" + id) .data({ primary: props.primaryDistribution }) + .scale('linear') .render(); }); diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index 3dee5f99..535717c4 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -76,6 +76,11 @@ class Chartigo { return this; } + scale(scale) { + this.attrs.scale = scale; + return this; + } + onHover(onHover) { this.attrs.onHover = onHover; return this; From 7301fea889e3363e8de993423f579897ce0f8400 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 08:20:54 +0300 Subject: [PATCH 09/23] Renames the class --- src/components/charts/cdfChartd3.js | 46 ++++++++++++++--------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartd3.js index 535717c4..a341cba0 100644 --- a/src/components/charts/cdfChartd3.js +++ b/src/components/charts/cdfChartd3.js @@ -1,29 +1,7 @@ const d3 = require('d3'); const moment = require('moment'); -d3.selection.prototype.patternify = function patternify(params) { - const selector = params.selector; - const elementTag = params.tag; - const data = params.data || [selector]; - - // Pattern in action. - const selection = this.selectAll('.' + selector).data(data, (d, i) => { - if (typeof d === 'object' && d.id) { - return d.id; - } - return i; - }); - - selection.exit().remove(); - - return selection - .enter() - .append(elementTag) - .merge(selection) - .attr('class', selector); -}; - -class Chartigo { +class Chart { constructor() { this.attrs = { @@ -351,8 +329,28 @@ class Chartigo { } } + +d3.selection.prototype.patternify = function patternify(params) { + const selector = params.selector; + const elementTag = params.tag; + const data = params.data || [selector]; + + const selection = this.selectAll('.' + selector).data(data, (d, i) => { + if (typeof d === 'object' && d.id) return d.id; + return i; + }); + + selection.exit().remove(); + + return selection + .enter() + .append(elementTag) + .merge(selection) + .attr('class', selector); +}; + function chart() { - return new Chartigo(); + return new Chart(); } export default chart; From 7c76b1c46a0c94c79739e1ee6e2503fb19318df7 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 08:26:06 +0300 Subject: [PATCH 10/23] Renames the class --- .../charts/{cdfChartd3.js => cdfChartD3.js} | 0 src/components/charts/cdfChartReact.js | 17 +++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) rename src/components/charts/{cdfChartd3.js => cdfChartD3.js} (100%) diff --git a/src/components/charts/cdfChartd3.js b/src/components/charts/cdfChartD3.js similarity index 100% rename from src/components/charts/cdfChartd3.js rename to src/components/charts/cdfChartD3.js diff --git a/src/components/charts/cdfChartReact.js b/src/components/charts/cdfChartReact.js index be5b13a4..95b2a61b 100644 --- a/src/components/charts/cdfChartReact.js +++ b/src/components/charts/cdfChartReact.js @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import { useSize } from 'react-use'; -import chart from './cdfChartd3'; +import chart from './cdfChartD3'; /** * @param min @@ -14,8 +14,16 @@ function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } +/** + * @param props + * @returns {*} + * @constructor + */ function CdfChart(props) { const id = "chart-" + getRandomInt(0, 100000); + const scale = props.scale || 'linear'; + const style = !!props.width ? { width: props.width + "px" } : {}; + const [sized, { width }] = useSize(() => { return React.createElement("div", { key: "resizable-div", @@ -40,13 +48,10 @@ function CdfChart(props) { .showVerticalLine(props.showVerticalLine) .container("#" + id) .data({ primary: props.primaryDistribution }) - .scale('linear') + .scale(scale) .render(); }); - const style = !!props.width ? { width: props.width + "px" } : {}; - const key = id; - return React.createElement("div", { style: { paddingLeft: "10px", @@ -54,7 +59,7 @@ function CdfChart(props) { }, }, [ sized, - React.createElement("div", { id, style, key }), + React.createElement("div", { id, style, key: id }), ]); } From 53f8fe6a23850d88439ffde9b4f5e7e81d44be7b Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 08:29:06 +0300 Subject: [PATCH 11/23] Freezes packages --- package.json | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index ff3b14ea..b9d53019 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "probtest", + "name": "estiband", "version": "0.1.0", "homepage": "https://foretold-app.github.io/estiband/", "scripts": { @@ -23,35 +23,33 @@ "author": "", "license": "MIT", "dependencies": { - "@foretold/cdf": "^1.0.15", - "@foretold/components": "^0.0.3", - "@foretold/guesstimator": "^1.0.10", + "@foretold/cdf": "1.0.15", + "@foretold/components": "0.0.3", + "@foretold/guesstimator": "1.0.10", "antd": "3.17.0", - "autoprefixer": "^9.7.4", + "autoprefixer": "9.7.4", "bs-ant-design-alt": "2.0.0-alpha.31", - "bs-css": "^11.0.0", + "bs-css": "11.0.0", "bs-moment": "0.4.4", "bs-reform": "9.7.1", - "d3": "^5.15.0", + "d3": "5.15.0", "lenses-ppx": "4.0.0", - "less": "^3.10.3", - "lodash": "^4.17.15", - "moment": "^2.24.0", - "parcel-bundler": "^1.12.4", - "parcel-plugin-less-js-enabled": "^1.0.2", - "postcss-cli": "^7.1.0", - "rationale": "^0.2.0", - "react": "^16.8.1", - "react-dom": "^16.8.1", + "less": "3.10.3", + "lodash": "4.17.15", + "moment": "2.24.0", + "parcel-bundler": "1.12.4", + "parcel-plugin-less-js-enabled": "1.0.2", + "postcss-cli": "7.1.0", + "rationale": "0.2.0", + "react": "16.12.0", + "react-dom": "16.12.0", "reason-react": ">=0.7.0", - "reschema": "^1.3.0" - }, - "devDependencies": { + "reschema": "1.3.0", "bs-platform": "5.2.1", - "bsb-js": "^1.1.7", - "gh-pages": "^2.2.0", - "moduleserve": "^0.9.0", - "tailwindcss": "^1.2.0" + "bsb-js": "1.1.7", + "gh-pages": "2.2.0", + "moduleserve": "0.9.1", + "tailwindcss": "1.2.0" }, "alias": { "react": "./node_modules/react", From fbd1b46b918c8b6e4d7b3dc8cf3b7fe1457bd25a Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 08:32:47 +0300 Subject: [PATCH 12/23] Upgrade bs-platform to prevent issues --- package.json | 4 ++-- yarn.lock | 66 ++++++++++++++++++++++++++-------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index b9d53019..53abf221 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "bs-moment": "0.4.4", "bs-reform": "9.7.1", "d3": "5.15.0", - "lenses-ppx": "4.0.0", + "lenses-ppx": "5.1.0", "less": "3.10.3", "lodash": "4.17.15", "moment": "2.24.0", @@ -45,7 +45,7 @@ "react-dom": "16.12.0", "reason-react": ">=0.7.0", "reschema": "1.3.0", - "bs-platform": "5.2.1", + "bs-platform": "7.0.1", "bsb-js": "1.1.7", "gh-pages": "2.2.0", "moduleserve": "0.9.1", diff --git a/yarn.lock b/yarn.lock index 3e53daba..9659fc48 100644 --- a/yarn.lock +++ b/yarn.lock @@ -997,7 +997,7 @@ lodash "4.17.15" pdfast "0.2.0" -"@foretold/cdf@^1.0.15": +"@foretold/cdf@1.0.15": version "1.0.15" resolved "https://registry.yarnpkg.com/@foretold/cdf/-/cdf-1.0.15.tgz#69ce4755158693e3d325e7be10d0aa9cdb465730" integrity sha512-I7GhFQd4HaFd+tGD1IJ0W8xvFp2YiJdcFiXSCq9vYQZWWy+Npi4QOYsMoDJyoUTvOlVba4ARa/pDKPD2hn+uuQ== @@ -1006,7 +1006,7 @@ parcel "1.12.3" pdfast "0.2.0" -"@foretold/components@^0.0.3": +"@foretold/components@0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@foretold/components/-/components-0.0.3.tgz#a195912647499735f64cb2b74f722eee4b2da13f" integrity sha512-erCJ8d5H+sJ7RGIoQCHTRaKiSQlTS9yIM4Ku6hOw+8Y+5bawptRuitoeqoReqwRlcuNZSSqwWOufkoc+GiXrbg== @@ -1042,7 +1042,7 @@ lodash "4.17.15" mathjs "5.10.3" -"@foretold/guesstimator@^1.0.10": +"@foretold/guesstimator@1.0.10": version "1.0.10" resolved "https://registry.yarnpkg.com/@foretold/guesstimator/-/guesstimator-1.0.10.tgz#8b3bf5371c836de6db31832a88a2c1f0eb4d3111" integrity sha512-0mD9QcKUMjK5c4IxK7oZ7sGx1eMeAUAdeTiAOpecMI3qMvoYsuMF5aRDZQcWPEoKuW0grnxyLMHEv5N/vAX3kQ== @@ -1673,7 +1673,7 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.4.5, autoprefixer@^9.7.4: +autoprefixer@9.7.4, autoprefixer@^9.4.5: version "9.7.4" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== @@ -1955,7 +1955,7 @@ bs-ant-design-alt@2.0.0-alpha.31: bs-moment "^0.4.4" re-classnames "^4.0.0" -bs-css@11.0.0, bs-css@^11.0.0: +bs-css@11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/bs-css/-/bs-css-11.0.0.tgz#6ed1726d7c06aa584d255d1cf23240a2acc0aa07" integrity sha512-bpSwj1VvmWNMoJ5qnsHMQC+Mj0zjL9iwcOhl5ipP7Hfr7v+ZyKqjSMaMK+L1EdukuCp0rJmRD2I/MbS4BHnMmQ== @@ -1977,10 +1977,10 @@ bs-platform@5.0.6: resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-5.0.6.tgz#88c13041fb020479800de3d82c680bf971091425" integrity sha512-6Boa2VEcWJp2WJr38L7bp3J929nYha7gDarjxb070jWzgfPJ/WbzjipmSfnu2eqqk1MfjEIpBipbPz6n1NISwA== -bs-platform@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-5.2.1.tgz#3f76f6d4f4c7255296375a8104c8be332770b691" - integrity sha512-3ISP+RBC/NYILiJnphCY0W3RTYpQ11JGa2dBBLVug5fpFZ0qtSaL3ZplD8MyjNeXX2bC7xgrWfgBSn8Tc9om7Q== +bs-platform@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-7.0.1.tgz#1d7b0ef6088b998dceee5db74a7cd8f01c20a3bd" + integrity sha512-UjStdtHhbtC/l6vKJ1XRDqrPk7rFf5PLYHtRX3akDXEYVnTbN36z0g4DEr5mU8S0N945e33HYts9x+i7hKKpZQ== bs-reform@9.7.1: version "9.7.1" @@ -1991,7 +1991,7 @@ bs-reform@9.7.1: reason-react-update "^1.0.0" reschema "^1.3.0" -bsb-js@^1.1.7: +bsb-js@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/bsb-js/-/bsb-js-1.1.7.tgz#12cc91e974f5896b3a2aa8358419d24e56f552c3" integrity sha512-FSR7d5Kb6KfVI5sLz9bEeD9pbA9F4Zbkk1xa6R9CJtyd+dJ7mIkxoXqv7cw7HWcuee+VpIhmjYzrplnFd/5Qgg== @@ -2930,10 +2930,10 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3@5.9.2: - version "5.9.2" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.9.2.tgz#64e8a7e9c3d96d9e6e4999d2c8a2c829767e67f5" - integrity sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ== +d3@5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.15.0.tgz#ffd44958e6a3cb8a59a84429c45429b8bca5677a" + integrity sha512-C+E80SL2nLLtmykZ6klwYj5rPqB5nlfN5LdWEAVdWPppqTD8taoJi2PxLZjPeYT8FFRR2yucXq+kBlOnnvZeLg== dependencies: d3-array "1" d3-axis "1" @@ -2967,10 +2967,10 @@ d3@5.9.2: d3-voronoi "1" d3-zoom "1" -d3@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/d3/-/d3-5.15.0.tgz#ffd44958e6a3cb8a59a84429c45429b8bca5677a" - integrity sha512-C+E80SL2nLLtmykZ6klwYj5rPqB5nlfN5LdWEAVdWPppqTD8taoJi2PxLZjPeYT8FFRR2yucXq+kBlOnnvZeLg== +d3@5.9.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/d3/-/d3-5.9.2.tgz#64e8a7e9c3d96d9e6e4999d2c8a2c829767e67f5" + integrity sha512-ydrPot6Lm3nTWH+gJ/Cxf3FcwuvesYQ5uk+j/kXEH/xbuYWYWTMAHTJQkyeuG8Y5WM5RSEYB41EctUrXQQytRQ== dependencies: d3-array "1" d3-axis "1" @@ -3837,7 +3837,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -gh-pages@^2.2.0: +gh-pages@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.2.0.tgz#74ebeaca8d2b9a11279dcbd4a39ddfff3e6caa24" integrity sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA== @@ -4730,12 +4730,12 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lenses-ppx@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lenses-ppx/-/lenses-ppx-4.0.0.tgz#bab5f993b334928fa83ee85b8413b0ea9a95063f" - integrity sha512-QhUzfkqHni6b2PhGJqNYbKQOZuvs9cyv2w+3xR5AiDS+Z0NaGX03wcKtEY39if8xEYtcv43yJ8eDfeOqKreYVQ== +lenses-ppx@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/lenses-ppx/-/lenses-ppx-5.1.0.tgz#74882abc99f09fdb03daf33fd4ee79272424be7a" + integrity sha512-q+5yxYvvF8czdfRkBXYoqBeDUJkLQz6VUkPiFmUIdyMm6HWPvKnLJYPF1HRHeTp+KtkblBY5sHvmOWBfEpUGnw== -less@^3.10.3: +less@3.10.3: version "3.10.3" resolved "https://registry.yarnpkg.com/less/-/less-3.10.3.tgz#417a0975d5eeecc52cff4bcfa3c09d35781e6792" integrity sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow== @@ -5036,7 +5036,7 @@ mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" -moduleserve@^0.9.0: +moduleserve@0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/moduleserve/-/moduleserve-0.9.1.tgz#11bad4337ea248d7eaf10d2c7f8649a8c3b9c1f8" integrity sha512-WF2BeGnM2Ko7bdICgJO+Ibu+ZD33ExJHzOzTDsCUzfZnvnFfheEIYBTWyIqSRU0tXh4UTQ1krDOCglFTJPBMow== @@ -5446,7 +5446,7 @@ pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parcel-bundler@^1.12.3, parcel-bundler@^1.12.4: +parcel-bundler@1.12.4, parcel-bundler@^1.12.3: version "1.12.4" resolved "https://registry.yarnpkg.com/parcel-bundler/-/parcel-bundler-1.12.4.tgz#31223f4ab4d00323a109fce28d5e46775409a9ee" integrity sha512-G+iZGGiPEXcRzw0fiRxWYCKxdt/F7l9a0xkiU4XbcVRJCSlBnioWEwJMutOCCpoQmaQtjB4RBHDGIHN85AIhLQ== @@ -5511,7 +5511,7 @@ parcel-bundler@^1.12.3, parcel-bundler@^1.12.4: v8-compile-cache "^2.0.0" ws "^5.1.1" -parcel-plugin-less-js-enabled@^1.0.2: +parcel-plugin-less-js-enabled@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parcel-plugin-less-js-enabled/-/parcel-plugin-less-js-enabled-1.0.2.tgz#77d74166b406e6a516106653471b2fd619564af3" integrity sha512-FE6zQwlJpNe3qJoIwudpiLhx1Pd26M3EUtBqtRdU+6dbXAW3GwDUszOUBka6KLtpV8p2GxOfiC1aCiGrzAnvsg== @@ -5741,7 +5741,7 @@ postcss-calc@^7.0.1: postcss-selector-parser "^5.0.0-rc.4" postcss-value-parser "^3.3.1" -postcss-cli@^7.1.0: +postcss-cli@7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-7.1.0.tgz#769b07b8865aaa3e98c7c63a3d256b4f51e3e237" integrity sha512-tCGK0GO2reu644dUHxks8U2SAtKnzftQTAXN1dwzFPoKXZr0b7VX4vTkQ2Pl2Lunas6+o8uHR56hlcYBm1srZg== @@ -6331,7 +6331,7 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rationale@0.2.0, rationale@^0.2.0: +rationale@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rationale/-/rationale-0.2.0.tgz#555ed4f3cc7cd0245faeac041d3769f1857e4f3d" integrity sha512-Pd8w5Inv1JhTfRyx03zs486CEAn6UKXvvOtxVRLsewngsBSffo3MQwUKYS75L/8vPt98wmf7iaZROx362/f7Bw== @@ -6794,7 +6794,7 @@ react-apollo@^2.5.8: ts-invariant "^0.4.2" tslib "^1.9.3" -react-dom@16.12.0, react-dom@>=16.8.1, react-dom@^16.8.1: +react-dom@16.12.0, react-dom@>=16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== @@ -6875,7 +6875,7 @@ react-use@13.19.0: ts-easing "^0.2.0" tslib "^1.10.0" -react@16.12.0, react@>=16.8.1, react@^16.8.1: +react@16.12.0, react@>=16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== @@ -7128,7 +7128,7 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -reschema@^1.3.0: +reschema@1.3.0, reschema@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/reschema/-/reschema-1.3.0.tgz#b8b33bdcdb7eeaa0a22fb024f28204e9d84243a6" integrity sha512-s+Bb6aA4OrsPtE6D5Afb0eYmPbattAb8e+b2mbE06Wr+Uec8Pw8WP6435LWdB0/3Y8d8awHAQebscJjxRc4RQA== @@ -7822,7 +7822,7 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tailwindcss@^1.2.0: +tailwindcss@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-1.2.0.tgz#5df317cebac4f3131f275d258a39da1ba3a0f291" integrity sha512-CKvY0ytB3ze5qvynG7qv4XSpQtFNGPbu9pUn8qFdkqgD8Yo/vGss8mhzbqls44YCXTl4G62p3qVZBj45qrd6FQ== From 10ad3be6b3184dc9802f002318b24548023558d5 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 10:36:11 +0300 Subject: [PATCH 13/23] It is time to fix time vector --- showcase/entries/Continuous.re | 2 - src/components/charts/CdfChart__Base.re | 16 +++--- src/components/charts/CdfChart__Plain.re | 20 ++++---- .../charts/GenericDistributionChart.re | 3 ++ src/components/charts/cdfChartD3.js | 50 ++++++++++--------- src/components/charts/cdfChartReact.js | 20 +++++--- src/core/DistributionTypes.re | 11 ++++ src/core/TimeTypes.re | 15 ++++++ 8 files changed, 89 insertions(+), 48 deletions(-) diff --git a/showcase/entries/Continuous.re b/showcase/entries/Continuous.re index 832d6789..4d56c583 100644 --- a/showcase/entries/Continuous.re +++ b/showcase/entries/Continuous.re @@ -1,5 +1,3 @@ -open ForetoldComponents.Base; - let data: DistributionTypes.xyShape = { xs: [|1., 10., 10., 200., 250., 292., 330.|], ys: [|0.0, 0.0, 0.1, 0.3, 0.5, 0.2, 0.1|], diff --git a/src/components/charts/CdfChart__Base.re b/src/components/charts/CdfChart__Base.re index 273bc028..ffcaf2f0 100644 --- a/src/components/charts/CdfChart__Base.re +++ b/src/components/charts/CdfChart__Base.re @@ -11,16 +11,17 @@ type primaryDistribution = { let make = ( ~height=?, - ~verticalLine=?, - ~showVerticalLine=?, ~marginBottom=?, ~marginTop=?, - ~showDistributionLines=?, ~maxX=?, ~minX=?, ~onHover=(f: float) => (), ~primaryDistribution=?, ~scale=?, + ~showDistributionLines=?, + ~showVerticalLine=?, + ~timeScale=?, + ~verticalLine=?, ~children=[||], ) => ReasonReact.wrapJsForReason( @@ -28,16 +29,17 @@ let make = ~props= makeProps( ~height?, - ~verticalLine?, ~marginBottom?, ~marginTop?, - ~onHover, - ~showVerticalLine?, - ~showDistributionLines?, ~maxX?, ~minX?, + ~onHover, ~primaryDistribution?, ~scale?, + ~showDistributionLines?, + ~showVerticalLine?, + ~timeScale?, + ~verticalLine?, (), ), children, diff --git a/src/components/charts/CdfChart__Plain.re b/src/components/charts/CdfChart__Plain.re index 8f4859de..16d3b37a 100644 --- a/src/components/charts/CdfChart__Plain.re +++ b/src/components/charts/CdfChart__Plain.re @@ -18,26 +18,28 @@ module Styles = { [@react.component] let make = ( - ~data, - ~minX=?, - ~maxX=?, - ~scale=?, - ~height=200, ~color=`hex("111"), + ~data, + ~height=200, + ~maxX=?, + ~minX=?, ~onHover: float => unit, + ~scale=?, + ~timeScale=?, ) => {
Shape.XYShape.toJs} + showDistributionLines=false + showVerticalLine=false />
; }; \ No newline at end of file diff --git a/src/components/charts/GenericDistributionChart.re b/src/components/charts/GenericDistributionChart.re index 3e0b96f7..f7402f8b 100644 --- a/src/components/charts/GenericDistributionChart.re +++ b/src/components/charts/GenericDistributionChart.re @@ -2,16 +2,19 @@ module Continuous = { [@react.component] let make = (~data, ~unit) => { let (x, setX) = React.useState(() => 0.); + let timeScale = unit |> DistributionTypes.DistributionUnit.toJson; let chart = React.useMemo1( () => setX(_ => r)} />, [|data|], ); +
chart diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index a341cba0..417ca247 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -1,7 +1,8 @@ +const _ = require('lodash'); const d3 = require('d3'); const moment = require('moment'); -class Chart { +export class CdfChartD3 { constructor() { this.attrs = { @@ -13,10 +14,11 @@ class Chart { marginRight: 50, marginLeft: 5, - container: 'body', + container: null, minX: false, maxX: false, scale: 'linear', + timeScale: null, showDistributionLines: true, areaColors: ['#E1E5EC', '#E1E5EC'], logBase: 10, @@ -28,6 +30,7 @@ class Chart { }; this.hoverLine = null; this.xScale = null; + this.xScaleTime = null; this.dataPoints = null; this.mouseover = this.mouseover.bind(this); this.mouseout = this.mouseout.bind(this); @@ -59,6 +62,11 @@ class Chart { return this; } + timeScale(timeScale) { + this.attrs.timeScale = timeScale; + return this; + } + onHover(onHover) { this.attrs.onHover = onHover; return this; @@ -119,10 +127,7 @@ class Chart { const len = data.xs.length; for (let i = 0; i < len; i++) { - dt.push({ - x: data.xs[i], - y: data.ys[i] - }) + dt.push({ x: data.xs[i], y: data.ys[i] }); } return dt; @@ -133,6 +138,7 @@ class Chart { const container = d3.select(attrs.container); if (container.node() === null) return; + // Sets the width from the DOM element. const containerRect = container.node().getBoundingClientRect(); if (containerRect.width > 0) { attrs.svgWidth = containerRect.width; @@ -159,10 +165,6 @@ class Chart { this.xScale = d3.scaleLinear() .domain([attrs.minX || xMin, attrs.maxX || xMax]) .range([0, calc.chartWidth]); - } else if (attrs.scale === 'time') { - this.xScale = d3.scaleLinear() - .domain([new Date(2012, 0, 1), new Date(2020, 0, 31)]) - .range([0, calc.chartWidth]); } else { this.xScale = d3.scaleLog() .base(attrs.logBase) @@ -178,9 +180,17 @@ class Chart { .range([calc.chartHeight, 0]); // Axis generator. - if (attrs.scale === 'time') { + if (!!this.attrs.timeScale) { + const zero = _.get(this.attrs.timeScale, 'zero', moment()); + const unit = _.get(this.attrs.timeScale, 'unit', null); + const length = zero.clone().add('year', 5); + + this.xScaleTime = d3.scaleLinear() + .domain([zero.toDate(), length.toDate()]) + .range([0, calc.chartWidth]); + this.xAxis = d3.axisBottom() - .scale(this.xScale) + .scale(this.xScaleTime) .ticks(5) .tickFormat(this.formatDates); } else { @@ -329,16 +339,16 @@ class Chart { } } - d3.selection.prototype.patternify = function patternify(params) { const selector = params.selector; const elementTag = params.tag; const data = params.data || [selector]; - const selection = this.selectAll('.' + selector).data(data, (d, i) => { - if (typeof d === 'object' && d.id) return d.id; - return i; - }); + const selection = this.selectAll('.' + selector) + .data(data, (d, i) => { + if (typeof d === 'object' && d.id) return d.id; + return i; + }); selection.exit().remove(); @@ -348,9 +358,3 @@ d3.selection.prototype.patternify = function patternify(params) { .merge(selection) .attr('class', selector); }; - -function chart() { - return new Chart(); -} - -export default chart; diff --git a/src/components/charts/cdfChartReact.js b/src/components/charts/cdfChartReact.js index 95b2a61b..e2c48952 100644 --- a/src/components/charts/cdfChartReact.js +++ b/src/components/charts/cdfChartReact.js @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; import { useSize } from 'react-use'; -import chart from './cdfChartD3'; +import { CdfChartD3 } from './cdfChartD3'; /** * @param min @@ -19,8 +19,9 @@ function getRandomInt(min, max) { * @returns {*} * @constructor */ -function CdfChart(props) { - const id = "chart-" + getRandomInt(0, 100000); +function CdfChartReact(props) { + const containerRef = React.createRef(); + const key = "cdf-chart-react-" + getRandomInt(0, 1000); const scale = props.scale || 'linear'; const style = !!props.width ? { width: props.width + "px" } : {}; @@ -33,7 +34,7 @@ function CdfChart(props) { }); useEffect(() => { - chart() + new CdfChartD3() .svgWidth(width) .svgHeight(props.height) .maxX(props.maxX) @@ -46,9 +47,10 @@ function CdfChart(props) { .showDistributionLines(props.showDistributionLines) .verticalLine(props.verticalLine) .showVerticalLine(props.showVerticalLine) - .container("#" + id) + .container(containerRef.current) .data({ primary: props.primaryDistribution }) .scale(scale) + .timeScale(props.timeScale) .render(); }); @@ -59,8 +61,12 @@ function CdfChart(props) { }, }, [ sized, - React.createElement("div", { id, style, key: id }), + React.createElement("div", { + key, + style, + ref: containerRef, + }), ]); } -export default CdfChart; +export default CdfChartReact; diff --git a/src/core/DistributionTypes.re b/src/core/DistributionTypes.re index d19070df..cfc5cf29 100644 --- a/src/core/DistributionTypes.re +++ b/src/core/DistributionTypes.re @@ -46,4 +46,15 @@ type genericDistribution = { probabilityType, domain, unit: distributionUnit, +}; + +module DistributionUnit = { + let toJson = (distributionUnit: distributionUnit) => + switch (distributionUnit) { + | Time({zero, unit}) => + Js.Null.fromOption( + Some({"zero": zero, "unit": unit |> TimeTypes.TimeUnit.toString}), + ) + | _ => Js.Null.fromOption(None) + }; }; \ No newline at end of file diff --git a/src/core/TimeTypes.re b/src/core/TimeTypes.re index db08c5bd..75e158e2 100644 --- a/src/core/TimeTypes.re +++ b/src/core/TimeTypes.re @@ -20,6 +20,21 @@ type timePoint = { value: float, }; +module TimeUnit = { + let toString = (timeUnit: timeUnit) => + switch (timeUnit) { + | `days => "days" + | `hours => "hours" + | `milliseconds => "milliseconds" + | `minutes => "minutes" + | `months => "months" + | `quarters => "quarters" + | `seconds => "seconds" + | `weeks => "weeks" + | `years => "years" + }; +}; + module TimePoint = { let fromTimeVector = (timeVector, value): timePoint => {timeVector, value}; From 64e7067f6b8aae2323545e32c367b2abfbee2a8b Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 10:54:40 +0300 Subject: [PATCH 14/23] It is time to fix time vector (2) --- showcase/entries/Continuous.re | 15 ++++++++++++--- src/core/DistributionTypes.re | 12 ++++++++---- src/core/GenericDistribution.re | 2 +- src/core/TimeTypes.re | 11 ++++++----- src/interface/Prop.re | 15 +++++++++++++++ src/models/EAFunds.re | 10 ++++++++-- src/models/GlobalCatastrophe.re | 9 +++++++-- 7 files changed, 57 insertions(+), 17 deletions(-) diff --git a/showcase/entries/Continuous.re b/showcase/entries/Continuous.re index 4d56c583..0a1cb4af 100644 --- a/showcase/entries/Continuous.re +++ b/showcase/entries/Continuous.re @@ -8,7 +8,7 @@ let mixedDist = ~generationSource=GuesstimatorString("mm(3, normal(5,1), [.5,.5])"), ~probabilityType=Pdf, ~domain=Complete, - ~unit=Unspecified, + ~unit=UnspecifiedDistribution, (), ) |> GenericDistribution.renderIfNeeded(~sampleCount=3000); @@ -18,7 +18,16 @@ let timeDist = ~generationSource=GuesstimatorString("mm(3, normal(5,1), [.5,.5])"), ~probabilityType=Pdf, ~domain=Complete, - ~unit=Time({zero: MomentRe.momentNow(), unit: `years}), + ~unit= + TimeDistribution({ + zero: MomentRe.momentNow(), + step: `years, + length: + MomentRe.Moment.add( + ~duration=MomentRe.duration(5., `years), + MomentRe.momentNow(), + ), + }), (), ) |> GenericDistribution.renderIfNeeded(~sampleCount=3000); @@ -28,7 +37,7 @@ let domainLimitedDist = ~generationSource=GuesstimatorString("mm(3, normal(5,1), [.5,.5])"), ~probabilityType=Pdf, ~domain=RightLimited({xPoint: 6.0, excludingProbabilityMass: 0.3}), - ~unit=Unspecified, + ~unit=UnspecifiedDistribution, (), ) |> GenericDistribution.renderIfNeeded(~sampleCount=3000); diff --git a/src/core/DistributionTypes.re b/src/core/DistributionTypes.re index cfc5cf29..0176faff 100644 --- a/src/core/DistributionTypes.re +++ b/src/core/DistributionTypes.re @@ -33,8 +33,8 @@ type generationSource = | Shape(pointsType); type distributionUnit = - | Unspecified - | Time(TimeTypes.timeVector); + | UnspecifiedDistribution + | TimeDistribution(TimeTypes.timeVector); type probabilityType = | Cdf @@ -51,9 +51,13 @@ type genericDistribution = { module DistributionUnit = { let toJson = (distributionUnit: distributionUnit) => switch (distributionUnit) { - | Time({zero, unit}) => + | TimeDistribution({zero, step, length}) => Js.Null.fromOption( - Some({"zero": zero, "unit": unit |> TimeTypes.TimeUnit.toString}), + Some({ + "zero": zero, + "step": step |> TimeTypes.TimeUnit.toString, + "length": length, + }), ) | _ => Js.Null.fromOption(None) }; diff --git a/src/core/GenericDistribution.re b/src/core/GenericDistribution.re index cbc6fbfd..f4b4e871 100644 --- a/src/core/GenericDistribution.re +++ b/src/core/GenericDistribution.re @@ -5,7 +5,7 @@ let make = ~generationSource, ~probabilityType=Pdf, ~domain=Complete, - ~unit=Unspecified, + ~unit=UnspecifiedDistribution, (), ) : genericDistribution => { diff --git a/src/core/TimeTypes.re b/src/core/TimeTypes.re index 75e158e2..b0d34c0a 100644 --- a/src/core/TimeTypes.re +++ b/src/core/TimeTypes.re @@ -12,7 +12,8 @@ type timeUnit = [ type timeVector = { zero: MomentRe.Moment.t, - unit: timeUnit, + length: MomentRe.Moment.t, + step: timeUnit, }; type timePoint = { @@ -42,12 +43,12 @@ module TimePoint = { timePoint.timeVector.zero |> MomentRe.Moment.add( ~duration= - MomentRe.duration(timePoint.value, timePoint.timeVector.unit), + MomentRe.duration(timePoint.value, timePoint.timeVector.step), ); }; let fromMoment = (timeVector: timeVector, moment: MomentRe.Moment.t) => - MomentRe.diff(timeVector.zero, moment, timeVector.unit); + MomentRe.diff(timeVector.zero, moment, timeVector.step); }; module RelativeTimePoint = { @@ -60,7 +61,7 @@ module RelativeTimePoint = { | Time(r) => r | XValue(r) => timeVector.zero - |> MomentRe.Moment.add(~duration=MomentRe.duration(r, timeVector.unit)) + |> MomentRe.Moment.add(~duration=MomentRe.duration(r, timeVector.step)) }; let _timeToX = (time, timeStart, timeUnit) => @@ -68,7 +69,7 @@ module RelativeTimePoint = { let toXValue = (timeVector: timeVector, timeInVector: timeInVector) => switch (timeInVector) { - | Time(r) => _timeToX(r, timeVector.zero, timeVector.unit) + | Time(r) => _timeToX(r, timeVector.zero, timeVector.step) | XValue(r) => r }; }; \ No newline at end of file diff --git a/src/interface/Prop.re b/src/interface/Prop.re index c2a33e23..157b3b9a 100644 --- a/src/interface/Prop.re +++ b/src/interface/Prop.re @@ -221,6 +221,21 @@ module TypeWithMetadata = { ~assumptionType=ASSUMPTION, (), ); + + let nextTenYears = + make( + ~id="nextTenYears", + ~name="Next Ten Years", + ~description=None, + ~type_= + DateTime({ + default: Some(MomentRe.momentNow()), + min: Some(MomentRe.momentNow()), + max: Some(MomentRe.momentNow()), + }), + ~assumptionType=ASSUMPTION, + (), + ); }; module Model = { diff --git a/src/models/EAFunds.re b/src/models/EAFunds.re index f498fb32..82bd736d 100644 --- a/src/models/EAFunds.re +++ b/src/models/EAFunds.re @@ -137,10 +137,11 @@ module Model = { ~generationSource=GuesstimatorString(str), ~probabilityType=Cdf, ~domain=Complete, - ~unit=Unspecified, + ~unit=UnspecifiedDistribution, (), ); Prop.Value.GenericDistribution(genericDistribution); + | CHANCE_OF_EXISTENCE => Prop.Value.GenericDistribution( GenericDistribution.make( @@ -153,7 +154,12 @@ module Model = { ), ~probabilityType=Cdf, ~domain=RightLimited({xPoint: 100., excludingProbabilityMass: 0.3}), - ~unit=Time({zero: currentDateTime, unit: `years}), + ~unit= + TimeDistribution({ + zero: currentDateTime, + step: `years, + length: currentDateTime, + }), (), ), ) diff --git a/src/models/GlobalCatastrophe.re b/src/models/GlobalCatastrophe.re index bd29b03c..d76270b4 100644 --- a/src/models/GlobalCatastrophe.re +++ b/src/models/GlobalCatastrophe.re @@ -7,7 +7,12 @@ module Model = { ~generationSource=GuesstimatorString(guesstimatorString), ~probabilityType=Cdf, ~domain=RightLimited({xPoint: 200., excludingProbabilityMass: 0.3}), - ~unit=Time({zero: currentDateTime, unit: `years}), + ~unit= + TimeDistribution({ + zero: currentDateTime, + step: `years, + length: currentDateTime, + }), (), ); Prop.Value.GenericDistribution(genericDistribution); @@ -30,7 +35,7 @@ module Interface = { description: "The chances of having at least one catastrophe per year in the future, assuming no other catastrophe until then.", version: "1.0.0", author: "Ozzie Gooen", - inputTypes: [|TypeWithMetadata.currentYear|], + inputTypes: [|TypeWithMetadata.nextTenYears|], outputTypes: [||], run, }; From 2965d627f58c100e44465c582f214b6dd4fe605a Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 11:33:50 +0300 Subject: [PATCH 15/23] Ok, works --- src/components/charts/cdfChartD3.js | 43 ++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index 417ca247..f91d234c 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -30,7 +30,6 @@ export class CdfChartD3 { }; this.hoverLine = null; this.xScale = null; - this.xScaleTime = null; this.dataPoints = null; this.mouseover = this.mouseover.bind(this); this.mouseout = this.mouseout.bind(this); @@ -182,16 +181,17 @@ export class CdfChartD3 { // Axis generator. if (!!this.attrs.timeScale) { const zero = _.get(this.attrs.timeScale, 'zero', moment()); - const unit = _.get(this.attrs.timeScale, 'unit', null); - const length = zero.clone().add('year', 5); + const step = _.get(this.attrs.timeScale, 'step', 'years'); + const length = _.get(this.attrs.timeScale, 'length', moment()); - this.xScaleTime = d3.scaleLinear() + const xScaleTime = d3.scaleTime() .domain([zero.toDate(), length.toDate()]) + .nice() .range([0, calc.chartWidth]); this.xAxis = d3.axisBottom() - .scale(this.xScaleTime) - .ticks(5) + .scale(xScaleTime) + .ticks(this.getTimeTicksByStr(step)) .tickFormat(this.formatDates); } else { this.xAxis = d3.axisBottom(this.xScale) @@ -335,7 +335,36 @@ export class CdfChartD3 { } formatDates(ts) { - return moment(ts).format("dddd, MMMM Do YYYY, h:mm:ss a"); + return moment(ts).format("MMMM Do YYYY"); + } + + /** + * @param {string} step + * @returns {*} + */ + getTimeTicksByStr(step) { + switch (step) { + case "months": + return d3.timeMonth.every(1); + case "quarters": + return d3.timeMonth.every(3); + case "hours": + return d3.timeHour.every(1); + case "days": + return d3.timeDay.every(1); + case "seconds": + return d3.timeSecond.every(1); + case "years": + return d3.timeYear.every(1); + case "minutes": + return d3.timeMinute.every(1); + case "weeks": + return d3.timeWeek.every(1); + case "milliseconds": + return d3.timeMillisecond.every(1); + default: + return d3.timeYear.every(1); + } } } From dc8831def0d16764a398275da8d7ccb734d278bd Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 11:39:57 +0300 Subject: [PATCH 16/23] Ok, works --- src/components/charts/cdfChartD3.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index f91d234c..2e0e5db3 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -144,16 +144,13 @@ export class CdfChartD3 { } // Calculated properties. - // id for event handlings. const calc = {}; - calc.id = 'ID' + Math.floor(Math.random() * 1000000); calc.chartLeftMargin = attrs.marginLeft; calc.chartTopMargin = attrs.marginTop; calc.chartWidth = attrs.svgWidth - attrs.marginRight - attrs.marginLeft; calc.chartHeight = attrs.svgHeight - attrs.marginBottom - attrs.marginTop; - const areaColor = d3.scaleOrdinal().range(attrs.areaColors); - + const areaColorRange = d3.scaleOrdinal().range(attrs.areaColors); this.dataPoints = [this.getDatapoints('primary')]; // Scales. @@ -209,7 +206,7 @@ export class CdfChartD3 { }); } - // Line generator. + // Objects. const line = d3.line() .x(d => this.xScale(d.x)) .y(d => this.yScale(d.y)); @@ -247,7 +244,7 @@ export class CdfChartD3 { data: this.dataPoints, }) .attr('d', area) - .attr('fill', (d, i) => areaColor(i)) + .attr('fill', (d, i) => areaColorRange(i)) .attr('opacity', (d, i) => i === 0 ? 0.7 : 0.5); // Draw line. @@ -368,6 +365,11 @@ export class CdfChartD3 { } } +/** + * @todo: To rework it somehow. + * @param params + * @returns {*} + */ d3.selection.prototype.patternify = function patternify(params) { const selector = params.selector; const elementTag = params.tag; From 3dce5045aabb224d61e136d81dcf0a9dc348c38e Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 11:42:54 +0300 Subject: [PATCH 17/23] Ok, works --- src/components/charts/cdfChartD3.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index 2e0e5db3..b2f8852f 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -120,7 +120,7 @@ export class CdfChartD3 { * @param key * @returns {[]} */ - getDatapoints(key) { + getDataPoints(key) { const dt = []; const data = this.attrs.data[key]; const len = data.xs.length; @@ -135,7 +135,10 @@ export class CdfChartD3 { render() { const attrs = this.attrs; const container = d3.select(attrs.container); - if (container.node() === null) return; + if (container.node() === null) { + console.error('Container for D3 is not defined.'); + return; + } // Sets the width from the DOM element. const containerRect = container.node().getBoundingClientRect(); @@ -151,7 +154,7 @@ export class CdfChartD3 { calc.chartHeight = attrs.svgHeight - attrs.marginBottom - attrs.marginTop; const areaColorRange = d3.scaleOrdinal().range(attrs.areaColors); - this.dataPoints = [this.getDatapoints('primary')]; + this.dataPoints = [this.getDataPoints('primary')]; // Scales. const xMin = d3.min(attrs.data.primary.xs); From 2556bafe7287cfbaa0f168b0478d578dc731c0b8 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 12:24:38 +0300 Subject: [PATCH 18/23] Ok --- src/components/charts/cdfChartD3.js | 45 +++++++++++++++-------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index b2f8852f..8b5bec87 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -221,27 +221,27 @@ export class CdfChartD3 { // Add svg. const svg = container - .patternify({ tag: 'svg', selector: 'svg-chart-container' }) + .createObject({ tag: 'svg', selector: 'svg-chart-container' }) .attr('width', "100%") .attr('height', attrs.svgHeight) .attr('pointer-events', 'none'); // Add container g element. this.chart = svg - .patternify({ tag: 'g', selector: 'chart' }) + .createObject({ tag: 'g', selector: 'chart' }) .attr( 'transform', 'translate(' + calc.chartLeftMargin + ',' + calc.chartTopMargin + ')', ); // Add axis. - this.chart.patternify({ tag: 'g', selector: 'axis' }) + this.chart.createObject({ tag: 'g', selector: 'axis' }) .attr('transform', 'translate(' + 0 + ',' + calc.chartHeight + ')') .call(this.xAxis); // Draw area. this.chart - .patternify({ + .createObjectsByData({ tag: 'path', selector: 'area-path', data: this.dataPoints, @@ -253,7 +253,7 @@ export class CdfChartD3 { // Draw line. if (attrs.showDistributionLines) { this.chart - .patternify({ + .createObjectsByData({ tag: 'path', selector: 'line-path', data: this.dataPoints, @@ -266,7 +266,7 @@ export class CdfChartD3 { if (attrs.showVerticalLine) { this.chart - .patternify({ tag: 'line', selector: 'v-line' }) + .createObject({ tag: 'line', selector: 'v-line' }) .attr('x1', this.xScale(attrs.verticalLine)) .attr('x2', this.xScale(attrs.verticalLine)) .attr('y1', 0) @@ -277,7 +277,7 @@ export class CdfChartD3 { } this.hoverLine = this.chart - .patternify({ tag: 'line', selector: 'hover-line' }) + .createObject({ tag: 'line', selector: 'hover-line' }) .attr('x1', 0) .attr('x2', 0) .attr('y1', 0) @@ -290,7 +290,7 @@ export class CdfChartD3 { // Add drawing rectangle. const thi$ = this; this.chart - .patternify({ tag: 'rect', selector: 'mouse-rect' }) + .createObject({ tag: 'rect', selector: 'mouse-rect' }) .attr('width', calc.chartWidth) .attr('height', calc.chartHeight) .attr('fill', 'transparent') @@ -369,26 +369,29 @@ export class CdfChartD3 { } /** - * @todo: To rework it somehow. + * @docs: https://github.com/d3/d3-selection * @param params * @returns {*} */ -d3.selection.prototype.patternify = function patternify(params) { +d3.selection.prototype.createObject = function createObject(params) { const selector = params.selector; const elementTag = params.tag; - const data = params.data || [selector]; + return this.insert(elementTag).attr('class', selector); +}; - const selection = this.selectAll('.' + selector) - .data(data, (d, i) => { - if (typeof d === 'object' && d.id) return d.id; - return i; - }); +/** + * @docs: https://github.com/d3/d3-selection + * @param params + * @returns {*} + */ +d3.selection.prototype.createObjectsByData = function createObjectsByData(params) { + const selector = params.selector; + const elementTag = params.tag; + const data = params.data; - selection.exit().remove(); - - return selection + return this.selectAll('.' + selector) + .data(data) .enter() - .append(elementTag) - .merge(selection) + .insert(elementTag) .attr('class', selector); }; From 41c273328c4baf8dc5bae81cfbd14c7e7c1f2864 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 12:53:43 +0300 Subject: [PATCH 19/23] Adds an example --- src/components/charts/cdfChartD3.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index 8b5bec87..4f514893 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -241,7 +241,7 @@ export class CdfChartD3 { // Draw area. this.chart - .createObjectsByData({ + .createObjectsWithData({ tag: 'path', selector: 'area-path', data: this.dataPoints, @@ -253,7 +253,7 @@ export class CdfChartD3 { // Draw line. if (attrs.showDistributionLines) { this.chart - .createObjectsByData({ + .createObjectsWithData({ tag: 'path', selector: 'line-path', data: this.dataPoints, @@ -375,23 +375,31 @@ export class CdfChartD3 { */ d3.selection.prototype.createObject = function createObject(params) { const selector = params.selector; - const elementTag = params.tag; - return this.insert(elementTag).attr('class', selector); + const tag = params.tag; + return this.insert(tag).attr('class', selector); }; /** + * @example: + * This call example + * createObjectsByData({ + * tag: 'path', + * selector: 'line-path', + * data: this.dataPoints, + * }) + * will create a new tag "1,2,3". * @docs: https://github.com/d3/d3-selection * @param params * @returns {*} */ -d3.selection.prototype.createObjectsByData = function createObjectsByData(params) { +d3.selection.prototype.createObjectsWithData = function createObjectsWithData(params) { const selector = params.selector; - const elementTag = params.tag; + const tag = params.tag; const data = params.data; return this.selectAll('.' + selector) .data(data) .enter() - .insert(elementTag) + .insert(tag) .attr('class', selector); }; From 3c25e7f8890138124d6cf01c9119a09663d97e3b Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 13:03:45 +0300 Subject: [PATCH 20/23] Fixes command --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 53abf221..46d1340c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "parcel-build": "parcel build ./src/index.html --no-source-maps --no-autoinstall", "showcase": "PORT=12345 parcel showcase/index.html", "server": "moduleserve ./ --port 8000", - "predeploy": "yarn build && parcel build ./src/index.html --no-source-maps --no-autoinstall", + "predeploy": "parcel build ./src/index.html --no-source-maps --no-autoinstall", "deploy": "gh-pages -d dist", "test": "echo \"Error: no test specified\" && exit 1" }, From 8f2cb18edcbeb3ee3a7b752163bda3781aa23b81 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 13:07:50 +0300 Subject: [PATCH 21/23] Removes obsolete code --- src/interface/Prop.re | 15 --------------- src/models/GlobalCatastrophe.re | 2 +- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/interface/Prop.re b/src/interface/Prop.re index 157b3b9a..c2a33e23 100644 --- a/src/interface/Prop.re +++ b/src/interface/Prop.re @@ -221,21 +221,6 @@ module TypeWithMetadata = { ~assumptionType=ASSUMPTION, (), ); - - let nextTenYears = - make( - ~id="nextTenYears", - ~name="Next Ten Years", - ~description=None, - ~type_= - DateTime({ - default: Some(MomentRe.momentNow()), - min: Some(MomentRe.momentNow()), - max: Some(MomentRe.momentNow()), - }), - ~assumptionType=ASSUMPTION, - (), - ); }; module Model = { diff --git a/src/models/GlobalCatastrophe.re b/src/models/GlobalCatastrophe.re index d76270b4..92c42aa5 100644 --- a/src/models/GlobalCatastrophe.re +++ b/src/models/GlobalCatastrophe.re @@ -35,7 +35,7 @@ module Interface = { description: "The chances of having at least one catastrophe per year in the future, assuming no other catastrophe until then.", version: "1.0.0", author: "Ozzie Gooen", - inputTypes: [|TypeWithMetadata.nextTenYears|], + inputTypes: [|TypeWithMetadata.currentYear|], outputTypes: [||], run, }; From 36cc3ec61aa937f8dec2ab7bdaf7538d65ac1f74 Mon Sep 17 00:00:00 2001 From: Roman Galochkin Date: Wed, 19 Feb 2020 15:06:41 +0300 Subject: [PATCH 22/23] Fixes the vector --- showcase/entries/Continuous.re | 11 +---------- src/components/charts/cdfChartD3.js | 16 +++++++++------- src/core/DistributionTypes.re | 8 ++------ src/core/TimeTypes.re | 11 +++++------ src/models/EAFunds.re | 7 +------ src/models/GlobalCatastrophe.re | 7 +------ 6 files changed, 19 insertions(+), 41 deletions(-) diff --git a/showcase/entries/Continuous.re b/showcase/entries/Continuous.re index 0a1cb4af..aabbc2b0 100644 --- a/showcase/entries/Continuous.re +++ b/showcase/entries/Continuous.re @@ -18,16 +18,7 @@ let timeDist = ~generationSource=GuesstimatorString("mm(3, normal(5,1), [.5,.5])"), ~probabilityType=Pdf, ~domain=Complete, - ~unit= - TimeDistribution({ - zero: MomentRe.momentNow(), - step: `years, - length: - MomentRe.Moment.add( - ~duration=MomentRe.duration(5., `years), - MomentRe.momentNow(), - ), - }), + ~unit=TimeDistribution({zero: MomentRe.momentNow(), unit: `years}), (), ) |> GenericDistribution.renderIfNeeded(~sampleCount=3000); diff --git a/src/components/charts/cdfChartD3.js b/src/components/charts/cdfChartD3.js index 4f514893..00dcb952 100644 --- a/src/components/charts/cdfChartD3.js +++ b/src/components/charts/cdfChartD3.js @@ -181,17 +181,19 @@ export class CdfChartD3 { // Axis generator. if (!!this.attrs.timeScale) { const zero = _.get(this.attrs.timeScale, 'zero', moment()); - const step = _.get(this.attrs.timeScale, 'step', 'years'); - const length = _.get(this.attrs.timeScale, 'length', moment()); + const unit = _.get(this.attrs.timeScale, 'unit', 'years'); + const diff = Math.abs(xMax - xMin); + const left = zero.clone().add(xMin, unit); + const right = left.clone().add(diff, unit); const xScaleTime = d3.scaleTime() - .domain([zero.toDate(), length.toDate()]) + .domain([left.toDate(), right.toDate()]) .nice() .range([0, calc.chartWidth]); this.xAxis = d3.axisBottom() .scale(xScaleTime) - .ticks(this.getTimeTicksByStr(step)) + .ticks(this.getTimeTicksByStr(unit)) .tickFormat(this.formatDates); } else { this.xAxis = d3.axisBottom(this.xScale) @@ -339,11 +341,11 @@ export class CdfChartD3 { } /** - * @param {string} step + * @param {string} unit * @returns {*} */ - getTimeTicksByStr(step) { - switch (step) { + getTimeTicksByStr(unit) { + switch (unit) { case "months": return d3.timeMonth.every(1); case "quarters": diff --git a/src/core/DistributionTypes.re b/src/core/DistributionTypes.re index 0176faff..082e4704 100644 --- a/src/core/DistributionTypes.re +++ b/src/core/DistributionTypes.re @@ -51,13 +51,9 @@ type genericDistribution = { module DistributionUnit = { let toJson = (distributionUnit: distributionUnit) => switch (distributionUnit) { - | TimeDistribution({zero, step, length}) => + | TimeDistribution({zero, unit}) => Js.Null.fromOption( - Some({ - "zero": zero, - "step": step |> TimeTypes.TimeUnit.toString, - "length": length, - }), + Some({"zero": zero, "unit": unit |> TimeTypes.TimeUnit.toString}), ) | _ => Js.Null.fromOption(None) }; diff --git a/src/core/TimeTypes.re b/src/core/TimeTypes.re index b0d34c0a..75e158e2 100644 --- a/src/core/TimeTypes.re +++ b/src/core/TimeTypes.re @@ -12,8 +12,7 @@ type timeUnit = [ type timeVector = { zero: MomentRe.Moment.t, - length: MomentRe.Moment.t, - step: timeUnit, + unit: timeUnit, }; type timePoint = { @@ -43,12 +42,12 @@ module TimePoint = { timePoint.timeVector.zero |> MomentRe.Moment.add( ~duration= - MomentRe.duration(timePoint.value, timePoint.timeVector.step), + MomentRe.duration(timePoint.value, timePoint.timeVector.unit), ); }; let fromMoment = (timeVector: timeVector, moment: MomentRe.Moment.t) => - MomentRe.diff(timeVector.zero, moment, timeVector.step); + MomentRe.diff(timeVector.zero, moment, timeVector.unit); }; module RelativeTimePoint = { @@ -61,7 +60,7 @@ module RelativeTimePoint = { | Time(r) => r | XValue(r) => timeVector.zero - |> MomentRe.Moment.add(~duration=MomentRe.duration(r, timeVector.step)) + |> MomentRe.Moment.add(~duration=MomentRe.duration(r, timeVector.unit)) }; let _timeToX = (time, timeStart, timeUnit) => @@ -69,7 +68,7 @@ module RelativeTimePoint = { let toXValue = (timeVector: timeVector, timeInVector: timeInVector) => switch (timeInVector) { - | Time(r) => _timeToX(r, timeVector.zero, timeVector.step) + | Time(r) => _timeToX(r, timeVector.zero, timeVector.unit) | XValue(r) => r }; }; \ No newline at end of file diff --git a/src/models/EAFunds.re b/src/models/EAFunds.re index 82bd736d..042dafc4 100644 --- a/src/models/EAFunds.re +++ b/src/models/EAFunds.re @@ -154,12 +154,7 @@ module Model = { ), ~probabilityType=Cdf, ~domain=RightLimited({xPoint: 100., excludingProbabilityMass: 0.3}), - ~unit= - TimeDistribution({ - zero: currentDateTime, - step: `years, - length: currentDateTime, - }), + ~unit=TimeDistribution({zero: currentDateTime, unit: `years}), (), ), ) diff --git a/src/models/GlobalCatastrophe.re b/src/models/GlobalCatastrophe.re index 92c42aa5..9577da4b 100644 --- a/src/models/GlobalCatastrophe.re +++ b/src/models/GlobalCatastrophe.re @@ -7,12 +7,7 @@ module Model = { ~generationSource=GuesstimatorString(guesstimatorString), ~probabilityType=Cdf, ~domain=RightLimited({xPoint: 200., excludingProbabilityMass: 0.3}), - ~unit= - TimeDistribution({ - zero: currentDateTime, - step: `years, - length: currentDateTime, - }), + ~unit=TimeDistribution({zero: currentDateTime, unit: `years}), (), ); Prop.Value.GenericDistribution(genericDistribution); From b2d614dc279f8866cad8f2fac7aced46518288cc Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 19 Feb 2020 12:18:12 +0000 Subject: [PATCH 23/23] Updated yarn.lock file --- yarn.lock | 992 ++---------------------------------------------------- 1 file changed, 34 insertions(+), 958 deletions(-) diff --git a/yarn.lock b/yarn.lock index ee19ca19..7e3a8627 100644 --- a/yarn.lock +++ b/yarn.lock @@ -98,7 +98,7 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.3.4", "@babel/generator@^7.4.0", "@babel/generator@^7.4.4", "@babel/generator@^7.8.4": +"@babel/generator@^7.3.4", "@babel/generator@^7.4.4", "@babel/generator@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== @@ -313,7 +313,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" integrity sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ== -"@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.7.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": +"@babel/parser@^7.1.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4", "@babel/parser@^7.4.4", "@babel/parser@^7.7.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== @@ -883,7 +883,7 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" -"@babel/template@^7.2.2", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.7.4", "@babel/template@^7.8.3": +"@babel/template@^7.2.2", "@babel/template@^7.4.4", "@babel/template@^7.7.4", "@babel/template@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8" integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ== @@ -907,7 +907,7 @@ globals "^11.1.0" lodash "^4.17.11" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.3.4", "@babel/traverse@^7.4.4", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== @@ -922,7 +922,7 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.8.3": +"@babel/types@^7.0.0", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.4", "@babel/types@^7.4.4", "@babel/types@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c" integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg== @@ -1074,13 +1074,6 @@ mathjs "5.10.3" parcel "1.12.3" -"@glennsl/bs-jest@^0.4.9": - version "0.4.9" - resolved "https://registry.yarnpkg.com/@glennsl/bs-jest/-/bs-jest-0.4.9.tgz#a23af2668dda05947ce9c043fd5a7b295e91cef7" - integrity sha512-WAqXMcI6WL7JVvGdakBr1tcw8BYWXHrOZfuA1myMkFggzAv24H/OEwyqaU7x+yXd4cJaBUY8v3SjQ3Pnk/zqsg== - dependencies: - jest "^24.3.1" - "@iarna/toml@^2.2.0": version "2.2.3" resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.3.tgz#f060bf6eaafae4d56a7dac618980838b0696e2ab" @@ -1101,15 +1094,6 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^24.7.1", "@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" - "@jest/console@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.1.0.tgz#1fc765d44a1e11aec5029c08e798246bd37075ab" @@ -1120,40 +1104,6 @@ jest-util "^25.1.0" slash "^3.0.0" -"@jest/core@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" - integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== - dependencies: - "@jest/console" "^24.7.1" - "@jest/reporters" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-changed-files "^24.9.0" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-resolve-dependencies "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - jest-watcher "^24.9.0" - micromatch "^3.1.10" - p-each-series "^1.0.0" - realpath-native "^1.1.0" - rimraf "^2.5.4" - slash "^2.0.0" - strip-ansi "^5.0.0" - "@jest/core@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.1.0.tgz#3d4634fc3348bb2d7532915d67781cdac0869e47" @@ -1188,16 +1138,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" - integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== - dependencies: - "@jest/fake-timers" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - "@jest/environment@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.1.0.tgz#4a97f64770c9d075f5d2b662b5169207f0a3f787" @@ -1207,15 +1147,6 @@ "@jest/types" "^25.1.0" jest-mock "^25.1.0" -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== - dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - "@jest/fake-timers@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.1.0.tgz#a1e0eff51ffdbb13ee81f35b52e0c1c11a350ce8" @@ -1227,33 +1158,6 @@ jest-util "^25.1.0" lolex "^5.0.0" -"@jest/reporters@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" - integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - istanbul-lib-coverage "^2.0.2" - istanbul-lib-instrument "^3.0.1" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.1" - istanbul-reports "^2.2.6" - jest-haste-map "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - node-notifier "^5.4.2" - slash "^2.0.0" - source-map "^0.6.0" - string-length "^2.0.0" - "@jest/reporters@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.1.0.tgz#9178ecf136c48f125674ac328f82ddea46e482b0" @@ -1287,15 +1191,6 @@ optionalDependencies: node-notifier "^6.0.0" -"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" - "@jest/source-map@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.1.0.tgz#b012e6c469ccdbc379413f5c1b1ffb7ba7034fb0" @@ -1305,15 +1200,6 @@ graceful-fs "^4.2.3" source-map "^0.6.0" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== - dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/istanbul-lib-coverage" "^2.0.0" - "@jest/test-result@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.1.0.tgz#847af2972c1df9822a8200457e64be4ff62821f7" @@ -1325,16 +1211,6 @@ "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" - integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== - dependencies: - "@jest/test-result" "^24.9.0" - jest-haste-map "^24.9.0" - jest-runner "^24.9.0" - jest-runtime "^24.9.0" - "@jest/test-sequencer@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.1.0.tgz#4df47208542f0065f356fcdb80026e3c042851ab" @@ -1345,28 +1221,6 @@ jest-runner "^25.1.0" jest-runtime "^25.1.0" -"@jest/transform@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" - integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^24.9.0" - babel-plugin-istanbul "^5.1.0" - chalk "^2.0.1" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.15" - jest-haste-map "^24.9.0" - jest-regex-util "^24.9.0" - jest-util "^24.9.0" - micromatch "^3.1.10" - pirates "^4.0.1" - realpath-native "^1.1.0" - slash "^2.0.0" - source-map "^0.6.1" - write-file-atomic "2.4.1" - "@jest/transform@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.1.0.tgz#221f354f512b4628d88ce776d5b9e601028ea9da" @@ -1389,15 +1243,6 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - "@jest/types@^25.1.0": version "25.1.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.1.0.tgz#b26831916f0d7c381e11dbb5e103a72aed1b4395" @@ -1630,13 +1475,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== -"@types/yargs@^13.0.0": - version "13.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99" - integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^15.0.0": version "15.0.3" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.3.tgz#41453a0bc7ab393e995d1f5451455638edbd2baf" @@ -1679,7 +1517,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-globals@^4.1.0, acorn-globals@^4.3.0, acorn-globals@^4.3.2: +acorn-globals@^4.3.0, acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== @@ -1706,7 +1544,7 @@ acorn-walk@^7.0.0: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== -acorn@^5.0.0, acorn@^5.5.3: +acorn@^5.0.0: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -1743,11 +1581,6 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-escapes@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" @@ -1765,7 +1598,7 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.0.0, ansi-regex@^4.1.0: +ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== @@ -2146,20 +1979,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== -babel-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" - integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== - dependencies: - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/babel__core" "^7.1.0" - babel-plugin-istanbul "^5.1.0" - babel-preset-jest "^24.9.0" - chalk "^2.4.2" - slash "^2.0.0" - -babel-jest@^25.1.0: +babel-jest@25.1.0, babel-jest@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.1.0.tgz#206093ac380a4b78c4404a05b3277391278f80fb" integrity sha512-tz0VxUhhOE2y+g8R2oFrO/2VtVjA1lkJeavlhExuRBg3LdNJY9gwQ+Vcvqt9+cqy71MCTJhewvTB7Qtnnr9SWg== @@ -2195,16 +2015,6 @@ babel-plugin-emotion@^10.0.27, babel-plugin-emotion@^10.0.9: find-root "^1.1.0" source-map "^0.5.7" -babel-plugin-istanbul@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" - integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - find-up "^3.0.0" - istanbul-lib-instrument "^3.3.0" - test-exclude "^5.2.3" - babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" @@ -2216,13 +2026,6 @@ babel-plugin-istanbul@^6.0.0: istanbul-lib-instrument "^4.0.0" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" - integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== - dependencies: - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.1.0.tgz#fb62d7b3b53eb36c97d1bc7fec2072f9bd115981" @@ -2244,14 +2047,6 @@ babel-plugin-syntax-jsx@^6.18.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= -babel-preset-jest@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" - integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== - dependencies: - "@babel/plugin-syntax-object-rest-spread" "^7.0.0" - babel-plugin-jest-hoist "^24.9.0" - babel-preset-jest@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.1.0.tgz#d0aebfebb2177a21cde710996fce8486d34f1d33" @@ -3275,7 +3070,7 @@ csso@^4.0.2: dependencies: css-tree "1.0.0-alpha.37" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4, cssom@~0.3.6: +cssom@0.3.x, cssom@^0.3.4, cssom@~0.3.6: version "0.3.8" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== @@ -3285,7 +3080,7 @@ cssom@^0.4.1: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -cssstyle@^1.0.0, cssstyle@^1.1.1: +cssstyle@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== @@ -3596,7 +3391,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0, data-urls@^1.1.0: +data-urls@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== @@ -3723,11 +3518,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -3742,11 +3532,6 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.1.1" -diff-sequences@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" - integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== - diff-sequences@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.1.0.tgz#fd29a46f1c913fd66c22645dc75bffbe43051f32" @@ -4053,7 +3838,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.11.0, escodegen@^1.11.1, escodegen@^1.9.1: +escodegen@^1.11.0, escodegen@^1.11.1: version "1.14.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== @@ -4177,18 +3962,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" - integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== - dependencies: - "@jest/types" "^24.9.0" - ansi-styles "^3.2.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-regex-util "^24.9.0" - expect@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/expect/-/expect-25.1.0.tgz#7e8d7b06a53f7d66ec927278db3304254ee683ee" @@ -4607,7 +4380,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== @@ -4652,7 +4425,7 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~5.1.0, har-validator@~5.1.3: +har-validator@~5.1.0: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -4767,11 +4540,6 @@ hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -hosted-git-info@^2.1.4: - version "2.8.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" - integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== - hsl-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" @@ -4940,14 +4708,6 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -5316,29 +5076,11 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - istanbul-lib-instrument@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" @@ -5352,15 +5094,6 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-coverage "^3.0.0" semver "^6.3.0" -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -5370,17 +5103,6 @@ istanbul-lib-report@^3.0.0: make-dir "^3.0.0" supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - istanbul-lib-source-maps@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" @@ -5390,13 +5112,6 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== - dependencies: - html-escaper "^2.0.0" - istanbul-reports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.0.tgz#d4d16d035db99581b6194e119bbf36c963c5eb70" @@ -5415,15 +5130,6 @@ javascript-natural-sort@0.7.1: resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k= -jest-changed-files@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" - integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== - dependencies: - "@jest/types" "^24.9.0" - execa "^1.0.0" - throat "^4.0.0" - jest-changed-files@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.1.0.tgz#73dae9a7d9949fdfa5c278438ce8f2ff3ec78131" @@ -5433,25 +5139,6 @@ jest-changed-files@^25.1.0: execa "^3.2.0" throat "^5.0.0" -jest-cli@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" - integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== - dependencies: - "@jest/core" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - exit "^0.1.2" - import-local "^2.0.0" - is-ci "^2.0.0" - jest-config "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - prompts "^2.0.1" - realpath-native "^1.1.0" - yargs "^13.3.0" - jest-cli@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.1.0.tgz#75f0b09cf6c4f39360906bf78d580be1048e4372" @@ -5471,29 +5158,6 @@ jest-cli@^25.1.0: realpath-native "^1.1.0" yargs "^15.0.0" -jest-config@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" - integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^24.9.0" - "@jest/types" "^24.9.0" - babel-jest "^24.9.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^24.9.0" - jest-environment-node "^24.9.0" - jest-get-type "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - micromatch "^3.1.10" - pretty-format "^24.9.0" - realpath-native "^1.1.0" - jest-config@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.1.0.tgz#d114e4778c045d3ef239452213b7ad3ec1cbea90" @@ -5517,16 +5181,6 @@ jest-config@^25.1.0: pretty-format "^25.1.0" realpath-native "^1.1.0" -jest-diff@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" - integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== - dependencies: - chalk "^2.0.1" - diff-sequences "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - jest-diff@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.1.0.tgz#58b827e63edea1bc80c1de952b80cec9ac50e1ad" @@ -5537,13 +5191,6 @@ jest-diff@^25.1.0: jest-get-type "^25.1.0" pretty-format "^25.1.0" -jest-docblock@^24.3.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" - integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== - dependencies: - detect-newline "^2.1.0" - jest-docblock@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.1.0.tgz#0f44bea3d6ca6dfc38373d465b347c8818eccb64" @@ -5551,17 +5198,6 @@ jest-docblock@^25.1.0: dependencies: detect-newline "^3.0.0" -jest-each@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" - integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== - dependencies: - "@jest/types" "^24.9.0" - chalk "^2.0.1" - jest-get-type "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - jest-each@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.1.0.tgz#a6b260992bdf451c2d64a0ccbb3ac25e9b44c26a" @@ -5573,18 +5209,6 @@ jest-each@^25.1.0: jest-util "^25.1.0" pretty-format "^25.1.0" -jest-environment-jsdom@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" - integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jsdom "^11.5.1" - jest-environment-jsdom@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.1.0.tgz#6777ab8b3e90fd076801efd3bff8e98694ab43c3" @@ -5597,17 +5221,6 @@ jest-environment-jsdom@^25.1.0: jest-util "^25.1.0" jsdom "^15.1.1" -jest-environment-node@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" - integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== - dependencies: - "@jest/environment" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/types" "^24.9.0" - jest-mock "^24.9.0" - jest-util "^24.9.0" - jest-environment-node@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.1.0.tgz#797bd89b378cf0bd794dc8e3dca6ef21126776db" @@ -5619,35 +5232,11 @@ jest-environment-node@^25.1.0: jest-mock "^25.1.0" jest-util "^25.1.0" -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== - jest-get-type@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.1.0.tgz#1cfe5fc34f148dc3a8a3b7275f6b9ce9e2e8a876" integrity sha512-yWkBnT+5tMr8ANB6V+OjmrIJufHtCAqI5ic2H40v+tRqxDmE0PGnIiTyvRWFOMtmVHYpwRqyazDbTnhpjsGvLw== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== - dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" - fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^1.2.7" - jest-haste-map@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.1.0.tgz#ae12163d284f19906260aa51fd405b5b2e5a4ad3" @@ -5666,28 +5255,6 @@ jest-haste-map@^25.1.0: optionalDependencies: fsevents "^2.1.2" -jest-jasmine2@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" - integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^24.9.0" - is-generator-fn "^2.0.0" - jest-each "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-runtime "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - pretty-format "^24.9.0" - throat "^4.0.0" - jest-jasmine2@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.1.0.tgz#681b59158a430f08d5d0c1cce4f01353e4b48137" @@ -5711,14 +5278,6 @@ jest-jasmine2@^25.1.0: pretty-format "^25.1.0" throat "^5.0.0" -jest-leak-detector@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" - integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== - dependencies: - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - jest-leak-detector@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.1.0.tgz#ed6872d15aa1c72c0732d01bd073dacc7c38b5c6" @@ -5727,16 +5286,6 @@ jest-leak-detector@^25.1.0: jest-get-type "^25.1.0" pretty-format "^25.1.0" -jest-matcher-utils@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" - integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== - dependencies: - chalk "^2.0.1" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - pretty-format "^24.9.0" - jest-matcher-utils@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.1.0.tgz#fa5996c45c7193a3c24e73066fc14acdee020220" @@ -5747,20 +5296,6 @@ jest-matcher-utils@^25.1.0: jest-get-type "^25.1.0" pretty-format "^25.1.0" -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - jest-message-util@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.1.0.tgz#702a9a5cb05c144b9aa73f06e17faa219389845e" @@ -5775,13 +5310,6 @@ jest-message-util@^25.1.0: slash "^3.0.0" stack-utils "^1.0.1" -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== - dependencies: - "@jest/types" "^24.9.0" - jest-mock@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.1.0.tgz#411d549e1b326b7350b2e97303a64715c28615fd" @@ -5794,25 +5322,11 @@ jest-pnp-resolver@^1.2.1: resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== -jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" - integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== - jest-regex-util@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.1.0.tgz#efaf75914267741838e01de24da07b2192d16d87" integrity sha512-9lShaDmDpqwg+xAd73zHydKrBbbrIi08Kk9YryBEBybQFg/lBWR/2BDjjiSE7KIppM9C5+c03XiDaZ+m4Pgs1w== -jest-resolve-dependencies@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" - integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== - dependencies: - "@jest/types" "^24.9.0" - jest-regex-util "^24.3.0" - jest-snapshot "^24.9.0" - jest-resolve-dependencies@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.1.0.tgz#8a1789ec64eb6aaa77fd579a1066a783437e70d2" @@ -5822,17 +5336,6 @@ jest-resolve-dependencies@^25.1.0: jest-regex-util "^25.1.0" jest-snapshot "^25.1.0" -jest-resolve@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" - integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== - dependencies: - "@jest/types" "^24.9.0" - browser-resolve "^1.11.3" - chalk "^2.0.1" - jest-pnp-resolver "^1.2.1" - realpath-native "^1.1.0" - jest-resolve@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.1.0.tgz#23d8b6a4892362baf2662877c66aa241fa2eaea3" @@ -5844,31 +5347,6 @@ jest-resolve@^25.1.0: jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-runner@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" - integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - chalk "^2.4.2" - exit "^0.1.2" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-docblock "^24.3.0" - jest-haste-map "^24.9.0" - jest-jasmine2 "^24.9.0" - jest-leak-detector "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - jest-runtime "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.6.0" - source-map-support "^0.5.6" - throat "^4.0.0" - jest-runner@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.1.0.tgz#fef433a4d42c89ab0a6b6b268e4a4fbe6b26e812" @@ -5894,35 +5372,6 @@ jest-runner@^25.1.0: source-map-support "^0.5.6" throat "^5.0.0" -jest-runtime@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" - integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== - dependencies: - "@jest/console" "^24.7.1" - "@jest/environment" "^24.9.0" - "@jest/source-map" "^24.3.0" - "@jest/transform" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.1.15" - jest-config "^24.9.0" - jest-haste-map "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" - jest-regex-util "^24.3.0" - jest-resolve "^24.9.0" - jest-snapshot "^24.9.0" - jest-util "^24.9.0" - jest-validate "^24.9.0" - realpath-native "^1.1.0" - slash "^2.0.0" - strip-bom "^3.0.0" - yargs "^13.3.0" - jest-runtime@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.1.0.tgz#02683218f2f95aad0f2ec1c9cdb28c1dc0ec0314" @@ -5954,35 +5403,11 @@ jest-runtime@^25.1.0: strip-bom "^4.0.0" yargs "^15.0.0" -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== - jest-serializer@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.1.0.tgz#73096ba90e07d19dec4a0c1dd89c355e2f129e5d" integrity sha512-20Wkq5j7o84kssBwvyuJ7Xhn7hdPeTXndnwIblKDR2/sy1SUm6rWWiG9kSCgJPIfkDScJCIsTtOKdlzfIHOfKA== -jest-snapshot@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" - integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^24.9.0" - chalk "^2.0.1" - expect "^24.9.0" - jest-diff "^24.9.0" - jest-get-type "^24.9.0" - jest-matcher-utils "^24.9.0" - jest-message-util "^24.9.0" - jest-resolve "^24.9.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^24.9.0" - semver "^6.2.0" - jest-snapshot@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.1.0.tgz#d5880bd4b31faea100454608e15f8d77b9d221d9" @@ -6002,24 +5427,6 @@ jest-snapshot@^25.1.0: pretty-format "^25.1.0" semver "^7.1.1" -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" - is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" - jest-util@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.1.0.tgz#7bc56f7b2abd534910e9fa252692f50624c897d9" @@ -6030,18 +5437,6 @@ jest-util@^25.1.0: is-ci "^2.0.0" mkdirp "^0.5.1" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== - dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" - leven "^3.1.0" - pretty-format "^24.9.0" - jest-validate@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.1.0.tgz#1469fa19f627bb0a9a98e289f3e9ab6a668c732a" @@ -6054,19 +5449,6 @@ jest-validate@^25.1.0: leven "^3.1.0" pretty-format "^25.1.0" -jest-watcher@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" - integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== - dependencies: - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/yargs" "^13.0.0" - ansi-escapes "^3.0.0" - chalk "^2.0.1" - jest-util "^24.9.0" - string-length "^2.0.0" - jest-watcher@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.1.0.tgz#97cb4a937f676f64c9fad2d07b824c56808e9806" @@ -6079,14 +5461,6 @@ jest-watcher@^25.1.0: jest-util "^25.1.0" string-length "^3.1.0" -jest-worker@^24.6.0, jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - jest-worker@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.1.0.tgz#75d038bad6fdf58eba0d2ec1835856c497e3907a" @@ -6095,14 +5469,6 @@ jest-worker@^25.1.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest@^24.3.1: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" - integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== - dependencies: - import-local "^2.0.0" - jest-cli "^24.9.0" - jest@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/jest/-/jest-25.1.0.tgz#b85ef1ddba2fdb00d295deebbd13567106d35be9" @@ -6151,38 +5517,6 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - jsdom@^14.1.0: version "14.1.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-14.1.0.tgz#916463b6094956b0a6c1782c94e380cd30e1981b" @@ -6344,24 +5678,15 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -lenses-ppx@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/lenses-ppx/-/lenses-ppx-5.1.0.tgz#74882abc99f09fdb03daf33fd4ee79272424be7a" - integrity sha512-q+5yxYvvF8czdfRkBXYoqBeDUJkLQz6VUkPiFmUIdyMm6HWPvKnLJYPF1HRHeTp+KtkblBY5sHvmOWBfEpUGnw== kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -lenses-ppx@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lenses-ppx/-/lenses-ppx-4.0.0.tgz#bab5f993b334928fa83ee85b8413b0ea9a95063f" - integrity sha512-QhUzfkqHni6b2PhGJqNYbKQOZuvs9cyv2w+3xR5AiDS+Z0NaGX03wcKtEY39if8xEYtcv43yJ8eDfeOqKreYVQ== +lenses-ppx@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/lenses-ppx/-/lenses-ppx-5.1.0.tgz#74882abc99f09fdb03daf33fd4ee79272424be7a" + integrity sha512-q+5yxYvvF8czdfRkBXYoqBeDUJkLQz6VUkPiFmUIdyMm6HWPvKnLJYPF1HRHeTp+KtkblBY5sHvmOWBfEpUGnw== less@3.10.3: version "3.10.3" @@ -6404,16 +5729,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -6515,14 +5830,6 @@ magic-string@^0.22.4: dependencies: vlq "^0.2.2" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" @@ -6863,17 +6170,6 @@ node-modules-regexp@^1.0.0: resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.4.2: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - node-notifier@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" @@ -6905,16 +6201,6 @@ normalize-html-whitespace@^1.0.0: resolved "https://registry.yarnpkg.com/normalize-html-whitespace/-/normalize-html-whitespace-1.0.0.tgz#5e3c8e192f1b06c3b9eee4b7e7f28854c7601e34" integrity sha512-9ui7CGtOOlehQu0t/OhhlmDyc71mKVlv+4vF+me4iZLPrNtRL2xoquEdfZxasC/bdQi/Hr3iTrpyRKIG+ocabA== -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -6978,7 +6264,7 @@ num2fraction@^1.2.2: resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= -nwsapi@^2.0.7, nwsapi@^2.1.3, nwsapi@^2.2.0: +nwsapi@^2.1.3, nwsapi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== @@ -7155,13 +6441,6 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-each-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" - integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= - dependencies: - p-reduce "^1.0.0" - p-each-series@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" @@ -7198,11 +6477,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -7390,11 +6664,6 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - parse5@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" @@ -7450,13 +6719,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -7498,16 +6760,6 @@ pify@^2.0.0, pify@^2.3.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -7527,13 +6779,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -7994,16 +7239,6 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - pretty-format@^25.1.0: version "25.1.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.1.0.tgz#ed869bdaec1356fc5ae45de045e2c8ec7b07b0c8" @@ -8673,7 +7908,7 @@ react-icons-kit@^1.3.1: camel-case "^3.0.0" prop-types "^15.5.8" -react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -8747,23 +7982,6 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.3, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -8998,32 +8216,6 @@ request@^2.83.0, request@^2.88.0: tunnel-agent "^0.6.0" uuid "^3.3.2" -request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -9044,13 +8236,6 @@ resize-observer-polyfill@^1.5.0, resize-observer-polyfill@^1.5.1: resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -9083,7 +8268,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.5, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0: +resolve@^1.1.5, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.4.0: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -9118,7 +8303,7 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9214,7 +8399,7 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@^1.2.4, sax@~1.2.4: +sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -9244,17 +8429,17 @@ seed-random@2.2.0: resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: +semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -9410,11 +8595,6 @@ sisteransi@^1.0.4: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.4.tgz#386713f1ef688c7c0304dc4c0632898941cad2e3" integrity sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig== -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -9506,32 +8686,6 @@ sourcemap-codec@^1.4.1: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -9672,14 +8826,6 @@ string-convert@^0.2.0: resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" integrity sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c= -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - string-length@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" @@ -9764,11 +8910,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -9939,16 +9080,6 @@ terser@^4.3.9: source-map "~0.6.1" source-map-support "~0.5.12" -test-exclude@^5.2.3: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -9958,11 +9089,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -10070,7 +9196,7 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@^2.5.0, tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -10364,14 +9490,6 @@ v8-to-istanbul@^4.0.1: convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vendors@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" @@ -10445,7 +9563,7 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== @@ -10457,20 +9575,11 @@ whatwg-fetch@>=0.10.0: resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" @@ -10485,7 +9594,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10527,15 +9636,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" - integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz#558328352e673b5bb192cf86500d60b230667d4b" @@ -10597,14 +9697,6 @@ yaml@^1.7.2: dependencies: "@babel/runtime" "^7.6.3" -yargs-parser@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^15.0.0: version "15.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" @@ -10621,22 +9713,6 @@ yargs-parser@^16.1.0: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" - integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.1" - yargs@^14.0.0: version "14.2.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5"