From bafcb4f7b8244161f5bc1466589225db006e10a6 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 23 May 2022 10:46:25 -0400 Subject: [PATCH 01/60] Cleaned up `Scoring` file: no dispatch yet Value: [1e-4 to 6e-2] --- .../PointSetDist/PointSetDist_Scoring.res | 140 +++++++++++++----- 1 file changed, 106 insertions(+), 34 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 532bc76c..6d843a9d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -1,46 +1,118 @@ -module KLDivergence = { - let logFn = Js.Math.log // base e - let integrand = (predictionElement: float, answerElement: float): result< +type t = PointSetDist.pointSetDist +type continuousShape = PointSetTypes.continuousShape +type discreteShape = PointSetTypes.discreteShape +type mixedShape = PointSetTypes.mixedShape +type scalar = float +type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} +type scoreArgs = + | DistEstimateDistAnswer(abstractScoreArgs) + | DistEstimateScalarAnswer(abstractScoreArgs) + | ScalarEstimateDistAnswer(abstractScoreArgs) + | ScalarEstimateScalarAnswer(abstractScoreArgs) +let logFn = Js.Math.log // base e +let minusScaledLogOfQuot = (~esti, ~answ): result => { + let quot = esti /. answ + quot < 0.0 ? Error(Operation.ComplexNumberError) : Ok(-.answ *. logFn(quot)) +} + +module WithDistAnswer = { + // The Kullback-Leibler divergence + let integrand = (estimateElement: float, answerElement: float): result< float, Operation.Error.t, > => // We decided that negative infinity, not an error at answerElement = 0.0, is a desirable value. if answerElement == 0.0 { Ok(0.0) - } else if predictionElement == 0.0 { + } else if estimateElement == 0.0 { Ok(infinity) } else { - let quot = predictionElement /. answerElement - quot < 0.0 ? Error(Operation.ComplexNumberError) : Ok(-.answerElement *. logFn(quot)) + minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) + } + + let sum = (~estimate: t, ~answer: t, ~integrateFn) => + PointSetDist.combinePointwise(integrand, estimate, answer)->E.R2.fmap(integrateFn) + + let sumWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~integrateFn): result< + float, + Operation.Error.t, + > => { + let kl1 = sum(~estimate, ~answer, ~integrateFn) + let kl2 = sum(~estimate=prior, ~answer, ~integrateFn) + E.R.merge(kl1, kl2)->E.R2.fmap(((k1', k2')) => kl1' -. kl2') + } +} + +module WithScalarAnswer = { + let score' = (~estimatePdf: float => float, ~answer: float): result => { + let density = answer->estimatePdf + if density < 0.0 { + Operation.PdfInvalidError->Error + } else if density == 0.0 { + infinity->Ok + } else { + density->logFn->(x => -.x)->Ok + } + } + let scoreWithPrior' = ( + ~estimatePdf: float => float, + ~answer: float, + ~priorPdf: float => float, + ): result => { + let numerator = answer->estimatePdf + let priorDensityOfAnswer = answer->priorPdf + if numerator < 0.0 || priorDensityOfAnswer < 0.0 { + Operation.PdfInvalidError->Error + } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { + infinity->Ok + } else { + minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) + } + } + let score = (~estimate: t, ~answer: t): result => { + let estimatePdf = x => XYShape.XtoY.linear(x, estimate.xyShape) + score'(~estimatePdf, ~answer) + } + let scoreWithPrior = (~estimate: t, ~answer: t, ~prior: t): result => { + let estimatePdf = x => XYShape.XtoY.linear(x, estimate.xyShape) + let priorPdf = x => XYShape.XtoY.linear(x, prior.xyShape) + scoreWithPrior'(~estimatePdf, ~answer, ~priorPdf) + } +} + +module TwoScalars = { + let score = (~estimate: float, ~answer: float) => + if answer == 0.0 { + 0.0->Ok + } else if estimate == 0.0 { + infinity->Ok + } else { + minusScaledLogOfQuot(~esti=estimate, ~answ=answer) + } + + let scoreWithPrior = (~estimate: float, ~answer: float, ~prior: float) => + if answer == 0.0 { + 0.0->Ok + } else if estimate == 0.0 || prior == 0.0 { + infinity->Ok + } else { + minusScaledLogOfQuot(~esti=estimate /. prior, ~answ=answer) } } -module LogScoreWithPointResolution = { - let logFn = Js.Math.log - let score = ( - ~priorPdf: option float>, - ~predictionPdf: float => float, - ~answer: float, - ): result => { - let numerator = answer->predictionPdf - if numerator < 0.0 { - Operation.PdfInvalidError->Error - } else if numerator == 0.0 { - infinity->Ok - } else { - -.( - switch priorPdf { - | None => numerator->logFn - | Some(f) => { - let priorDensityOfAnswer = f(answer) - if priorDensityOfAnswer == 0.0 { - neg_infinity - } else { - (numerator /. priorDensityOfAnswer)->logFn - } - } - } - )->Ok - } +let logScore = (args: scoreArgs, ~integrateFn): result => + switch args { + | DistEstimateDistAnswer({estimate, answer, prior: None}) => + WithDistAnswer.sum(~estimate, ~answer, ~integrateFn) + | DistEstimateDistAnswer({estimate, answer, prior: Some(prior)}) => + WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn) + | DistEstimateScalarAnswer({estimate, answer, prior: None}) => + WithScalarAnswer.score(~estimate, ~answer) + | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => + WithScalarAnswer.scoreWithPrior(~estimate, ~answer, ~prior) + | ScalarEstimateDistAnswer(_) => Operation.NotYetImplemented->Error + | ScalarEstimateScalarAnswer({estimate, answer, prior: None}) => + TwoScalars.score(~estimate, ~answer) + | ScalarEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => + TwoScalars.scoreWithPrior(~estimate, ~answer, ~prior) } -} From 3a56d6fca4e83943c0dcd24fc73d1a16bc760513 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 23 May 2022 12:07:03 -0400 Subject: [PATCH 02/60] intermediate commit Value: [1e-10 to 1e-5] --- .../Distributions/PointSetDist/Continuous.res | 26 +++++++------- .../Distributions/PointSetDist/Discrete.res | 20 +++++------ .../PointSetDist/Distributions.res | 16 ++++----- .../Distributions/PointSetDist/Mixed.res | 16 ++++----- .../PointSetDist/PointSetDist.res | 35 ++++++++++--------- .../PointSetDist/PointSetDist_Scoring.res | 26 ++++++++------ 6 files changed, 73 insertions(+), 66 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res index 3661a531..658c6b8a 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res @@ -271,19 +271,19 @@ module T = Dist({ let variance = (t: t): float => XYShape.Analysis.getVarianceDangerously(t, mean, Analysis.getMeanOfSquares) - let klDivergence = (prediction: t, answer: t) => { - let newShape = XYShape.PointwiseCombination.combineAlongSupportOfSecondArgument( - PointSetDist_Scoring.KLDivergence.integrand, - prediction.xyShape, - answer.xyShape, - ) - newShape->E.R2.fmap(x => x->make->integralEndY) - } - let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - let priorPdf = prior->E.O2.fmap((shape, x) => XYShape.XtoY.linear(x, shape.xyShape)) - let predictionPdf = x => XYShape.XtoY.linear(x, prediction.xyShape) - PointSetDist_Scoring.LogScoreWithPointResolution.score(~priorPdf, ~predictionPdf, ~answer) - } + // let klDivergence = (prediction: t, answer: t) => { + // let newShape = XYShape.PointwiseCombination.combineAlongSupportOfSecondArgument( + // PointSetDist_Scoring.KLDivergence.integrand, + // prediction.xyShape, + // answer.xyShape, + // ) + // newShape->E.R2.fmap(x => x->make->integralEndY) + // } + // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { + // let priorPdf = prior->E.O2.fmap((shape, x) => XYShape.XtoY.linear(x, shape.xyShape)) + // let predictionPdf = x => XYShape.XtoY.linear(x, prediction.xyShape) + // PointSetDist_Scoring.LogScoreWithPointResolution.score(~priorPdf, ~predictionPdf, ~answer) + // } }) let isNormalized = (t: t): bool => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res index fea5db6f..b2347dc2 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res @@ -222,14 +222,14 @@ module T = Dist({ XYShape.Analysis.getVarianceDangerously(t, mean, getMeanOfSquares) } - let klDivergence = (prediction: t, answer: t) => { - combinePointwise( - ~fn=PointSetDist_Scoring.KLDivergence.integrand, - prediction, - answer, - )->E.R2.fmap(integralEndY) - } - let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - Error(Operation.NotYetImplemented) - } + // let klDivergence = (prediction: t, answer: t) => { + // combinePointwise( + // ~fn=PointSetDist_Scoring.KLDivergence.integrand, + // prediction, + // answer, + // )->E.R2.fmap(integralEndY) + // } + // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { + // Error(Operation.NotYetImplemented) + // } }) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res index 2d0358ec..fe848107 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res @@ -33,12 +33,12 @@ module type dist = { let mean: t => float let variance: t => float - let klDivergence: (t, t) => result - let logScoreWithPointResolution: ( - ~prediction: t, - ~answer: float, - ~prior: option, - ) => result + // let klDivergence: (t, t) => result + // let logScoreWithPointResolution: ( + // ~prediction: t, + // ~answer: float, + // ~prior: option, + // ) => result } module Dist = (T: dist) => { @@ -61,8 +61,8 @@ module Dist = (T: dist) => { let mean = T.mean let variance = T.variance let integralEndY = T.integralEndY - let klDivergence = T.klDivergence - let logScoreWithPointResolution = T.logScoreWithPointResolution + // let klDivergence = T.klDivergence + // let logScoreWithPointResolution = T.logScoreWithPointResolution let updateIntegralCache = T.updateIntegralCache diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res index 42a88909..c9d46efb 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res @@ -301,14 +301,14 @@ module T = Dist({ } } - let klDivergence = (prediction: t, answer: t) => { - let klDiscretePart = Discrete.T.klDivergence(prediction.discrete, answer.discrete) - let klContinuousPart = Continuous.T.klDivergence(prediction.continuous, answer.continuous) - E.R.merge(klDiscretePart, klContinuousPart)->E.R2.fmap(t => fst(t) +. snd(t)) - } - let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - Error(Operation.NotYetImplemented) - } + // let klDivergence = (prediction: t, answer: t) => { + // let klDiscretePart = Discrete.T.klDivergence(prediction.discrete, answer.discrete) + // let klContinuousPart = Continuous.T.klDivergence(prediction.continuous, answer.continuous) + // E.R.merge(klDiscretePart, klContinuousPart)->E.R2.fmap(t => fst(t) +. snd(t)) + // } + // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { + // Error(Operation.NotYetImplemented) + // } }) let combineAlgebraically = (op: Operation.convolutionOperation, t1: t, t2: t): t => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res index d21a7383..7be054c2 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res @@ -196,24 +196,27 @@ module T = Dist({ | Continuous(m) => Continuous.T.variance(m) } - let klDivergence = (prediction: t, answer: t) => - switch (prediction, answer) { - | (Continuous(t1), Continuous(t2)) => Continuous.T.klDivergence(t1, t2) - | (Discrete(t1), Discrete(t2)) => Discrete.T.klDivergence(t1, t2) - | (m1, m2) => Mixed.T.klDivergence(m1->toMixed, m2->toMixed) - } - - let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - switch (prior, prediction) { - | (Some(Continuous(t1)), Continuous(t2)) => - Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=t1->Some) - | (None, Continuous(t2)) => - Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=None) - | _ => Error(Operation.NotYetImplemented) - } - } + // let klDivergence = (prediction: t, answer: t) => + // switch (prediction, answer) { + // | (Continuous(t1), Continuous(t2)) => Continuous.T.klDivergence(t1, t2) + // | (Discrete(t1), Discrete(t2)) => Discrete.T.klDivergence(t1, t2) + // | (m1, m2) => Mixed.T.klDivergence(m1->toMixed, m2->toMixed) + // } + // + // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { + // switch (prior, prediction) { + // | (Some(Continuous(t1)), Continuous(t2)) => + // Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=t1->Some) + // | (None, Continuous(t2)) => + // Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=None) + // | _ => Error(Operation.NotYetImplemented) + // } + // } }) +let logScore = (args: PointSetDist_Scoring.scoreArgs): result => + PointSetDist_Scoring.logScore(args) + let pdf = (f: float, t: t) => { let mixedPoint: PointSetTypes.mixedPoint = T.xToY(f, t) mixedPoint.continuous +. mixedPoint.discrete diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 6d843a9d..7ff86c91 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -1,4 +1,4 @@ -type t = PointSetDist.pointSetDist +type t = PointSetTypes.pointSetDist type continuousShape = PointSetTypes.continuousShape type discreteShape = PointSetTypes.discreteShape type mixedShape = PointSetTypes.mixedShape @@ -30,16 +30,16 @@ module WithDistAnswer = { minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) } - let sum = (~estimate: t, ~answer: t, ~integrateFn) => - PointSetDist.combinePointwise(integrand, estimate, answer)->E.R2.fmap(integrateFn) + let sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn) => + combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) - let sumWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~integrateFn): result< + let sumWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~combineFn, ~integrateFn): result< float, Operation.Error.t, > => { - let kl1 = sum(~estimate, ~answer, ~integrateFn) - let kl2 = sum(~estimate=prior, ~answer, ~integrateFn) - E.R.merge(kl1, kl2)->E.R2.fmap(((k1', k2')) => kl1' -. kl2') + let kl1 = sum(~estimate, ~answer, ~combineFn, ~integrateFn) + let kl2 = sum(~estimate=prior, ~answer, ~combineFn, ~integrateFn) + E.R.merge(kl1, kl2)->E.R2.fmap(((kl1', kl2')) => kl1' -. kl2') } } @@ -69,11 +69,15 @@ module WithScalarAnswer = { minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) } } - let score = (~estimate: t, ~answer: t): result => { - let estimatePdf = x => XYShape.XtoY.linear(x, estimate.xyShape) + let score = (~estimate: t, ~answer: t, ~mapper): result => { + let pdf = (shape, ~x) => XYShape.XtoY.linear(x, shape.xyShape) + let estimatePdf = mapper((x => pdf(~x), x => pdf(~x), x => pdf(~x))) score'(~estimatePdf, ~answer) } - let scoreWithPrior = (~estimate: t, ~answer: t, ~prior: t): result => { + let scoreWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~mapper): result< + float, + Operation.Error.t, + > => { let estimatePdf = x => XYShape.XtoY.linear(x, estimate.xyShape) let priorPdf = x => XYShape.XtoY.linear(x, prior.xyShape) scoreWithPrior'(~estimatePdf, ~answer, ~priorPdf) @@ -100,7 +104,7 @@ module TwoScalars = { } } -let logScore = (args: scoreArgs, ~integrateFn): result => +let logScore = (args: scoreArgs, ~combineFn, ~integrateFn): result => switch args { | DistEstimateDistAnswer({estimate, answer, prior: None}) => WithDistAnswer.sum(~estimate, ~answer, ~integrateFn) From f2460a5e12393d235d0d1cea19ce77f05a4e83a3 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 08:17:45 -0400 Subject: [PATCH 03/60] It compiles Value: [1e-3 to 4e-1] --- .../{ => Scoring}/KlDivergence_test.res | 7 +- .../Distributions/DistributionOperation.res | 36 ++-- .../Distributions/DistributionOperation.resi | 37 +++- .../Distributions/DistributionTypes.res | 42 ++++- .../rescript/Distributions/GenericDist.res | 159 +++++++++++++----- .../rescript/Distributions/GenericDist.resi | 10 +- .../PointSetDist/PointSetDist.res | 2 +- .../PointSetDist/PointSetDist_Scoring.res | 43 +++-- .../ReducerInterface_GenericDistribution.res | 50 ++---- 9 files changed, 258 insertions(+), 128 deletions(-) rename packages/squiggle-lang/__tests__/Distributions/{ => Scoring}/KlDivergence_test.res (96%) diff --git a/packages/squiggle-lang/__tests__/Distributions/KlDivergence_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res similarity index 96% rename from packages/squiggle-lang/__tests__/Distributions/KlDivergence_test.res rename to packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res index fc528e08..f1e6c23b 100644 --- a/packages/squiggle-lang/__tests__/Distributions/KlDivergence_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res @@ -3,6 +3,7 @@ open Expect open TestHelpers open GenericDist_Fixtures +let klDivergence = DistributionOperation.Constructors.logScore_DistEstimateDistAnswer(~env) // integral from low to high of 1 / (high - low) log(normal(mean, stdev)(x) / (1 / (high - low))) dx let klNormalUniform = (mean, stdev, low, high): float => -.Js.Math.log((high -. low) /. Js.Math.sqrt(2.0 *. MagicNumbers.Math.pi *. stdev ** 2.0)) +. @@ -11,8 +12,6 @@ let klNormalUniform = (mean, stdev, low, high): float => (mean ** 2.0 -. (high +. low) *. mean +. (low ** 2.0 +. high *. low +. high ** 2.0) /. 3.0) describe("klDivergence: continuous -> continuous -> float", () => { - let klDivergence = DistributionOperation.Constructors.klDivergence(~env) - let testUniform = (lowAnswer, highAnswer, lowPrediction, highPrediction) => { test("of two uniforms is equal to the analytic expression", () => { let answer = @@ -82,7 +81,6 @@ describe("klDivergence: continuous -> continuous -> float", () => { }) describe("klDivergence: discrete -> discrete -> float", () => { - let klDivergence = DistributionOperation.Constructors.klDivergence(~env) let mixture = a => DistributionTypes.DistributionOperation.Mixture(a) let a' = [(point1, 1e0), (point2, 1e0)]->mixture->run let b' = [(point1, 1e0), (point2, 1e0), (point3, 1e0)]->mixture->run @@ -117,7 +115,6 @@ describe("klDivergence: discrete -> discrete -> float", () => { }) describe("klDivergence: mixed -> mixed -> float", () => { - let klDivergence = DistributionOperation.Constructors.klDivergence(~env) let mixture' = a => DistributionTypes.DistributionOperation.Mixture(a) let mixture = a => { let dist' = a->mixture'->run @@ -193,7 +190,7 @@ describe("combineAlongSupportOfSecondArgument0", () => { let predictionWrapped = E.R.fmap(a => run(FromDist(ToDist(ToPointSet), a)), prediction) let interpolator = XYShape.XtoY.continuousInterpolator(#Stepwise, #UseZero) - let integrand = PointSetDist_Scoring.KLDivergence.integrand + let integrand = PointSetDist_Scoring.WithDistAnswer.integrand let result = switch (answerWrapped, predictionWrapped) { | (Ok(Dist(PointSet(Continuous(a)))), Ok(Dist(PointSet(Continuous(b))))) => diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 61b5cd6b..e2bf166d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -145,18 +145,9 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { Dist(dist) } | ToDist(Normalize) => dist->GenericDist.normalize->Dist - | ToScore(KLDivergence(t2)) => - GenericDist.Score.klDivergence(dist, t2, ~toPointSetFn) - ->E.R2.fmap(r => Float(r)) - ->OutputLocal.fromResult | ToScore(LogScore(answer, prior)) => - GenericDist.Score.logScoreWithPointResolution( - ~prediction=dist, - ~answer, - ~prior, - ~toPointSetFn, - ) - ->E.R2.fmap(r => Float(r)) + GenericDist.Score.logScore(~estimate=Score_Dist(dist), ~answer, ~prior) + ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult | ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool | ToDist(Truncate(leftCutoff, rightCutoff)) => @@ -271,13 +262,22 @@ module Constructors = { let pdf = (~env, dist, f) => C.pdf(dist, f)->run(~env)->toFloatR let normalize = (~env, dist) => C.normalize(dist)->run(~env)->toDistR let isNormalized = (~env, dist) => C.isNormalized(dist)->run(~env)->toBoolR - let klDivergence = (~env, dist1, dist2) => C.klDivergence(dist1, dist2)->run(~env)->toFloatR - let logScoreWithPointResolution = ( - ~env, - ~prediction: DistributionTypes.genericDist, - ~answer: float, - ~prior: option, - ) => C.logScoreWithPointResolution(~prediction, ~answer, ~prior)->run(~env)->toFloatR + let logScore_DistEstimateDistAnswer = (~env, estimate, answer) => + C.logScore_DistEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR + let logScore_DistEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => + C.logScore_DistEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let logScore_DistEstimateScalarAnswer = (~env, estimate, answer) => + C.logScore_DistEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR + let logScore_DistEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => + C.logScore_DistEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let logScore_ScalarEstimateDistAnswer = (~env, estimate, answer) => + C.logScore_ScalarEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR + let logScore_ScalarEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => + C.logScore_ScalarEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let logScore_ScalarEstimateScalarAnswer = (~env, estimate, answer) => + C.logScore_ScalarEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR + let logScore_ScalarEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => + C.logScore_ScalarEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR let toPointSet = (~env, dist) => C.toPointSet(dist)->run(~env)->toDistR let toSampleSet = (~env, dist, n) => C.toSampleSet(dist, n)->run(~env)->toDistR let fromSamples = (~env, xs) => C.fromSamples(xs)->run(~env)->toDistR diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index aa006c06..2f3a7507 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -61,13 +61,40 @@ module Constructors: { @genType let isNormalized: (~env: env, genericDist) => result @genType - let klDivergence: (~env: env, genericDist, genericDist) => result + let logScore_DistEstimateDistAnswer: (~env: env, genericDist, genericDist) => result @genType - let logScoreWithPointResolution: ( + let logScore_DistEstimateDistAnswerWithPrior: ( ~env: env, - ~prediction: genericDist, - ~answer: float, - ~prior: option, + genericDist, + genericDist, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let logScore_DistEstimateScalarAnswer: (~env: env, genericDist, float) => result + @genType + let logScore_DistEstimateScalarAnswerWithPrior: ( + ~env: env, + genericDist, + float, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let logScore_ScalarEstimateDistAnswer: (~env: env, float, genericDist) => result + @genType + let logScore_ScalarEstimateDistAnswerWithPrior: ( + ~env: env, + float, + genericDist, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let logScore_ScalarEstimateScalarAnswer: (~env: env, float, float) => result + @genType + let logScore_ScalarEstimateScalarAnswerWithPrior: ( + ~env: env, + float, + float, + DistributionTypes.DistributionOperation.scoreDistOrScalar, ) => result @genType let toPointSet: (~env: env, genericDist) => result diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index 5bba9f1d..d655fcfd 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -92,7 +92,9 @@ module DistributionOperation = { | ToString | ToSparkline(int) - type toScore = KLDivergence(genericDist) | LogScore(float, option) + type scoreDistOrScalar = Score_Dist(genericDist) | Score_Scalar(float) + + type toScore = LogScore(scoreDistOrScalar, option) type fromDist = | ToFloat(toFloat) @@ -120,8 +122,7 @@ module DistributionOperation = { | ToFloat(#Pdf(r)) => `pdf(${E.Float.toFixed(r)})` | ToFloat(#Sample) => `sample` | ToFloat(#IntegralSum) => `integralSum` - | ToScore(KLDivergence(_)) => `klDivergence` - | ToScore(LogScore(x, _)) => `logScore against ${E.Float.toFixed(x)}` + | ToScore(_) => `logScore` | ToDist(Normalize) => `normalize` | ToDist(ToPointSet) => `toPointSet` | ToDist(ToSampleSet(r)) => `toSampleSet(${E.I.toString(r)})` @@ -162,10 +163,37 @@ module Constructors = { let fromSamples = (xs): t => FromSamples(xs) let truncate = (dist, left, right): t => FromDist(ToDist(Truncate(left, right)), dist) let inspect = (dist): t => FromDist(ToDist(Inspect), dist) - let klDivergence = (dist1, dist2): t => FromDist(ToScore(KLDivergence(dist2)), dist1) - let logScoreWithPointResolution = (~prediction, ~answer, ~prior): t => FromDist( - ToScore(LogScore(answer, prior)), - prediction, + let logScore_DistEstimateDistAnswer = (estimate, answer): t => FromDist( + ToScore(LogScore(Score_Dist(answer), None)), + estimate, + ) + let logScore_DistEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( + ToScore(LogScore(Score_Dist(answer), Some(prior))), + estimate, + ) + let logScore_DistEstimateScalarAnswer = (estimate, answer): t => FromDist( + ToScore(LogScore(Score_Scalar(answer), None)), + estimate, + ) + let logScore_DistEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( + ToScore(LogScore(Score_Scalar(answer), Some(prior))), + estimate, + ) + let logScore_ScalarEstimateDistAnswer = (estimate, answer): t => FromFloat( + ToScore(LogScore(Score_Dist(answer), None)), + estimate, + ) + let logScore_ScalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( + ToScore(LogScore(Score_Dist(answer), Some(prior))), + estimate, + ) + let logScore_ScalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( + ToScore(LogScore(Score_Scalar(answer), None)), + estimate, + ) + let logScore_ScalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( + ToScore(LogScore(Score_Scalar(answer), Some(prior))), + estimate, ) let scalePower = (dist, n): t => FromDist(ToDist(Scale(#Power, n)), dist) let scaleLogarithm = (dist, n): t => FromDist(ToDist(Scale(#Logarithm, n)), dist) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index d6920a4e..dfa728bc 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -61,46 +61,6 @@ let integralEndY = (t: t): float => let isNormalized = (t: t): bool => Js.Math.abs_float(integralEndY(t) -. 1.0) < 1e-7 -module Score = { - let klDivergence = (prediction, answer, ~toPointSetFn: toPointSetFn): result => { - let pointSets = E.R.merge(toPointSetFn(prediction), toPointSetFn(answer)) - pointSets |> E.R2.bind(((predi, ans)) => - PointSetDist.T.klDivergence(predi, ans)->E.R2.errMap(x => DistributionTypes.OperationError(x)) - ) - } - - let logScoreWithPointResolution = ( - ~prediction: DistributionTypes.genericDist, - ~answer: float, - ~prior: option, - ~toPointSetFn: toPointSetFn, - ): result => { - switch prior { - | Some(prior') => - E.R.merge(toPointSetFn(prior'), toPointSetFn(prediction))->E.R.bind((( - prior'', - prediction'', - )) => - PointSetDist.T.logScoreWithPointResolution( - ~prediction=prediction'', - ~answer, - ~prior=prior''->Some, - )->E.R2.errMap(x => DistributionTypes.OperationError(x)) - ) - | None => - prediction - ->toPointSetFn - ->E.R.bind(x => - PointSetDist.T.logScoreWithPointResolution( - ~prediction=x, - ~answer, - ~prior=None, - )->E.R2.errMap(x => DistributionTypes.OperationError(x)) - ) - } - } -} - let toFloatOperation = ( t, ~toPointSetFn: toPointSetFn, @@ -159,6 +119,125 @@ let toPointSet = ( } } +module Score = { + type scoreDistOrScalar = DistributionTypes.DistributionOperation.scoreDistOrScalar + + type pointSet_ScoreDistOrScalar = D(PointSetTypes.pointSetDist) | S(float) + let argsMake = ( + ~esti: scoreDistOrScalar, + ~answ: scoreDistOrScalar, + ~prior: option, + ): result => { + let toPointSetFn = toPointSet( + ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, + ~sampleCount=MagicNumbers.Environment.defaultSampleCount, + ~xSelection=#ByWeight, + ) + let prior': option> = switch prior { + | None => None + | Some(Score_Dist(d)) => toPointSetFn(d, ())->E.R.bind(x => x->D->Ok)->Some + | Some(Score_Scalar(s)) => s->S->Ok->Some + } + let twoDists = (esti': t, answ': t): result< + (PointSetTypes.pointSetDist, PointSetTypes.pointSetDist), + error, + > => E.R.merge(toPointSetFn(esti', ()), toPointSetFn(answ', ())) + switch (esti, answ, prior') { + | (Score_Dist(esti'), Score_Dist(answ'), None) => + twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => + {estimate: esti'', answer: answ'', prior: None} + ->PointSetDist_Scoring.DistEstimateDistAnswer + ->Ok + ) + | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(D(prior'')))) => + twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => + {estimate: esti'', answer: answ'', prior: Some(prior'')} + ->PointSetDist_Scoring.DistEstimateDistAnswer + ->Ok + ) + | (Score_Dist(esti'), Score_Scalar(answ'), None) => + toPointSetFn(esti', ())->E.R.bind(esti'' => + {estimate: esti'', answer: answ', prior: None} + ->PointSetDist_Scoring.DistEstimateScalarAnswer + ->Ok + ) + | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(D(prior'')))) => + toPointSetFn(esti', ())->E.R.bind(esti'' => + {estimate: esti'', answer: answ', prior: Some(prior'')} + ->PointSetDist_Scoring.DistEstimateScalarAnswer + ->Ok + ) + | (Score_Scalar(esti'), Score_Dist(answ'), None) => + toPointSetFn(answ', ())->E.R.bind(answ'' => + {estimate: esti', answer: answ'', prior: None} + ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->Ok + ) + | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(S(prior'')))) => + toPointSetFn(answ', ())->E.R.bind(answ'' => + {estimate: esti', answer: answ'', prior: Some(prior'')} + ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->Ok + ) + | (Score_Scalar(esti'), Score_Scalar(answ'), None) => + {estimate: esti', answer: answ', prior: None} + ->PointSetDist_Scoring.ScalarEstimateScalarAnswer + ->Ok + | (Score_Scalar(esti'), Score_Scalar(answ'), Some(Ok(S(prior'')))) => + {estimate: esti', answer: answ', prior: prior''->Some} + ->PointSetDist_Scoring.ScalarEstimateScalarAnswer + ->Ok + | (_, _, Some(Error(err))) => err->Error + } + } + + let logScore = ( + ~estimate: scoreDistOrScalar, + ~answer: scoreDistOrScalar, + ~prior: option, + ): result => + argsMake(~esti=estimate, ~answ=answer, ~prior)->E.R.bind(x => + x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) + ) + + // let klDivergence = (prediction, answer, ~toPointSetFn: toPointSetFn): result => { + // let pointSets = E.R.merge(toPointSetFn(prediction), toPointSetFn(answer)) + // pointSets |> E.R2.bind(((predi, ans)) => + // PointSetDist.T.klDivergence(predi, ans)->E.R2.errMap(x => DistributionTypes.OperationError(x)) + // ) + // } + // + // let logScoreWithPointResolution = ( + // ~prediction: DistributionTypes.genericDist, + // ~answer: float, + // ~prior: option, + // ~toPointSetFn: toPointSetFn, + // ): result => { + // switch prior { + // | Some(prior') => + // E.R.merge(toPointSetFn(prior'), toPointSetFn(prediction))->E.R.bind((( + // prior'', + // prediction'', + // )) => + // PointSetDist.T.logScoreWithPointResolution( + // ~prediction=prediction'', + // ~answer, + // ~prior=prior''->Some, + // )->E.R2.errMap(x => DistributionTypes.OperationError(x)) + // ) + // | None => + // prediction + // ->toPointSetFn + // ->E.R.bind(x => + // PointSetDist.T.logScoreWithPointResolution( + // ~prediction=x, + // ~answer, + // ~prior=None, + // )->E.R2.errMap(x => DistributionTypes.OperationError(x)) + // ) + // } + // } +} /* PointSetDist.toSparkline calls "downsampleEquallyOverX", which downsamples it to n=bucketCount. It first needs a pointSetDist, so we convert to a pointSetDist. In this process we want the diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi index fd9afa58..9e00da14 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi @@ -25,12 +25,10 @@ let toFloatOperation: ( ) => result module Score: { - let klDivergence: (t, t, ~toPointSetFn: toPointSetFn) => result - let logScoreWithPointResolution: ( - ~prediction: t, - ~answer: float, - ~prior: option, - ~toPointSetFn: toPointSetFn, + let logScore: ( + ~estimate: DistributionTypes.DistributionOperation.scoreDistOrScalar, + ~answer: DistributionTypes.DistributionOperation.scoreDistOrScalar, + ~prior: option, ) => result } diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res index 7be054c2..a49163a1 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res @@ -215,7 +215,7 @@ module T = Dist({ }) let logScore = (args: PointSetDist_Scoring.scoreArgs): result => - PointSetDist_Scoring.logScore(args) + PointSetDist_Scoring.logScore(args, ~combineFn=combinePointwise, ~integrateFn=T.integralEndY) let pdf = (f: float, t: t) => { let mixedPoint: PointSetTypes.mixedPoint = T.xToY(f, t) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 7ff86c91..95ebc89c 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -2,6 +2,7 @@ type t = PointSetTypes.pointSetDist type continuousShape = PointSetTypes.continuousShape type discreteShape = PointSetTypes.discreteShape type mixedShape = PointSetTypes.mixedShape + type scalar = float type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} type scoreArgs = @@ -9,6 +10,7 @@ type scoreArgs = | DistEstimateScalarAnswer(abstractScoreArgs) | ScalarEstimateDistAnswer(abstractScoreArgs) | ScalarEstimateScalarAnswer(abstractScoreArgs) + let logFn = Js.Math.log // base e let minusScaledLogOfQuot = (~esti, ~answ): result => { let quot = esti /. answ @@ -56,7 +58,7 @@ module WithScalarAnswer = { } let scoreWithPrior' = ( ~estimatePdf: float => float, - ~answer: float, + ~answer: scalar, ~priorPdf: float => float, ): result => { let numerator = answer->estimatePdf @@ -69,23 +71,44 @@ module WithScalarAnswer = { minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) } } - let score = (~estimate: t, ~answer: t, ~mapper): result => { - let pdf = (shape, ~x) => XYShape.XtoY.linear(x, shape.xyShape) - let estimatePdf = mapper((x => pdf(~x), x => pdf(~x), x => pdf(~x))) + let score = (~estimate: t, ~answer: scalar): result => { + let estimatePdf = x => + switch estimate { + | Continuous(esti) => XYShape.XtoY.linear(x, esti.xyShape) + | Discrete(esti) => XYShape.XtoY.linear(x, esti.xyShape) + | Mixed(esti) => + XYShape.XtoY.linear(x, esti.continuous.xyShape) +. + XYShape.XtoY.linear(x, esti.discrete.xyShape) + } + score'(~estimatePdf, ~answer) } - let scoreWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~mapper): result< + let scoreWithPrior = (~estimate: t, ~answer: scalar, ~prior: t): result< float, Operation.Error.t, > => { - let estimatePdf = x => XYShape.XtoY.linear(x, estimate.xyShape) - let priorPdf = x => XYShape.XtoY.linear(x, prior.xyShape) + let estimatePdf = x => + switch estimate { + | Continuous(esti) => XYShape.XtoY.linear(x, esti.xyShape) + | Discrete(esti) => XYShape.XtoY.linear(x, esti.xyShape) + | Mixed(esti) => + XYShape.XtoY.linear(x, esti.continuous.xyShape) +. + XYShape.XtoY.linear(x, esti.discrete.xyShape) + } + let priorPdf = x => + switch prior { + | Continuous(prio) => XYShape.XtoY.linear(x, prio.xyShape) + | Discrete(prio) => XYShape.XtoY.linear(x, prio.xyShape) + | Mixed(prio) => + XYShape.XtoY.linear(x, prio.continuous.xyShape) +. + XYShape.XtoY.linear(x, prio.discrete.xyShape) + } scoreWithPrior'(~estimatePdf, ~answer, ~priorPdf) } } module TwoScalars = { - let score = (~estimate: float, ~answer: float) => + let score = (~estimate: scalar, ~answer: scalar) => if answer == 0.0 { 0.0->Ok } else if estimate == 0.0 { @@ -107,9 +130,9 @@ module TwoScalars = { let logScore = (args: scoreArgs, ~combineFn, ~integrateFn): result => switch args { | DistEstimateDistAnswer({estimate, answer, prior: None}) => - WithDistAnswer.sum(~estimate, ~answer, ~integrateFn) + WithDistAnswer.sum(~estimate, ~answer, ~integrateFn, ~combineFn) | DistEstimateDistAnswer({estimate, answer, prior: Some(prior)}) => - WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn) + WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn, ~combineFn) | DistEstimateScalarAnswer({estimate, answer, prior: None}) => WithScalarAnswer.score(~estimate, ~answer) | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index dc827805..98e4842d 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -162,20 +162,6 @@ module Helpers = { } } } - - let klDivergenceWithPrior = ( - prediction: DistributionTypes.genericDist, - answer: DistributionTypes.genericDist, - prior: DistributionTypes.genericDist, - env: DistributionOperation.env, - ) => { - let term1 = DistributionOperation.Constructors.klDivergence(~env, prediction, answer) - let term2 = DistributionOperation.Constructors.klDivergence(~env, prior, answer) - switch E.R.merge(term1, term2)->E.R2.fmap(((a, b)) => a -. b) { - | Ok(x) => x->DistributionOperation.Float->Some - | Error(_) => None - } - } } module SymbolicConstructors = { @@ -226,28 +212,20 @@ let dispatchToGenericOutput = ( ~env, )->Some | ("normalize", [EvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) - | ("klDivergence", [EvDistribution(prediction), EvDistribution(answer)]) => - Some(DistributionOperation.run(FromDist(ToScore(KLDivergence(answer)), prediction), ~env)) - | ("klDivergence", [EvDistribution(prediction), EvDistribution(answer), EvDistribution(prior)]) => - Helpers.klDivergenceWithPrior(prediction, answer, prior, env) - | ( - "logScoreWithPointAnswer", - [EvDistribution(prediction), EvNumber(answer), EvDistribution(prior)], - ) - | ( - "logScoreWithPointAnswer", - [EvDistribution(prediction), EvDistribution(Symbolic(#Float(answer))), EvDistribution(prior)], - ) => - DistributionOperation.run( - FromDist(ToScore(LogScore(answer, prior->Some)), prediction), - ~env, - )->Some - | ("logScoreWithPointAnswer", [EvDistribution(prediction), EvNumber(answer)]) - | ( - "logScoreWithPointAnswer", - [EvDistribution(prediction), EvDistribution(Symbolic(#Float(answer)))], - ) => - DistributionOperation.run(FromDist(ToScore(LogScore(answer, None)), prediction), ~env)->Some + | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer)]) => + Some( + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Dist(answer), None)), estimate), + ~env, + ), + ) + | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer), EvDistribution(prior)]) => + Some( + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), estimate), + ~env, + ), + ) | ("isNormalized", [EvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) | ("toPointSet", [EvDistribution(dist)]) => Helpers.toDistFn(ToPointSet, dist, ~env) | ("scaleLog", [EvDistribution(dist)]) => From 249f58d3d88292c697267183507ae4c7e4166f18 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 10:39:30 -0400 Subject: [PATCH 04/60] Slightly baffled why `klDivergence : mixed x mixed -> float` is busted. Value: [1e-4 to 3e-2] hypothesis: I need to reintroduce `combineAlongSupportOfSecondArgument` --- .../Scoring/KlDivergence_test.res | 2 +- .../rescript/Distributions/GenericDist.res | 40 +------------------ .../Distributions/PointSetDist/Continuous.res | 14 ------- .../PointSetDist/Distributions.res | 9 ----- .../PointSetDist/PointSetDist.res | 19 +-------- .../PointSetDist/PointSetDist_Scoring.res | 29 +++++--------- .../squiggle-lang/src/rescript/Utility/E.res | 1 + 7 files changed, 16 insertions(+), 98 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res index f1e6c23b..e281b9de 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res @@ -57,7 +57,7 @@ describe("klDivergence: continuous -> continuous -> float", () => { let kl = E.R.liftJoin2(klDivergence, prediction, answer) switch kl { - | Ok(kl') => kl'->expect->toBeSoCloseTo(analyticalKl, ~digits=3) + | Ok(kl') => kl'->expect->toBeSoCloseTo(analyticalKl, ~digits=2) | Error(err) => { Js.Console.log(DistributionTypes.Error.toString(err)) raise(KlFailed) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index dfa728bc..3dd9981a 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -155,6 +155,7 @@ module Score = { ->PointSetDist_Scoring.DistEstimateDistAnswer ->Ok ) + | (Score_Dist(_), _, Some(Ok(S(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => toPointSetFn(esti', ())->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: None} @@ -179,6 +180,7 @@ module Score = { ->PointSetDist_Scoring.ScalarEstimateDistAnswer ->Ok ) + | (Score_Scalar(_), _, Some(Ok(D(_)))) => DistributionTypes.Unreachable->Error | (Score_Scalar(esti'), Score_Scalar(answ'), None) => {estimate: esti', answer: answ', prior: None} ->PointSetDist_Scoring.ScalarEstimateScalarAnswer @@ -199,44 +201,6 @@ module Score = { argsMake(~esti=estimate, ~answ=answer, ~prior)->E.R.bind(x => x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) ) - - // let klDivergence = (prediction, answer, ~toPointSetFn: toPointSetFn): result => { - // let pointSets = E.R.merge(toPointSetFn(prediction), toPointSetFn(answer)) - // pointSets |> E.R2.bind(((predi, ans)) => - // PointSetDist.T.klDivergence(predi, ans)->E.R2.errMap(x => DistributionTypes.OperationError(x)) - // ) - // } - // - // let logScoreWithPointResolution = ( - // ~prediction: DistributionTypes.genericDist, - // ~answer: float, - // ~prior: option, - // ~toPointSetFn: toPointSetFn, - // ): result => { - // switch prior { - // | Some(prior') => - // E.R.merge(toPointSetFn(prior'), toPointSetFn(prediction))->E.R.bind((( - // prior'', - // prediction'', - // )) => - // PointSetDist.T.logScoreWithPointResolution( - // ~prediction=prediction'', - // ~answer, - // ~prior=prior''->Some, - // )->E.R2.errMap(x => DistributionTypes.OperationError(x)) - // ) - // | None => - // prediction - // ->toPointSetFn - // ->E.R.bind(x => - // PointSetDist.T.logScoreWithPointResolution( - // ~prediction=x, - // ~answer, - // ~prior=None, - // )->E.R2.errMap(x => DistributionTypes.OperationError(x)) - // ) - // } - // } } /* PointSetDist.toSparkline calls "downsampleEquallyOverX", which downsamples it to n=bucketCount. diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res index 658c6b8a..4abb389d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res @@ -270,20 +270,6 @@ module T = Dist({ } let variance = (t: t): float => XYShape.Analysis.getVarianceDangerously(t, mean, Analysis.getMeanOfSquares) - - // let klDivergence = (prediction: t, answer: t) => { - // let newShape = XYShape.PointwiseCombination.combineAlongSupportOfSecondArgument( - // PointSetDist_Scoring.KLDivergence.integrand, - // prediction.xyShape, - // answer.xyShape, - // ) - // newShape->E.R2.fmap(x => x->make->integralEndY) - // } - // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - // let priorPdf = prior->E.O2.fmap((shape, x) => XYShape.XtoY.linear(x, shape.xyShape)) - // let predictionPdf = x => XYShape.XtoY.linear(x, prediction.xyShape) - // PointSetDist_Scoring.LogScoreWithPointResolution.score(~priorPdf, ~predictionPdf, ~answer) - // } }) let isNormalized = (t: t): bool => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res index fe848107..3a35d57b 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Distributions.res @@ -33,12 +33,6 @@ module type dist = { let mean: t => float let variance: t => float - // let klDivergence: (t, t) => result - // let logScoreWithPointResolution: ( - // ~prediction: t, - // ~answer: float, - // ~prior: option, - // ) => result } module Dist = (T: dist) => { @@ -61,9 +55,6 @@ module Dist = (T: dist) => { let mean = T.mean let variance = T.variance let integralEndY = T.integralEndY - // let klDivergence = T.klDivergence - // let logScoreWithPointResolution = T.logScoreWithPointResolution - let updateIntegralCache = T.updateIntegralCache module Integral = { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res index a49163a1..b743c7bf 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res @@ -195,27 +195,10 @@ module T = Dist({ | Discrete(m) => Discrete.T.variance(m) | Continuous(m) => Continuous.T.variance(m) } - - // let klDivergence = (prediction: t, answer: t) => - // switch (prediction, answer) { - // | (Continuous(t1), Continuous(t2)) => Continuous.T.klDivergence(t1, t2) - // | (Discrete(t1), Discrete(t2)) => Discrete.T.klDivergence(t1, t2) - // | (m1, m2) => Mixed.T.klDivergence(m1->toMixed, m2->toMixed) - // } - // - // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - // switch (prior, prediction) { - // | (Some(Continuous(t1)), Continuous(t2)) => - // Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=t1->Some) - // | (None, Continuous(t2)) => - // Continuous.T.logScoreWithPointResolution(~prediction=t2, ~answer, ~prior=None) - // | _ => Error(Operation.NotYetImplemented) - // } - // } }) let logScore = (args: PointSetDist_Scoring.scoreArgs): result => - PointSetDist_Scoring.logScore(args, ~combineFn=combinePointwise, ~integrateFn=T.integralEndY) + PointSetDist_Scoring.logScore(args, ~combineFn=combinePointwise, ~integrateFn=T.Integral.sum) let pdf = (f: float, t: t) => { let mixedPoint: PointSetTypes.mixedPoint = T.xToY(f, t) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 95ebc89c..b302d83e 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -1,7 +1,4 @@ type t = PointSetTypes.pointSetDist -type continuousShape = PointSetTypes.continuousShape -type discreteShape = PointSetTypes.discreteShape -type mixedShape = PointSetTypes.mixedShape type scalar = float type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} @@ -71,14 +68,14 @@ module WithScalarAnswer = { minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) } } + + let sum = (mp: PointSetTypes.MixedPoint.t): float => mp.continuous +. mp.discrete let score = (~estimate: t, ~answer: scalar): result => { let estimatePdf = x => switch estimate { - | Continuous(esti) => XYShape.XtoY.linear(x, esti.xyShape) - | Discrete(esti) => XYShape.XtoY.linear(x, esti.xyShape) - | Mixed(esti) => - XYShape.XtoY.linear(x, esti.continuous.xyShape) +. - XYShape.XtoY.linear(x, esti.discrete.xyShape) + | Continuous(esti) => Continuous.T.xToY(x, esti)->sum + | Discrete(esti) => Discrete.T.xToY(x, esti)->sum + | Mixed(esti) => Mixed.T.xToY(x, esti)->sum } score'(~estimatePdf, ~answer) @@ -89,19 +86,15 @@ module WithScalarAnswer = { > => { let estimatePdf = x => switch estimate { - | Continuous(esti) => XYShape.XtoY.linear(x, esti.xyShape) - | Discrete(esti) => XYShape.XtoY.linear(x, esti.xyShape) - | Mixed(esti) => - XYShape.XtoY.linear(x, esti.continuous.xyShape) +. - XYShape.XtoY.linear(x, esti.discrete.xyShape) + | Continuous(esti) => Continuous.T.xToY(x, esti)->sum + | Discrete(esti) => Discrete.T.xToY(x, esti)->sum + | Mixed(esti) => Mixed.T.xToY(x, esti)->sum } let priorPdf = x => switch prior { - | Continuous(prio) => XYShape.XtoY.linear(x, prio.xyShape) - | Discrete(prio) => XYShape.XtoY.linear(x, prio.xyShape) - | Mixed(prio) => - XYShape.XtoY.linear(x, prio.continuous.xyShape) +. - XYShape.XtoY.linear(x, prio.discrete.xyShape) + | Continuous(prio) => Continuous.T.xToY(x, prio)->sum + | Discrete(prio) => Discrete.T.xToY(x, prio)->sum + | Mixed(prio) => Mixed.T.xToY(x, prio)->sum } scoreWithPrior'(~estimatePdf, ~answer, ~priorPdf) } diff --git a/packages/squiggle-lang/src/rescript/Utility/E.res b/packages/squiggle-lang/src/rescript/Utility/E.res index 3357f4f4..a3bcb911 100644 --- a/packages/squiggle-lang/src/rescript/Utility/E.res +++ b/packages/squiggle-lang/src/rescript/Utility/E.res @@ -541,6 +541,7 @@ module A = { let init = Array.init let reduce = Belt.Array.reduce let reducei = Belt.Array.reduceWithIndex + let some = Belt.Array.some let isEmpty = r => length(r) < 1 let stableSortBy = Belt.SortArray.stableSortBy let toNoneIfEmpty = r => isEmpty(r) ? None : Some(r) From cbaf4c150d91776bdf3e4f05c60ff359ee4f50ea Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 13:10:31 -0400 Subject: [PATCH 05/60] one CR comment; chasing kldivergence on mixeds bug Value: [1e-10 to 1e-3] --- .../Scoring/KlDivergence_test.res | 4 +- .../Distributions/DistributionOperation.res | 34 +++++---- .../Distributions/DistributionOperation.resi | 74 ++++++++++--------- .../Distributions/DistributionTypes.res | 66 +++++++++-------- .../Distributions/PointSetDist/Continuous.res | 2 +- .../Distributions/PointSetDist/Discrete.res | 13 +--- .../PointSetDist/PointSetDist.res | 3 + .../src/rescript/Utility/XYShape.res | 24 +++--- 8 files changed, 107 insertions(+), 113 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res index e281b9de..089d247f 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res @@ -3,7 +3,7 @@ open Expect open TestHelpers open GenericDist_Fixtures -let klDivergence = DistributionOperation.Constructors.logScore_DistEstimateDistAnswer(~env) +let klDivergence = DistributionOperation.Constructors.LogScore.distEstimateDistAnswer(~env) // integral from low to high of 1 / (high - low) log(normal(mean, stdev)(x) / (1 / (high - low))) dx let klNormalUniform = (mean, stdev, low, high): float => -.Js.Math.log((high -. low) /. Js.Math.sqrt(2.0 *. MagicNumbers.Math.pi *. stdev ** 2.0)) +. @@ -194,7 +194,7 @@ describe("combineAlongSupportOfSecondArgument0", () => { let result = switch (answerWrapped, predictionWrapped) { | (Ok(Dist(PointSet(Continuous(a)))), Ok(Dist(PointSet(Continuous(b))))) => - Some(combineAlongSupportOfSecondArgument(integrand, interpolator, a.xyShape, b.xyShape)) + Some(combineAlongSupportOfSecondArgument(interpolator, integrand, a.xyShape, b.xyShape)) | _ => None } result diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index e2bf166d..b1d52319 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -262,22 +262,24 @@ module Constructors = { let pdf = (~env, dist, f) => C.pdf(dist, f)->run(~env)->toFloatR let normalize = (~env, dist) => C.normalize(dist)->run(~env)->toDistR let isNormalized = (~env, dist) => C.isNormalized(dist)->run(~env)->toBoolR - let logScore_DistEstimateDistAnswer = (~env, estimate, answer) => - C.logScore_DistEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR - let logScore_DistEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => - C.logScore_DistEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR - let logScore_DistEstimateScalarAnswer = (~env, estimate, answer) => - C.logScore_DistEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR - let logScore_DistEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => - C.logScore_DistEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR - let logScore_ScalarEstimateDistAnswer = (~env, estimate, answer) => - C.logScore_ScalarEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR - let logScore_ScalarEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => - C.logScore_ScalarEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR - let logScore_ScalarEstimateScalarAnswer = (~env, estimate, answer) => - C.logScore_ScalarEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR - let logScore_ScalarEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => - C.logScore_ScalarEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + module LogScore = { + let distEstimateDistAnswer = (~env, estimate, answer) => + C.LogScore.distEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR + let distEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => + C.LogScore.distEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let distEstimateScalarAnswer = (~env, estimate, answer) => + C.LogScore.distEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR + let distEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => + C.LogScore.distEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let scalarEstimateDistAnswer = (~env, estimate, answer) => + C.LogScore.scalarEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR + let scalarEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => + C.LogScore.scalarEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + let scalarEstimateScalarAnswer = (~env, estimate, answer) => + C.LogScore.scalarEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR + let scalarEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => + C.LogScore.scalarEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR + } let toPointSet = (~env, dist) => C.toPointSet(dist)->run(~env)->toDistR let toSampleSet = (~env, dist, n) => C.toSampleSet(dist, n)->run(~env)->toDistR let fromSamples = (~env, xs) => C.fromSamples(xs)->run(~env)->toDistR diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index 2f3a7507..eaad6bb8 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -60,42 +60,44 @@ module Constructors: { let normalize: (~env: env, genericDist) => result @genType let isNormalized: (~env: env, genericDist) => result - @genType - let logScore_DistEstimateDistAnswer: (~env: env, genericDist, genericDist) => result - @genType - let logScore_DistEstimateDistAnswerWithPrior: ( - ~env: env, - genericDist, - genericDist, - DistributionTypes.DistributionOperation.scoreDistOrScalar, - ) => result - @genType - let logScore_DistEstimateScalarAnswer: (~env: env, genericDist, float) => result - @genType - let logScore_DistEstimateScalarAnswerWithPrior: ( - ~env: env, - genericDist, - float, - DistributionTypes.DistributionOperation.scoreDistOrScalar, - ) => result - @genType - let logScore_ScalarEstimateDistAnswer: (~env: env, float, genericDist) => result - @genType - let logScore_ScalarEstimateDistAnswerWithPrior: ( - ~env: env, - float, - genericDist, - DistributionTypes.DistributionOperation.scoreDistOrScalar, - ) => result - @genType - let logScore_ScalarEstimateScalarAnswer: (~env: env, float, float) => result - @genType - let logScore_ScalarEstimateScalarAnswerWithPrior: ( - ~env: env, - float, - float, - DistributionTypes.DistributionOperation.scoreDistOrScalar, - ) => result + module LogScore: { + @genType + let distEstimateDistAnswer: (~env: env, genericDist, genericDist) => result + @genType + let distEstimateDistAnswerWithPrior: ( + ~env: env, + genericDist, + genericDist, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let distEstimateScalarAnswer: (~env: env, genericDist, float) => result + @genType + let distEstimateScalarAnswerWithPrior: ( + ~env: env, + genericDist, + float, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let scalarEstimateDistAnswer: (~env: env, float, genericDist) => result + @genType + let scalarEstimateDistAnswerWithPrior: ( + ~env: env, + float, + genericDist, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + @genType + let scalarEstimateScalarAnswer: (~env: env, float, float) => result + @genType + let scalarEstimateScalarAnswerWithPrior: ( + ~env: env, + float, + float, + DistributionTypes.DistributionOperation.scoreDistOrScalar, + ) => result + } @genType let toPointSet: (~env: env, genericDist) => result @genType diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index d655fcfd..71c3ed02 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -163,38 +163,40 @@ module Constructors = { let fromSamples = (xs): t => FromSamples(xs) let truncate = (dist, left, right): t => FromDist(ToDist(Truncate(left, right)), dist) let inspect = (dist): t => FromDist(ToDist(Inspect), dist) - let logScore_DistEstimateDistAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Dist(answer), None)), - estimate, - ) - let logScore_DistEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Dist(answer), Some(prior))), - estimate, - ) - let logScore_DistEstimateScalarAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), None)), - estimate, - ) - let logScore_DistEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), - estimate, - ) - let logScore_ScalarEstimateDistAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), None)), - estimate, - ) - let logScore_ScalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), Some(prior))), - estimate, - ) - let logScore_ScalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), None)), - estimate, - ) - let logScore_ScalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), - estimate, - ) + module LogScore = { + let distEstimateDistAnswer = (estimate, answer): t => FromDist( + ToScore(LogScore(Score_Dist(answer), None)), + estimate, + ) + let distEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( + ToScore(LogScore(Score_Dist(answer), Some(prior))), + estimate, + ) + let distEstimateScalarAnswer = (estimate, answer): t => FromDist( + ToScore(LogScore(Score_Scalar(answer), None)), + estimate, + ) + let distEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( + ToScore(LogScore(Score_Scalar(answer), Some(prior))), + estimate, + ) + let scalarEstimateDistAnswer = (estimate, answer): t => FromFloat( + ToScore(LogScore(Score_Dist(answer), None)), + estimate, + ) + let scalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( + ToScore(LogScore(Score_Dist(answer), Some(prior))), + estimate, + ) + let scalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( + ToScore(LogScore(Score_Scalar(answer), None)), + estimate, + ) + let scalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( + ToScore(LogScore(Score_Scalar(answer), Some(prior))), + estimate, + ) + } let scalePower = (dist, n): t => FromDist(ToDist(Scale(#Power, n)), dist) let scaleLogarithm = (dist, n): t => FromDist(ToDist(Scale(#Logarithm, n)), dist) let scaleLogarithmWithThreshold = (dist, n, eps): t => FromDist( diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res index 4abb389d..05d94ca9 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Continuous.res @@ -120,7 +120,7 @@ let combinePointwise = ( let interpolator = XYShape.XtoY.continuousInterpolator(t1.interpolation, extrapolation) - combiner(fn, interpolator, t1.xyShape, t2.xyShape)->E.R2.fmap(x => + combiner(interpolator, fn, t1.xyShape, t2.xyShape)->E.R2.fmap(x => make(~integralSumCache=combinedIntegralSum, x) ) } diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res index b2347dc2..c6b68b50 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Discrete.res @@ -48,7 +48,7 @@ let combinePointwise = ( // TODO: does it ever make sense to pointwise combine the integrals here? // It could be done for pointwise additions, but is that ever needed? - combiner(fn, XYShape.XtoY.discreteInterpolator, t1.xyShape, t2.xyShape)->E.R2.fmap(make) + combiner(XYShape.XtoY.discreteInterpolator, fn, t1.xyShape, t2.xyShape)->E.R2.fmap(make) } let reduce = ( @@ -221,15 +221,4 @@ module T = Dist({ let getMeanOfSquares = t => t |> shapeMap(XYShape.T.square) |> mean XYShape.Analysis.getVarianceDangerously(t, mean, getMeanOfSquares) } - - // let klDivergence = (prediction: t, answer: t) => { - // combinePointwise( - // ~fn=PointSetDist_Scoring.KLDivergence.integrand, - // prediction, - // answer, - // )->E.R2.fmap(integralEndY) - // } - // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - // Error(Operation.NotYetImplemented) - // } }) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res index b743c7bf..4401cb0d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res @@ -66,6 +66,7 @@ let combineAlgebraically = (op: Operation.convolutionOperation, t1: t, t2: t): t } let combinePointwise = ( + ~combiner=XYShape.PointwiseCombination.combine, ~integralSumCachesFn: (float, float) => option=(_, _) => None, ~integralCachesFn: ( PointSetTypes.continuousShape, @@ -78,6 +79,7 @@ let combinePointwise = ( switch (t1, t2) { | (Continuous(m1), Continuous(m2)) => Continuous.combinePointwise( + ~combiner, ~integralSumCachesFn, fn, m1, @@ -85,6 +87,7 @@ let combinePointwise = ( )->E.R2.fmap(x => PointSetTypes.Continuous(x)) | (Discrete(m1), Discrete(m2)) => Discrete.combinePointwise( + ~combiner, ~integralSumCachesFn, ~fn, m1, diff --git a/packages/squiggle-lang/src/rescript/Utility/XYShape.res b/packages/squiggle-lang/src/rescript/Utility/XYShape.res index b4758dfd..77fa2782 100644 --- a/packages/squiggle-lang/src/rescript/Utility/XYShape.res +++ b/packages/squiggle-lang/src/rescript/Utility/XYShape.res @@ -322,8 +322,8 @@ module Zipped = { module PointwiseCombination = { // t1Interpolator and t2Interpolator are functions from XYShape.XtoY, e.g. linearBetweenPointsExtrapolateFlat. let combine: ( - (float, float) => result, interpolator, + (float, float) => result, T.t, T.t, ) => result = %raw(` @@ -332,7 +332,7 @@ module PointwiseCombination = { // and interpolates the value on the other side, thus accumulating xs and ys. // This is written in raw JS because this can still be a bottleneck, and using refs for the i and j indices is quite painful. - function(fn, interpolator, t1, t2) { + function(interpolator, fn, t1, t2) { let t1n = t1.xs.length; let t2n = t2.xs.length; let outX = []; @@ -394,11 +394,11 @@ module PointwiseCombination = { This is from an approach to kl divergence that was ultimately rejected. Leaving it in for now because it may help us factor `combine` out of raw javascript soon. */ let combineAlongSupportOfSecondArgument0: ( - (float, float) => result, interpolator, + (float, float) => result, T.t, T.t, - ) => result = (fn, interpolator, t1, t2) => { + ) => result = (interpolator, fn, t1, t2) => { let newYs = [] let newXs = [] let (l1, l2) = (E.A.length(t1.xs), E.A.length(t2.xs)) @@ -493,27 +493,23 @@ module PointwiseCombination = { } // This function is used for klDivergence let combineAlongSupportOfSecondArgument: ( + interpolator, (float, float) => result, T.t, T.t, - ) => result = (fn, prediction, answer) => { + ) => result = (interpolator, fn, prediction, answer) => { let combineWithFn = (answerX: float, i: int) => { let answerY = answer.ys[i] - let predictionY = XtoY.linear(answerX, prediction) + // let predictionY = XtoY.linear(answerX, prediction) + let predictionY = interpolator(prediction, i, answerX) fn(predictionY, answerY) } let newYsWithError = Js.Array.mapi((x, i) => combineWithFn(x, i), answer.xs) - let newYsOrError = E.A.R.firstErrorOrOpen(newYsWithError) - let result = switch newYsOrError { - | Ok(a) => Ok({xs: answer.xs, ys: a}) - | Error(b) => Error(b) - } - - result + E.A.R.firstErrorOrOpen(newYsWithError)->E.R2.fmap(ys => {xs: answer.xs, ys: ys}) } let addCombine = (interpolator: interpolator, t1: T.t, t2: T.t): T.t => - combine((a, b) => Ok(a +. b), interpolator, t1, t2)->E.R.toExn( + combine(interpolator, (a, b) => Ok(a +. b), t1, t2)->E.R.toExn( "Add operation should never fail", _, ) From a266b8ed094bb8ee35f68a4bd3b1843045c36fba Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 13:38:55 -0400 Subject: [PATCH 06/60] Fixed tests (plausibly slightly naively) Value: [1e-4 to 1e-1] --- .../Distributions/PointSetDist/Mixed.res | 3 --- .../PointSetDist/PointSetDist_Scoring.res | 22 +++++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res index c9d46efb..71310156 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res @@ -306,9 +306,6 @@ module T = Dist({ // let klContinuousPart = Continuous.T.klDivergence(prediction.continuous, answer.continuous) // E.R.merge(klDiscretePart, klContinuousPart)->E.R2.fmap(t => fst(t) +. snd(t)) // } - // let logScoreWithPointResolution = (~prediction: t, ~answer: float, ~prior: option) => { - // Error(Operation.NotYetImplemented) - // } }) let combineAlgebraically = (op: Operation.convolutionOperation, t1: t, t2: t): t => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index b302d83e..202397c5 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -29,8 +29,26 @@ module WithDistAnswer = { minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) } - let sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn) => - combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) + let rec sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn) => + switch (estimate, answer) { + | ((Continuous(_) | Discrete(_)) as esti, (Continuous(_) | Discrete(_)) as answ) => + combineFn(integrand, esti, answ)->E.R2.fmap(integrateFn) + | (Mixed(esti), Mixed(answ)) => + E.R.merge( + sum( + ~estimate=Discrete(esti.discrete), + ~answer=Discrete(answ.discrete), + ~combineFn, + ~integrateFn, + ), + sum( + ~estimate=Continuous(esti.continuous), + ~answer=Continuous(answ.continuous), + ~combineFn, + ~integrateFn, + ), + )->E.R2.fmap(((discretePart, continuousPart)) => discretePart +. continuousPart) + } let sumWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~combineFn, ~integrateFn): result< float, From 3aaad14f11db67123b5f3cb718dccc09a8f8dea8 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 13:51:01 -0400 Subject: [PATCH 07/60] slghtly more robust solution to mixed kldivergences (and removed a warning) Value: [1e-5 to 1e-2] --- .../PointSetDist/PointSetDist.res | 7 +- .../PointSetDist/PointSetDist_Scoring.res | 85 +++++++++++++------ 2 files changed, 63 insertions(+), 29 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res index 4401cb0d..725997f3 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist.res @@ -201,7 +201,12 @@ module T = Dist({ }) let logScore = (args: PointSetDist_Scoring.scoreArgs): result => - PointSetDist_Scoring.logScore(args, ~combineFn=combinePointwise, ~integrateFn=T.Integral.sum) + PointSetDist_Scoring.logScore( + args, + ~combineFn=combinePointwise, + ~integrateFn=T.Integral.sum, + ~toMixedFn=toMixed, + ) let pdf = (f: float, t: t) => { let mixedPoint: PointSetTypes.mixedPoint = T.xToY(f, t) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 202397c5..581fda7f 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -29,33 +29,59 @@ module WithDistAnswer = { minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) } - let rec sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn) => - switch (estimate, answer) { - | ((Continuous(_) | Discrete(_)) as esti, (Continuous(_) | Discrete(_)) as answ) => - combineFn(integrand, esti, answ)->E.R2.fmap(integrateFn) - | (Mixed(esti), Mixed(answ)) => - E.R.merge( - sum( - ~estimate=Discrete(esti.discrete), - ~answer=Discrete(answ.discrete), - ~combineFn, - ~integrateFn, - ), - sum( - ~estimate=Continuous(esti.continuous), - ~answer=Continuous(answ.continuous), - ~combineFn, - ~integrateFn, - ), - )->E.R2.fmap(((discretePart, continuousPart)) => discretePart +. continuousPart) - } - - let sumWithPrior = (~estimate: t, ~answer: t, ~prior: t, ~combineFn, ~integrateFn): result< + let rec sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn, ~toMixedFn): result< float, Operation.Error.t, - > => { - let kl1 = sum(~estimate, ~answer, ~combineFn, ~integrateFn) - let kl2 = sum(~estimate=prior, ~answer, ~combineFn, ~integrateFn) + > => + switch (estimate, answer) { + | (Continuous(_), Continuous(_)) => + combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) + | (Discrete(_), Discrete(_)) => combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) + | (_, _) => + let esti = estimate->toMixedFn + let answ = answer->toMixedFn + switch ( + Mixed.T.toContinuous(esti), + Mixed.T.toDiscrete(esti), + Mixed.T.toContinuous(answ), + Mixed.T.toDiscrete(answ), + ) { + | ( + Some(estiContinuousPart), + Some(estiDiscretePart), + Some(answContinuousPart), + Some(answDiscretePart), + ) => + E.R.merge( + sum( + ~estimate=Discrete(estiDiscretePart), + ~answer=Discrete(answDiscretePart), + ~combineFn, + ~integrateFn, + ~toMixedFn, + ), + sum( + ~estimate=Continuous(estiContinuousPart), + ~answer=Continuous(answContinuousPart), + ~combineFn, + ~integrateFn, + ~toMixedFn, + ), + )->E.R2.fmap(((discretePart, continuousPart)) => discretePart +. continuousPart) + | (_, _, _, _) => `unreachable state`->Operation.Other->Error + } + } + + let sumWithPrior = ( + ~estimate: t, + ~answer: t, + ~prior: t, + ~combineFn, + ~integrateFn, + ~toMixedFn, + ): result => { + let kl1 = sum(~estimate, ~answer, ~combineFn, ~integrateFn, ~toMixedFn) + let kl2 = sum(~estimate=prior, ~answer, ~combineFn, ~integrateFn, ~toMixedFn) E.R.merge(kl1, kl2)->E.R2.fmap(((kl1', kl2')) => kl1' -. kl2') } } @@ -138,12 +164,15 @@ module TwoScalars = { } } -let logScore = (args: scoreArgs, ~combineFn, ~integrateFn): result => +let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< + float, + Operation.Error.t, +> => switch args { | DistEstimateDistAnswer({estimate, answer, prior: None}) => - WithDistAnswer.sum(~estimate, ~answer, ~integrateFn, ~combineFn) + WithDistAnswer.sum(~estimate, ~answer, ~integrateFn, ~combineFn, ~toMixedFn) | DistEstimateDistAnswer({estimate, answer, prior: Some(prior)}) => - WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn, ~combineFn) + WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn, ~combineFn, ~toMixedFn) | DistEstimateScalarAnswer({estimate, answer, prior: None}) => WithScalarAnswer.score(~estimate, ~answer) | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => From 6a9179d4b8e0aeb0917f23502be507a6d35d6f5f Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Wed, 25 May 2022 14:40:39 -0400 Subject: [PATCH 08/60] Last cleanup Value: [1e-5 to 1e-3] --- .../Distributions/PointSetDist/Mixed.res | 6 ------ .../PointSetDist/PointSetDist_Scoring.res | 4 ++-- .../src/rescript/Utility/XYShape.res | 16 ---------------- 3 files changed, 2 insertions(+), 24 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res index 71310156..78f3c85b 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/Mixed.res @@ -300,12 +300,6 @@ module T = Dist({ | _ => XYShape.Analysis.getVarianceDangerously(t, mean, getMeanOfSquares) } } - - // let klDivergence = (prediction: t, answer: t) => { - // let klDiscretePart = Discrete.T.klDivergence(prediction.discrete, answer.discrete) - // let klContinuousPart = Continuous.T.klDivergence(prediction.continuous, answer.continuous) - // E.R.merge(klDiscretePart, klContinuousPart)->E.R2.fmap(t => fst(t) +. snd(t)) - // } }) let combineAlgebraically = (op: Operation.convolutionOperation, t1: t, t2: t): t => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 581fda7f..a228fcdc 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -34,9 +34,9 @@ module WithDistAnswer = { Operation.Error.t, > => switch (estimate, answer) { - | (Continuous(_), Continuous(_)) => + | (Continuous(_), Continuous(_)) + | (Discrete(_), Discrete(_)) => combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) - | (Discrete(_), Discrete(_)) => combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) | (_, _) => let esti = estimate->toMixedFn let answ = answer->toMixedFn diff --git a/packages/squiggle-lang/src/rescript/Utility/XYShape.res b/packages/squiggle-lang/src/rescript/Utility/XYShape.res index 77fa2782..b49540e9 100644 --- a/packages/squiggle-lang/src/rescript/Utility/XYShape.res +++ b/packages/squiggle-lang/src/rescript/Utility/XYShape.res @@ -491,22 +491,6 @@ module PointwiseCombination = { let newYs = E.A.fmap(x => XtoY.linear(x, t), newXs) {xs: newXs, ys: newYs} } - // This function is used for klDivergence - let combineAlongSupportOfSecondArgument: ( - interpolator, - (float, float) => result, - T.t, - T.t, - ) => result = (interpolator, fn, prediction, answer) => { - let combineWithFn = (answerX: float, i: int) => { - let answerY = answer.ys[i] - // let predictionY = XtoY.linear(answerX, prediction) - let predictionY = interpolator(prediction, i, answerX) - fn(predictionY, answerY) - } - let newYsWithError = Js.Array.mapi((x, i) => combineWithFn(x, i), answer.xs) - E.A.R.firstErrorOrOpen(newYsWithError)->E.R2.fmap(ys => {xs: answer.xs, ys: ys}) - } let addCombine = (interpolator: interpolator, t1: T.t, t2: T.t): T.t => combine(interpolator, (a, b) => Ok(a +. b), t1, t2)->E.R.toExn( From 239abbdcf89c094f560c3e7edb222acf5ea60712 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 25 May 2022 18:10:05 -0400 Subject: [PATCH 09/60] Minor refactors --- .../rescript/Distributions/GenericDist.res | 31 +++-- .../PointSetDist/PointSetDist_Scoring.res | 128 ++++++++++-------- 2 files changed, 84 insertions(+), 75 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 3dd9981a..2a806c9c 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -128,26 +128,27 @@ module Score = { ~answ: scoreDistOrScalar, ~prior: option, ): result => { - let toPointSetFn = toPointSet( - ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, - ~sampleCount=MagicNumbers.Environment.defaultSampleCount, - ~xSelection=#ByWeight, - ) + let toPointSetFn = t => + toPointSet( + t, + ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, + ~sampleCount=MagicNumbers.Environment.defaultSampleCount, + ~xSelection=#ByWeight, + (), + ) let prior': option> = switch prior { | None => None - | Some(Score_Dist(d)) => toPointSetFn(d, ())->E.R.bind(x => x->D->Ok)->Some + | Some(Score_Dist(d)) => toPointSetFn(d)->E.R.bind(x => x->D->Ok)->Some | Some(Score_Scalar(s)) => s->S->Ok->Some } let twoDists = (esti': t, answ': t): result< (PointSetTypes.pointSetDist, PointSetTypes.pointSetDist), error, - > => E.R.merge(toPointSetFn(esti', ()), toPointSetFn(answ', ())) + > => E.R.merge(toPointSetFn(esti'), toPointSetFn(answ')) switch (esti, answ, prior') { | (Score_Dist(esti'), Score_Dist(answ'), None) => - twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => - {estimate: esti'', answer: answ'', prior: None} - ->PointSetDist_Scoring.DistEstimateDistAnswer - ->Ok + twoDists(esti', answ')->E.R2.fmap(((esti'', answ'')) => + {estimate: esti'', answer: answ'', prior: None}->PointSetDist_Scoring.DistEstimateDistAnswer ) | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(D(prior'')))) => twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => @@ -157,25 +158,25 @@ module Score = { ) | (Score_Dist(_), _, Some(Ok(S(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => - toPointSetFn(esti', ())->E.R.bind(esti'' => + toPointSetFn(esti')->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: None} ->PointSetDist_Scoring.DistEstimateScalarAnswer ->Ok ) | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(D(prior'')))) => - toPointSetFn(esti', ())->E.R.bind(esti'' => + toPointSetFn(esti')->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: Some(prior'')} ->PointSetDist_Scoring.DistEstimateScalarAnswer ->Ok ) | (Score_Scalar(esti'), Score_Dist(answ'), None) => - toPointSetFn(answ', ())->E.R.bind(answ'' => + toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: None} ->PointSetDist_Scoring.ScalarEstimateDistAnswer ->Ok ) | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(S(prior'')))) => - toPointSetFn(answ', ())->E.R.bind(answ'' => + toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: Some(prior'')} ->PointSetDist_Scoring.ScalarEstimateDistAnswer ->Ok diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index a228fcdc..284914c2 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -1,11 +1,11 @@ -type t = PointSetTypes.pointSetDist +type pointSetDist = PointSetTypes.pointSetDist type scalar = float type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} type scoreArgs = - | DistEstimateDistAnswer(abstractScoreArgs) - | DistEstimateScalarAnswer(abstractScoreArgs) - | ScalarEstimateDistAnswer(abstractScoreArgs) + | DistEstimateDistAnswer(abstractScoreArgs) + | DistEstimateScalarAnswer(abstractScoreArgs) + | ScalarEstimateDistAnswer(abstractScoreArgs) | ScalarEstimateScalarAnswer(abstractScoreArgs) let logFn = Js.Math.log // base e @@ -29,15 +29,17 @@ module WithDistAnswer = { minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) } - let rec sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn, ~toMixedFn): result< - float, - Operation.Error.t, - > => - switch (estimate, answer) { - | (Continuous(_), Continuous(_)) - | (Discrete(_), Discrete(_)) => + let sum = ( + ~estimate: pointSetDist, + ~answer: pointSetDist, + ~combineFn, + ~integrateFn, + ~toMixedFn, + ): result => { + let combineAndIntegrate = (estimate, answer) => combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) - | (_, _) => + + let getMixedSums = (estimate: pointSetDist, answer: pointSetDist) => { let esti = estimate->toMixedFn let answ = answer->toMixedFn switch ( @@ -53,29 +55,31 @@ module WithDistAnswer = { Some(answDiscretePart), ) => E.R.merge( - sum( - ~estimate=Discrete(estiDiscretePart), - ~answer=Discrete(answDiscretePart), - ~combineFn, - ~integrateFn, - ~toMixedFn, + combineAndIntegrate( + PointSetTypes.Discrete(estiDiscretePart), + PointSetTypes.Discrete(answDiscretePart), ), - sum( - ~estimate=Continuous(estiContinuousPart), - ~answer=Continuous(answContinuousPart), - ~combineFn, - ~integrateFn, - ~toMixedFn, - ), - )->E.R2.fmap(((discretePart, continuousPart)) => discretePart +. continuousPart) + combineAndIntegrate(Continuous(estiContinuousPart), Continuous(answContinuousPart)), + ) | (_, _, _, _) => `unreachable state`->Operation.Other->Error } } + switch (estimate, answer) { + | (Continuous(_), Continuous(_)) + | (Discrete(_), Discrete(_)) => + combineAndIntegrate(estimate, answer) + | (_, _) => + getMixedSums(estimate, answer)->E.R2.fmap(((discretePart, continuousPart)) => + discretePart +. continuousPart + ) + } + } + let sumWithPrior = ( - ~estimate: t, - ~answer: t, - ~prior: t, + ~estimate: pointSetDist, + ~answer: pointSetDist, + ~prior: pointSetDist, ~combineFn, ~integrateFn, ~toMixedFn, @@ -87,47 +91,51 @@ module WithDistAnswer = { } module WithScalarAnswer = { - let score' = (~estimatePdf: float => float, ~answer: float): result => { - let density = answer->estimatePdf - if density < 0.0 { - Operation.PdfInvalidError->Error - } else if density == 0.0 { - infinity->Ok - } else { - density->logFn->(x => -.x)->Ok - } - } - let scoreWithPrior' = ( - ~estimatePdf: float => float, - ~answer: scalar, - ~priorPdf: float => float, - ): result => { - let numerator = answer->estimatePdf - let priorDensityOfAnswer = answer->priorPdf - if numerator < 0.0 || priorDensityOfAnswer < 0.0 { - Operation.PdfInvalidError->Error - } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { - infinity->Ok - } else { - minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) - } - } - let sum = (mp: PointSetTypes.MixedPoint.t): float => mp.continuous +. mp.discrete - let score = (~estimate: t, ~answer: scalar): result => { + let score = (~estimate: pointSetDist, ~answer: scalar): result => { + let _score = (~estimatePdf: float => float, ~answer: float): result< + float, + Operation.Error.t, + > => { + let density = answer->estimatePdf + if density < 0.0 { + Operation.PdfInvalidError->Error + } else if density == 0.0 { + infinity->Ok + } else { + density->logFn->(x => -.x)->Ok + } + } + let estimatePdf = x => switch estimate { | Continuous(esti) => Continuous.T.xToY(x, esti)->sum | Discrete(esti) => Discrete.T.xToY(x, esti)->sum | Mixed(esti) => Mixed.T.xToY(x, esti)->sum } - - score'(~estimatePdf, ~answer) + _score(~estimatePdf, ~answer) } - let scoreWithPrior = (~estimate: t, ~answer: scalar, ~prior: t): result< + + let scoreWithPrior = (~estimate: pointSetDist, ~answer: scalar, ~prior: pointSetDist): result< float, Operation.Error.t, > => { + let _scoreWithPrior = ( + ~estimatePdf: float => float, + ~answer: scalar, + ~priorPdf: float => float, + ): result => { + let numerator = answer->estimatePdf + let priorDensityOfAnswer = answer->priorPdf + if numerator < 0.0 || priorDensityOfAnswer < 0.0 { + Operation.PdfInvalidError->Error + } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { + infinity->Ok + } else { + minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) + } + } + let estimatePdf = x => switch estimate { | Continuous(esti) => Continuous.T.xToY(x, esti)->sum @@ -140,7 +148,7 @@ module WithScalarAnswer = { | Discrete(prio) => Discrete.T.xToY(x, prio)->sum | Mixed(prio) => Mixed.T.xToY(x, prio)->sum } - scoreWithPrior'(~estimatePdf, ~answer, ~priorPdf) + _scoreWithPrior(~estimatePdf, ~answer, ~priorPdf) } } From 584c639d01fe843a5d5ae912e56f7f645bdb8c39 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 08:28:30 -0400 Subject: [PATCH 10/60] some of the comments --- .../Distributions/DistributionOperation.res | 2 +- .../Distributions/DistributionOperation.resi | 8 +-- .../Distributions/DistributionTypes.res | 20 +++--- .../rescript/Distributions/GenericDist.res | 62 ++++++++----------- .../rescript/Distributions/GenericDist.resi | 6 +- .../PointSetDist/PointSetDist_Scoring.res | 13 ++-- .../ReducerInterface_GenericDistribution.res | 7 +-- 7 files changed, 55 insertions(+), 63 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index b1d52319..8190a057 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -146,7 +146,7 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { } | ToDist(Normalize) => dist->GenericDist.normalize->Dist | ToScore(LogScore(answer, prior)) => - GenericDist.Score.logScore(~estimate=Score_Dist(dist), ~answer, ~prior) + GenericDist.Score.logScore(~estimate=GDist(dist), ~answer, ~prior) ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult | ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index eaad6bb8..e2d0290b 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -68,7 +68,7 @@ module Constructors: { ~env: env, genericDist, genericDist, - DistributionTypes.DistributionOperation.scoreDistOrScalar, + DistributionTypes.DistributionOperation.genericDistOrScalar, ) => result @genType let distEstimateScalarAnswer: (~env: env, genericDist, float) => result @@ -77,7 +77,7 @@ module Constructors: { ~env: env, genericDist, float, - DistributionTypes.DistributionOperation.scoreDistOrScalar, + DistributionTypes.DistributionOperation.genericDistOrScalar, ) => result @genType let scalarEstimateDistAnswer: (~env: env, float, genericDist) => result @@ -86,7 +86,7 @@ module Constructors: { ~env: env, float, genericDist, - DistributionTypes.DistributionOperation.scoreDistOrScalar, + DistributionTypes.DistributionOperation.genericDistOrScalar, ) => result @genType let scalarEstimateScalarAnswer: (~env: env, float, float) => result @@ -95,7 +95,7 @@ module Constructors: { ~env: env, float, float, - DistributionTypes.DistributionOperation.scoreDistOrScalar, + DistributionTypes.DistributionOperation.genericDistOrScalar, ) => result } @genType diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index 71c3ed02..20b29b38 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -92,9 +92,9 @@ module DistributionOperation = { | ToString | ToSparkline(int) - type scoreDistOrScalar = Score_Dist(genericDist) | Score_Scalar(float) + type genericDistOrScalar = GDist(genericDist) | GScalar(float) - type toScore = LogScore(scoreDistOrScalar, option) + type toScore = LogScore(genericDistOrScalar, option) type fromDist = | ToFloat(toFloat) @@ -165,35 +165,35 @@ module Constructors = { let inspect = (dist): t => FromDist(ToDist(Inspect), dist) module LogScore = { let distEstimateDistAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Dist(answer), None)), + ToScore(LogScore(GDist(answer), None)), estimate, ) let distEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Dist(answer), Some(prior))), + ToScore(LogScore(GDist(answer), Some(prior))), estimate, ) let distEstimateScalarAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), None)), + ToScore(LogScore(GScalar(answer), None)), estimate, ) let distEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), + ToScore(LogScore(GScalar(answer), Some(prior))), estimate, ) let scalarEstimateDistAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), None)), + ToScore(LogScore(GDist(answer), None)), estimate, ) let scalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), Some(prior))), + ToScore(LogScore(GDist(answer), Some(prior))), estimate, ) let scalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), None)), + ToScore(LogScore(GScalar(answer), None)), estimate, ) let scalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), + ToScore(LogScore(GScalar(answer), Some(prior))), estimate, ) } diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 3dd9981a..4d54c62f 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -120,72 +120,64 @@ let toPointSet = ( } module Score = { - type scoreDistOrScalar = DistributionTypes.DistributionOperation.scoreDistOrScalar + type genericDistOrScalar = DistributionTypes.DistributionOperation.genericDistOrScalar + type psDistOrScalar = PSDist(PointSetTypes.pointSetDist) | PSScalar(float) - type pointSet_ScoreDistOrScalar = D(PointSetTypes.pointSetDist) | S(float) let argsMake = ( - ~esti: scoreDistOrScalar, - ~answ: scoreDistOrScalar, - ~prior: option, + ~esti: genericDistOrScalar, + ~answ: genericDistOrScalar, + ~prior: option, ): result => { let toPointSetFn = toPointSet( ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, ~sampleCount=MagicNumbers.Environment.defaultSampleCount, ~xSelection=#ByWeight, ) - let prior': option> = switch prior { + let twoDists = PointSetDist_Scoring.twoGenericDistsToTwoPointSetDists + let prior': option> = switch prior { | None => None - | Some(Score_Dist(d)) => toPointSetFn(d, ())->E.R.bind(x => x->D->Ok)->Some - | Some(Score_Scalar(s)) => s->S->Ok->Some + | Some(GDist(d)) => toPointSetFn(d, ())->E.R2.fmap(x => x->PSDist)->Some + | Some(GScalar(s)) => s->PSScalar->Ok->Some } - let twoDists = (esti': t, answ': t): result< - (PointSetTypes.pointSetDist, PointSetTypes.pointSetDist), - error, - > => E.R.merge(toPointSetFn(esti', ()), toPointSetFn(answ', ())) switch (esti, answ, prior') { - | (Score_Dist(esti'), Score_Dist(answ'), None) => - twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => + | (GDist(esti'), GDist(answ'), None) => + twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => {estimate: esti'', answer: answ'', prior: None} ->PointSetDist_Scoring.DistEstimateDistAnswer - ->Ok ) - | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(D(prior'')))) => - twoDists(esti', answ')->E.R.bind(((esti'', answ'')) => + | (GDist(esti'), GDist(answ'), Some(Ok(PSDist(prior'')))) => + twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => {estimate: esti'', answer: answ'', prior: Some(prior'')} ->PointSetDist_Scoring.DistEstimateDistAnswer - ->Ok ) - | (Score_Dist(_), _, Some(Ok(S(_)))) => DistributionTypes.Unreachable->Error - | (Score_Dist(esti'), Score_Scalar(answ'), None) => + | (GDist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error + | (GDist(esti'), GScalar(answ'), None) => toPointSetFn(esti', ())->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: None} ->PointSetDist_Scoring.DistEstimateScalarAnswer ->Ok ) - | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(D(prior'')))) => - toPointSetFn(esti', ())->E.R.bind(esti'' => + | (GDist(esti'), GScalar(answ'), Some(Ok(PSDist(prior'')))) => + toPointSetFn(esti', ())->E.R2.fmap(esti'' => {estimate: esti'', answer: answ', prior: Some(prior'')} ->PointSetDist_Scoring.DistEstimateScalarAnswer - ->Ok ) - | (Score_Scalar(esti'), Score_Dist(answ'), None) => - toPointSetFn(answ', ())->E.R.bind(answ'' => + | (GScalar(esti'), GDist(answ'), None) => + toPointSetFn(answ', ())->E.R2.fmap(answ'' => {estimate: esti', answer: answ'', prior: None} ->PointSetDist_Scoring.ScalarEstimateDistAnswer - ->Ok ) - | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(S(prior'')))) => - toPointSetFn(answ', ())->E.R.bind(answ'' => + | (GScalar(esti'), GDist(answ'), Some(Ok(PSScalar(prior'')))) => + toPointSetFn(answ', ())->E.R2.fmap(answ'' => {estimate: esti', answer: answ'', prior: Some(prior'')} ->PointSetDist_Scoring.ScalarEstimateDistAnswer - ->Ok ) - | (Score_Scalar(_), _, Some(Ok(D(_)))) => DistributionTypes.Unreachable->Error - | (Score_Scalar(esti'), Score_Scalar(answ'), None) => + | (GScalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error + | (GScalar(esti'), GScalar(answ'), None) => {estimate: esti', answer: answ', prior: None} ->PointSetDist_Scoring.ScalarEstimateScalarAnswer ->Ok - | (Score_Scalar(esti'), Score_Scalar(answ'), Some(Ok(S(prior'')))) => + | (GScalar(esti'), GScalar(answ'), Some(Ok(PSScalar(prior'')))) => {estimate: esti', answer: answ', prior: prior''->Some} ->PointSetDist_Scoring.ScalarEstimateScalarAnswer ->Ok @@ -194,9 +186,9 @@ module Score = { } let logScore = ( - ~estimate: scoreDistOrScalar, - ~answer: scoreDistOrScalar, - ~prior: option, + ~estimate: genericDistOrScalar, + ~answer: genericDistOrScalar, + ~prior: option, ): result => argsMake(~esti=estimate, ~answ=answer, ~prior)->E.R.bind(x => x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi index 9e00da14..432ae847 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi @@ -26,9 +26,9 @@ let toFloatOperation: ( module Score: { let logScore: ( - ~estimate: DistributionTypes.DistributionOperation.scoreDistOrScalar, - ~answer: DistributionTypes.DistributionOperation.scoreDistOrScalar, - ~prior: option, + ~estimate: DistributionTypes.DistributionOperation.genericDistOrScalar, + ~answer: DistributionTypes.DistributionOperation.genericDistOrScalar, + ~prior: option, ) => result } diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index a228fcdc..20bce7a7 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -9,7 +9,7 @@ type scoreArgs = | ScalarEstimateScalarAnswer(abstractScoreArgs) let logFn = Js.Math.log // base e -let minusScaledLogOfQuot = (~esti, ~answ): result => { +let minusScaledLogOfQuotient = (~esti, ~answ): result => { let quot = esti /. answ quot < 0.0 ? Error(Operation.ComplexNumberError) : Ok(-.answ *. logFn(quot)) } @@ -26,7 +26,7 @@ module WithDistAnswer = { } else if estimateElement == 0.0 { Ok(infinity) } else { - minusScaledLogOfQuot(~esti=estimateElement, ~answ=answerElement) + minusScaledLogOfQuotient(~esti=estimateElement, ~answ=answerElement) } let rec sum = (~estimate: t, ~answer: t, ~combineFn, ~integrateFn, ~toMixedFn): result< @@ -109,7 +109,7 @@ module WithScalarAnswer = { } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { infinity->Ok } else { - minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) + minusScaledLogOfQuotient(~esti=numerator, ~answ=priorDensityOfAnswer) } } @@ -151,7 +151,7 @@ module TwoScalars = { } else if estimate == 0.0 { infinity->Ok } else { - minusScaledLogOfQuot(~esti=estimate, ~answ=answer) + minusScaledLogOfQuotient(~esti=estimate, ~answ=answer) } let scoreWithPrior = (~estimate: float, ~answer: float, ~prior: float) => @@ -160,10 +160,13 @@ module TwoScalars = { } else if estimate == 0.0 || prior == 0.0 { infinity->Ok } else { - minusScaledLogOfQuot(~esti=estimate /. prior, ~answ=answer) + minusScaledLogOfQuotient(~esti=estimate /. prior, ~answ=answer) } } +let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result<(t, t), 'e> => + E.R.merge(toPointSetFn(estimate, ()), toPointSetFn(answer, ())) + let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< float, Operation.Error.t, diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 98e4842d..2959f924 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -214,15 +214,12 @@ let dispatchToGenericOutput = ( | ("normalize", [EvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer)]) => Some( - DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Dist(answer), None)), estimate), - ~env, - ), + DistributionOperation.run(FromDist(ToScore(LogScore(GDist(answer), None)), estimate), ~env), ) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer), EvDistribution(prior)]) => Some( DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), estimate), + FromDist(ToScore(LogScore(GDist(answer), Some(GDist(prior)))), estimate), ~env, ), ) From 18733f2d0925d0c62edc1653c6de84898f9dccd1 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 08:47:16 -0400 Subject: [PATCH 11/60] merged 592 --- .../Distributions/DistributionOperation.res | 2 +- .../Distributions/DistributionTypes.res | 18 +++---- .../rescript/Distributions/GenericDist.res | 51 +++++++------------ .../PointSetDist/PointSetDist_Scoring.res | 4 +- .../ReducerInterface_GenericDistribution.res | 4 +- 5 files changed, 31 insertions(+), 48 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 8190a057..b1d52319 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -146,7 +146,7 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { } | ToDist(Normalize) => dist->GenericDist.normalize->Dist | ToScore(LogScore(answer, prior)) => - GenericDist.Score.logScore(~estimate=GDist(dist), ~answer, ~prior) + GenericDist.Score.logScore(~estimate=Score_Dist(dist), ~answer, ~prior) ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult | ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index 20b29b38..ee319ed5 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -92,7 +92,7 @@ module DistributionOperation = { | ToString | ToSparkline(int) - type genericDistOrScalar = GDist(genericDist) | GScalar(float) + type genericDistOrScalar = Score_Dist(genericDist) | Score_Scalar(float) type toScore = LogScore(genericDistOrScalar, option) @@ -165,35 +165,35 @@ module Constructors = { let inspect = (dist): t => FromDist(ToDist(Inspect), dist) module LogScore = { let distEstimateDistAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(GDist(answer), None)), + ToScore(LogScore(Score_Dist(answer), None)), estimate, ) let distEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(GDist(answer), Some(prior))), + ToScore(LogScore(Score_Dist(answer), Some(prior))), estimate, ) let distEstimateScalarAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(GScalar(answer), None)), + ToScore(LogScore(Score_Scalar(answer), None)), estimate, ) let distEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(GScalar(answer), Some(prior))), + ToScore(LogScore(Score_Scalar(answer), Some(prior))), estimate, ) let scalarEstimateDistAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(GDist(answer), None)), + ToScore(LogScore(Score_Dist(answer), None)), estimate, ) let scalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(GDist(answer), Some(prior))), + ToScore(LogScore(Score_Dist(answer), Some(prior))), estimate, ) let scalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(GScalar(answer), None)), + ToScore(LogScore(Score_Scalar(answer), None)), estimate, ) let scalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(GScalar(answer), Some(prior))), + ToScore(LogScore(Score_Scalar(answer), Some(prior))), estimate, ) } diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 35b35b17..6f435748 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -121,31 +121,13 @@ let toPointSet = ( module Score = { type genericDistOrScalar = DistributionTypes.DistributionOperation.genericDistOrScalar - type psDistOrScalar = PSDist(PointSetTypes.pointSetDist) | PSScalar(float) + type pointSet_ScoreDistOrScalar = PSDist(PointSetTypes.pointSetDist) | PSScalar(float) let argsMake = ( ~esti: genericDistOrScalar, ~answ: genericDistOrScalar, ~prior: option, ): result => { -// <<<<<<< HEAD -// let toPointSetFn = toPointSet( -// ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, -// ~sampleCount=MagicNumbers.Environment.defaultSampleCount, -// ~xSelection=#ByWeight, -// ) -// let twoDists = PointSetDist_Scoring.twoGenericDistsToTwoPointSetDists -// let prior': option> = switch prior { -// | None => None -// | Some(GDist(d)) => toPointSetFn(d, ())->E.R2.fmap(x => x->PSDist)->Some -// | Some(GScalar(s)) => s->PSScalar->Ok->Some -// } -// switch (esti, answ, prior') { -// | (GDist(esti'), GDist(answ'), None) => -// twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => -// {estimate: esti'', answer: answ'', prior: None} -// ->PointSetDist_Scoring.DistEstimateDistAnswer -// ======= let toPointSetFn = t => toPointSet( t, @@ -156,52 +138,53 @@ module Score = { ) let prior': option> = switch prior { | None => None - | Some(Score_Dist(d)) => toPointSetFn(d)->E.R.bind(x => x->D->Ok)->Some - | Some(Score_Scalar(s)) => s->S->Ok->Some + | Some(Score_Dist(d)) => toPointSetFn(d)->E.R.bind(x => x->PSDist->Ok)->Some + | Some(Score_Scalar(s)) => s->PSScalar->Ok->Some } - let twoDists = (esti': t, answ': t): result< + let twoDists = (~toPointSetFn, esti': t, answ': t): result< (PointSetTypes.pointSetDist, PointSetTypes.pointSetDist), error, > => E.R.merge(toPointSetFn(esti'), toPointSetFn(answ')) switch (esti, answ, prior') { | (Score_Dist(esti'), Score_Dist(answ'), None) => - twoDists(esti', answ')->E.R2.fmap(((esti'', answ'')) => + twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => {estimate: esti'', answer: answ'', prior: None}->PointSetDist_Scoring.DistEstimateDistAnswer -// >>>>>>> origin/scoring-cleanup-refactor ) - | (GDist(esti'), GDist(answ'), Some(Ok(PSDist(prior'')))) => + | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(PSDist(prior'')))) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => {estimate: esti'', answer: answ'', prior: Some(prior'')} ->PointSetDist_Scoring.DistEstimateDistAnswer ) - | (Score_Dist(_), _, Some(Ok(S(_)))) => DistributionTypes.Unreachable->Error + | (Score_Dist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => toPointSetFn(esti')->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: None} ->PointSetDist_Scoring.DistEstimateScalarAnswer ->Ok ) - | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(D(prior'')))) => + | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(PSDist(prior'')))) => toPointSetFn(esti')->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: Some(prior'')} - ->PointSetDist_Scoring.DistEstimateScalarAnswer + ->PointSetDist_Scoring.DistEstimateScalarAnswer + -> Ok ) | (Score_Scalar(esti'), Score_Dist(answ'), None) => toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: None} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->PointSetDist_Scoring.ScalarEstimateDistAnswer + -> Ok ) - | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(S(prior'')))) => + | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(PSScalar(prior'')))) => toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: Some(prior'')} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->PointSetDist_Scoring.ScalarEstimateDistAnswer->Ok ) - | (GScalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error - | (GScalar(esti'), GScalar(answ'), None) => + | (Score_Scalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error + | (Score_Scalar(esti'), Score_Scalar(answ'), None) => {estimate: esti', answer: answ', prior: None} ->PointSetDist_Scoring.ScalarEstimateScalarAnswer ->Ok - | (GScalar(esti'), GScalar(answ'), Some(Ok(PSScalar(prior'')))) => + | (Score_Scalar(esti'), Score_Scalar(answ'), Some(Ok(PSScalar(prior'')))) => {estimate: esti', answer: answ', prior: prior''->Some} ->PointSetDist_Scoring.ScalarEstimateScalarAnswer ->Ok diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 86d463e9..5dd312af 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -132,7 +132,7 @@ module WithScalarAnswer = { } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { infinity->Ok } else { - minusScaledLogOfQuot(~esti=numerator, ~answ=priorDensityOfAnswer) + minusScaledLogOfQuotient(~esti=numerator, ~answ=priorDensityOfAnswer) } } @@ -172,7 +172,7 @@ module TwoScalars = { } } -let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result<(t, t), 'e> => +let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result<(pointSetDist, pointSetDist), 'e> => E.R.merge(toPointSetFn(estimate, ()), toPointSetFn(answer, ())) let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 2959f924..0d3c3333 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -214,12 +214,12 @@ let dispatchToGenericOutput = ( | ("normalize", [EvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer)]) => Some( - DistributionOperation.run(FromDist(ToScore(LogScore(GDist(answer), None)), estimate), ~env), + DistributionOperation.run(FromDist(ToScore(LogScore(Score_Dist(answer), None)), estimate), ~env), ) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer), EvDistribution(prior)]) => Some( DistributionOperation.run( - FromDist(ToScore(LogScore(GDist(answer), Some(GDist(prior)))), estimate), + FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), estimate), ~env, ), ) From d156b24fd13078a8981deece42d038e167c3d787 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 08:51:34 -0400 Subject: [PATCH 12/60] \`yarn format\` pass --- .../src/rescript/Distributions/GenericDist.res | 18 +++++++++++------- .../PointSetDist/PointSetDist_Scoring.res | 6 ++++-- .../ReducerInterface_GenericDistribution.res | 5 ++++- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 9631e3aa..e63490ea 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -164,8 +164,11 @@ module Score = { ) | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(PSDist(prior'')))) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => - {estimate: esti'', answer: answ'', prior: Some(prior'')} - ->PointSetDist_Scoring.DistEstimateDistAnswer + { + estimate: esti'', + answer: answ'', + prior: Some(prior''), + }->PointSetDist_Scoring.DistEstimateDistAnswer ) | (Score_Dist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => @@ -177,19 +180,20 @@ module Score = { | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(PSDist(prior'')))) => toPointSetFn(esti')->E.R.bind(esti'' => {estimate: esti'', answer: answ', prior: Some(prior'')} - ->PointSetDist_Scoring.DistEstimateScalarAnswer - -> Ok + ->PointSetDist_Scoring.DistEstimateScalarAnswer + ->Ok ) | (Score_Scalar(esti'), Score_Dist(answ'), None) => toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: None} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer - -> Ok + ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->Ok ) | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(PSScalar(prior'')))) => toPointSetFn(answ')->E.R.bind(answ'' => {estimate: esti', answer: answ'', prior: Some(prior'')} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer->Ok + ->PointSetDist_Scoring.ScalarEstimateDistAnswer + ->Ok ) | (Score_Scalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error | (Score_Scalar(esti'), Score_Scalar(answ'), None) => diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 5dd312af..a5468b26 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -172,8 +172,10 @@ module TwoScalars = { } } -let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result<(pointSetDist, pointSetDist), 'e> => - E.R.merge(toPointSetFn(estimate, ()), toPointSetFn(answer, ())) +let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result< + (pointSetDist, pointSetDist), + 'e, +> => E.R.merge(toPointSetFn(estimate, ()), toPointSetFn(answer, ())) let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< float, diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 9b22327f..47a067fc 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -223,7 +223,10 @@ let dispatchToGenericOutput = ( | ("normalize", [EvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer)]) => Some( - DistributionOperation.run(FromDist(ToScore(LogScore(Score_Dist(answer), None)), estimate), ~env), + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Dist(answer), None)), estimate), + ~env, + ), ) | ("klDivergence", [EvDistribution(estimate), EvDistribution(answer), EvDistribution(prior)]) => Some( From 1a6ced03733c8993206c3c816dbc25109648d8aa Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 09:34:56 -0400 Subject: [PATCH 13/60] a few comments more --- .../src/rescript/Distributions/GenericDist.res | 14 ++------------ .../PointSetDist/PointSetDist_Scoring.res | 15 +++++++-------- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index e63490ea..02163092 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -183,18 +183,8 @@ module Score = { ->PointSetDist_Scoring.DistEstimateScalarAnswer ->Ok ) - | (Score_Scalar(esti'), Score_Dist(answ'), None) => - toPointSetFn(answ')->E.R.bind(answ'' => - {estimate: esti', answer: answ'', prior: None} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer - ->Ok - ) - | (Score_Scalar(esti'), Score_Dist(answ'), Some(Ok(PSScalar(prior'')))) => - toPointSetFn(answ')->E.R.bind(answ'' => - {estimate: esti', answer: answ'', prior: Some(prior'')} - ->PointSetDist_Scoring.ScalarEstimateDistAnswer - ->Ok - ) + | (Score_Scalar(_), Score_Dist(_), None) => NotYetImplemented->Error + | (Score_Scalar(_), Score_Dist(_), Some(Ok(PSScalar(_)))) => NotYetImplemented->Error | (Score_Scalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error | (Score_Scalar(esti'), Score_Scalar(answ'), None) => {estimate: esti', answer: answ', prior: None} diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index a5468b26..50f8faa9 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -1,11 +1,11 @@ type pointSetDist = PointSetTypes.pointSetDist type scalar = float +type score = float type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} type scoreArgs = | DistEstimateDistAnswer(abstractScoreArgs) | DistEstimateScalarAnswer(abstractScoreArgs) - | ScalarEstimateDistAnswer(abstractScoreArgs) | ScalarEstimateScalarAnswer(abstractScoreArgs) let logFn = Js.Math.log // base e @@ -35,7 +35,7 @@ module WithDistAnswer = { ~combineFn, ~integrateFn, ~toMixedFn, - ): result => { + ): result => { let combineAndIntegrate = (estimate, answer) => combineFn(integrand, estimate, answer)->E.R2.fmap(integrateFn) @@ -83,7 +83,7 @@ module WithDistAnswer = { ~combineFn, ~integrateFn, ~toMixedFn, - ): result => { + ): result => { let kl1 = sum(~estimate, ~answer, ~combineFn, ~integrateFn, ~toMixedFn) let kl2 = sum(~estimate=prior, ~answer, ~combineFn, ~integrateFn, ~toMixedFn) E.R.merge(kl1, kl2)->E.R2.fmap(((kl1', kl2')) => kl1' -. kl2') @@ -92,9 +92,9 @@ module WithDistAnswer = { module WithScalarAnswer = { let sum = (mp: PointSetTypes.MixedPoint.t): float => mp.continuous +. mp.discrete - let score = (~estimate: pointSetDist, ~answer: scalar): result => { + let score = (~estimate: pointSetDist, ~answer: scalar): result => { let _score = (~estimatePdf: float => float, ~answer: float): result< - float, + score, Operation.Error.t, > => { let density = answer->estimatePdf @@ -117,7 +117,7 @@ module WithScalarAnswer = { } let scoreWithPrior = (~estimate: pointSetDist, ~answer: scalar, ~prior: pointSetDist): result< - float, + score, Operation.Error.t, > => { let _scoreWithPrior = ( @@ -178,7 +178,7 @@ let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): resul > => E.R.merge(toPointSetFn(estimate, ()), toPointSetFn(answer, ())) let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< - float, + score, Operation.Error.t, > => switch args { @@ -190,7 +190,6 @@ let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< WithScalarAnswer.score(~estimate, ~answer) | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => WithScalarAnswer.scoreWithPrior(~estimate, ~answer, ~prior) - | ScalarEstimateDistAnswer(_) => Operation.NotYetImplemented->Error | ScalarEstimateScalarAnswer({estimate, answer, prior: None}) => TwoScalars.score(~estimate, ~answer) | ScalarEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => From 2c72972097f0c6fe3972ae1191b35879fb59597d Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 09:35:25 -0400 Subject: [PATCH 14/60] the lintness --- packages/cli/README.md | 8 +- packages/cli/package.json | 39 +- packages/components/src/styles/base.css | 453 +++++++++++--------- packages/components/src/styles/forms.css | 226 +++++----- packages/vscode-ext/.eslintrc.json | 38 +- packages/vscode-ext/.vscode/extensions.json | 8 +- packages/vscode-ext/.vscode/launch.json | 50 +-- packages/vscode-ext/.vscode/settings.json | 18 +- packages/vscode-ext/.vscode/tasks.json | 32 +- packages/vscode-ext/tsconfig.json | 28 +- 10 files changed, 469 insertions(+), 431 deletions(-) diff --git a/packages/cli/README.md b/packages/cli/README.md index d1ec4b8b..7b0d0038 100644 --- a/packages/cli/README.md +++ b/packages/cli/README.md @@ -2,19 +2,21 @@ This package can be used to incorporate a very simple `import` system into Squiggle. -To use, write special files with a ``.squiggleU`` file type. In these files, you can write lines like, +To use, write special files with a `.squiggleU` file type. In these files, you can write lines like, ``` @import(models/gdp_over_time.squiggle, gdpOverTime) gdpOverTime(2.5) ``` -The imports will be replaced with the contents of the file in `models/gdp_over_time.squiggle` upon compilation. The ``.squiggleU`` file will be converted into a ``.squiggle`` file with the ``import`` statement having this replacement. +The imports will be replaced with the contents of the file in `models/gdp_over_time.squiggle` upon compilation. The `.squiggleU` file will be converted into a `.squiggle` file with the `import` statement having this replacement. ## Running ### `npx squiggle-cli-experimental compile` + Runs compilation in the current directory and all of its subdirectories. ### `npx squiggle-cli-experimental watch` -Watches ``.squiggleU`` files in the current directory (and subdirectories) and rebuilds them when they are saved. Note that this will *not* rebuild files when their dependencies are changed, just when they are changed directly. \ No newline at end of file + +Watches `.squiggleU` files in the current directory (and subdirectories) and rebuilds them when they are saved. Note that this will _not_ rebuild files when their dependencies are changed, just when they are changed directly. diff --git a/packages/cli/package.json b/packages/cli/package.json index 1206f8d8..053d8096 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,22 +1,21 @@ { - "name": "squiggle-cli-experimental", - "version": "0.0.3", - "main": "index.js", - "homepage": "https://squiggle-language.com", - "author": "Quantified Uncertainty Research Institute", - "bin": "index.js", - "type": "module", - "scripts": { - "start": "node ." - }, - "license": "MIT", - "dependencies": { - "chalk": "^5.0.1", - "chokidar": "^3.5.3", - "commander": "^9.3.0", - "fs": "^0.0.1-security", - "glob": "^8.0.3", - "indent-string": "^5.0.0" - } + "name": "squiggle-cli-experimental", + "version": "0.0.3", + "main": "index.js", + "homepage": "https://squiggle-language.com", + "author": "Quantified Uncertainty Research Institute", + "bin": "index.js", + "type": "module", + "scripts": { + "start": "node ." + }, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "commander": "^9.3.0", + "fs": "^0.0.1-security", + "glob": "^8.0.3", + "indent-string": "^5.0.0" } - \ No newline at end of file +} diff --git a/packages/components/src/styles/base.css b/packages/components/src/styles/base.css index e0a33a56..a5922d5e 100644 --- a/packages/components/src/styles/base.css +++ b/packages/components/src/styles/base.css @@ -1,5 +1,5 @@ .squiggle { -/* + /* This file contains: 1) Base Tailwind preflight styles 2) Base https://github.com/tailwindlabs/tailwindcss-forms styles @@ -7,365 +7,390 @@ This file contains: (Both are wrapped in .squiggle) */ -/* + /* 1. Use a consistent sensible line-height in all browsers. 2. Prevent adjustments of font size after orientation changes in iOS. 3. Use a more readable tab size. 4. Use the user's configured `sans` font-family by default. */ -/* html { */ + /* html { */ line-height: 1.5; /* 1 */ -webkit-text-size-adjust: 100%; /* 2 */ -moz-tab-size: 4; /* 3 */ tab-size: 4; /* 3 */ - font-family: theme('fontFamily.sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); /* 4 */ -/* } */ + font-family: theme( + "fontFamily.sans", + ui-sans-serif, + system-ui, + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + "Helvetica Neue", + Arial, + "Noto Sans", + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji" + ); /* 4 */ + /* } */ -/* + /* 1. Remove the margin in all browsers. 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. */ -/* body { */ + /* body { */ margin: 0; /* 1 */ line-height: inherit; /* 2 */ -/* } */ + /* } */ - -/* + /* 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) */ -*, -::before, -::after { - box-sizing: border-box; /* 1 */ - border-width: 0; /* 2 */ - border-style: solid; /* 2 */ - border-color: theme('borderColor.DEFAULT', currentColor); /* 2 */ -} + *, + ::before, + ::after { + box-sizing: border-box; /* 1 */ + border-width: 0; /* 2 */ + border-style: solid; /* 2 */ + border-color: theme("borderColor.DEFAULT", currentColor); /* 2 */ + } -::before, -::after { - --tw-content: ''; -} + ::before, + ::after { + --tw-content: ""; + } -/* + /* 1. Add the correct height in Firefox. 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 3. Ensure horizontal rules are visible by default. */ -hr { - height: 0; /* 1 */ - color: inherit; /* 2 */ - border-top-width: 1px; /* 3 */ -} + hr { + height: 0; /* 1 */ + color: inherit; /* 2 */ + border-top-width: 1px; /* 3 */ + } -/* + /* Add the correct text decoration in Chrome, Edge, and Safari. */ -abbr:where([title]) { - text-decoration: underline dotted; -} + abbr:where([title]) { + text-decoration: underline dotted; + } -/* + /* Remove the default font size and weight for headings. */ -h1, -h2, -h3, -h4, -h5, -h6 { - font-size: inherit; - font-weight: inherit; -} + h1, + h2, + h3, + h4, + h5, + h6 { + font-size: inherit; + font-weight: inherit; + } -/* + /* Reset links to optimize for opt-in styling instead of opt-out. */ -a { - color: inherit; - text-decoration: inherit; -} + a { + color: inherit; + text-decoration: inherit; + } -/* + /* Add the correct font weight in Edge and Safari. */ -b, -strong { - font-weight: bolder; -} + b, + strong { + font-weight: bolder; + } -/* + /* 1. Use the user's configured `mono` font family by default. 2. Correct the odd `em` font sizing in all browsers. */ -code, -kbd, -samp, -pre { - font-family: theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); /* 1 */ - font-size: 1em; /* 2 */ -} + code, + kbd, + samp, + pre { + font-family: theme( + "fontFamily.mono", + ui-monospace, + SFMono-Regular, + Menlo, + Monaco, + Consolas, + "Liberation Mono", + "Courier New", + monospace + ); /* 1 */ + font-size: 1em; /* 2 */ + } -/* + /* Add the correct font size in all browsers. */ -small { - font-size: 80%; -} + small { + font-size: 80%; + } -/* + /* Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} + sub, + sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } -sub { - bottom: -0.25em; -} + sub { + bottom: -0.25em; + } -sup { - top: -0.5em; -} + sup { + top: -0.5em; + } -/* + /* 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 3. Remove gaps between table borders by default. */ -table { - text-indent: 0; /* 1 */ - border-color: inherit; /* 2 */ - border-collapse: collapse; /* 3 */ -} + table { + text-indent: 0; /* 1 */ + border-color: inherit; /* 2 */ + border-collapse: collapse; /* 3 */ + } -/* + /* 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. 3. Remove default padding in all browsers. */ -button, -input, -optgroup, -select, -textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - font-weight: inherit; /* 1 */ - line-height: inherit; /* 1 */ - color: inherit; /* 1 */ - margin: 0; /* 2 */ - padding: 0; /* 3 */ -} + button, + input, + optgroup, + select, + textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + font-weight: inherit; /* 1 */ + line-height: inherit; /* 1 */ + color: inherit; /* 1 */ + margin: 0; /* 2 */ + padding: 0; /* 3 */ + } -/* + /* Remove the inheritance of text transform in Edge and Firefox. */ -button, -select { - text-transform: none; -} + button, + select { + text-transform: none; + } -/* + /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Remove default button styles. */ -button, -[type='button'], -[type='reset'], -[type='submit'] { - -webkit-appearance: button; /* 1 */ - background-color: transparent; /* 2 */ - background-image: none; /* 2 */ -} + button, + [type="button"], + [type="reset"], + [type="submit"] { + -webkit-appearance: button; /* 1 */ + background-color: transparent; /* 2 */ + background-image: none; /* 2 */ + } -/* + /* Use the modern Firefox focus style for all focusable elements. */ -:-moz-focusring { - outline: auto; -} + :-moz-focusring { + outline: auto; + } -/* + /* Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) */ -:-moz-ui-invalid { - box-shadow: none; -} + :-moz-ui-invalid { + box-shadow: none; + } -/* + /* Add the correct vertical alignment in Chrome and Firefox. */ -progress { - vertical-align: baseline; -} + progress { + vertical-align: baseline; + } -/* + /* Correct the cursor style of increment and decrement buttons in Safari. */ -::-webkit-inner-spin-button, -::-webkit-outer-spin-button { - height: auto; -} + ::-webkit-inner-spin-button, + ::-webkit-outer-spin-button { + height: auto; + } -/* + /* 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ -[type='search'] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} + [type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ + } -/* + /* Remove the inner padding in Chrome and Safari on macOS. */ -::-webkit-search-decoration { - -webkit-appearance: none; -} + ::-webkit-search-decoration { + -webkit-appearance: none; + } -/* + /* 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} + ::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ + } -/* + /* Add the correct display in Chrome and Safari. */ -summary { - display: list-item; -} + summary { + display: list-item; + } -/* + /* Removes the default spacing and border for appropriate elements. */ -blockquote, -dl, -dd, -h1, -h2, -h3, -h4, -h5, -h6, -hr, -figure, -p, -pre { - margin: 0; -} + blockquote, + dl, + dd, + h1, + h2, + h3, + h4, + h5, + h6, + hr, + figure, + p, + pre { + margin: 0; + } -fieldset { - margin: 0; - padding: 0; -} + fieldset { + margin: 0; + padding: 0; + } -legend { - padding: 0; -} + legend { + padding: 0; + } -ol, -ul, -menu { - list-style: none; - margin: 0; - padding: 0; -} + ol, + ul, + menu { + list-style: none; + margin: 0; + padding: 0; + } -/* + /* Prevent resizing textareas horizontally by default. */ -textarea { - resize: vertical; -} + textarea { + resize: vertical; + } -/* + /* 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 2. Set the default placeholder color to the user's configured gray 400 color. */ -input::placeholder, -textarea::placeholder { - opacity: 1; /* 1 */ - color: theme('colors.gray.400', #9ca3af); /* 2 */ -} + input::placeholder, + textarea::placeholder { + opacity: 1; /* 1 */ + color: theme("colors.gray.400", #9ca3af); /* 2 */ + } -/* + /* Set the default cursor for buttons. */ -button, -[role="button"] { - cursor: pointer; -} + button, + [role="button"] { + cursor: pointer; + } -/* + /* Make sure disabled buttons don't get the pointer cursor. */ -:disabled { - cursor: default; -} + :disabled { + cursor: default; + } -/* + /* 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) This can trigger a poorly considered lint error in some tools but is included by design. */ -img, -svg, -video, -canvas, -audio, -iframe, -embed, -object { - display: block; /* 1 */ - vertical-align: middle; /* 2 */ -} + img, + svg, + video, + canvas, + audio, + iframe, + embed, + object { + display: block; /* 1 */ + vertical-align: middle; /* 2 */ + } -/* + /* Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) */ -img, -video { - max-width: 100%; - height: auto; -} + img, + video { + max-width: 100%; + height: auto; + } } diff --git a/packages/components/src/styles/forms.css b/packages/components/src/styles/forms.css index 60b4075d..0a54ab22 100644 --- a/packages/components/src/styles/forms.css +++ b/packages/components/src/styles/forms.css @@ -1,102 +1,130 @@ /* Fork of https://github.com/tailwindlabs/tailwindcss-forms styles, see the comment in main.css for details. */ .squiggle { -.form-input,.form-textarea,.form-select,.form-multiselect { -appearance: none; -background-color: #fff; -border-color: #6b7280; -border-width: 1px; -border-radius: 0px; -padding-top: 0.5rem; -padding-right: 0.75rem; -padding-bottom: 0.5rem; -padding-left: 0.75rem; -font-size: 1rem; -line-height: 1.5rem; ---tw-shadow: 0 0 #0000; -} -.form-input:focus, .form-textarea:focus, .form-select:focus, .form-multiselect:focus { -outline: 2px solid transparent; -outline-offset: 2px; ---tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); ---tw-ring-offset-width: 0px; ---tw-ring-offset-color: #fff; ---tw-ring-color: #2563eb; ---tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); ---tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); -box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); -border-color: #2563eb; -} -.form-input::placeholder,.form-textarea::placeholder { -color: #6b7280; -opacity: 1; -} -.form-input::-webkit-datetime-edit-fields-wrapper { -padding: 0; -} -.form-input::-webkit-date-and-time-value { -min-height: 1.5em; -} -.form-input::-webkit-datetime-edit,.form-input::-webkit-datetime-edit-year-field,.form-input::-webkit-datetime-edit-month-field,.form-input::-webkit-datetime-edit-day-field,.form-input::-webkit-datetime-edit-hour-field,.form-input::-webkit-datetime-edit-minute-field,.form-input::-webkit-datetime-edit-second-field,.form-input::-webkit-datetime-edit-millisecond-field,.form-input::-webkit-datetime-edit-meridiem-field { -padding-top: 0; -padding-bottom: 0; -} -.form-checkbox,.form-radio { -appearance: none; -padding: 0; --webkit-print-color-adjust: exact; - print-color-adjust: exact; -display: inline-block; -vertical-align: middle; -background-origin: border-box; --webkit-user-select: none; - user-select: none; -flex-shrink: 0; -height: 1rem; -width: 1rem; -color: #2563eb; -background-color: #fff; -border-color: #6b7280; -border-width: 1px; ---tw-shadow: 0 0 #0000; -} -.form-checkbox { -border-radius: 0px; -} -.form-checkbox:focus,.form-radio:focus { -outline: 2px solid transparent; -outline-offset: 2px; ---tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); ---tw-ring-offset-width: 2px; ---tw-ring-offset-color: #fff; ---tw-ring-color: #2563eb; ---tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); ---tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); -box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); -} -.form-checkbox:checked,.form-radio:checked { -border-color: transparent; -background-color: currentColor; -background-size: 100% 100%; -background-position: center; -background-repeat: no-repeat; -} -.form-checkbox:checked { -background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); -} -.form-checkbox:checked:hover,.form-checkbox:checked:focus,.form-radio:checked:hover,.form-radio:checked:focus { -border-color: transparent; -background-color: currentColor; -} -.form-checkbox:indeterminate { -background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); -border-color: transparent; -background-color: currentColor; -background-size: 100% 100%; -background-position: center; -background-repeat: no-repeat; -} -.form-checkbox:indeterminate:hover,.form-checkbox:indeterminate:focus { -border-color: transparent; -background-color: currentColor; -} + .form-input, + .form-textarea, + .form-select, + .form-multiselect { + appearance: none; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + border-radius: 0px; + padding-top: 0.5rem; + padding-right: 0.75rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 1rem; + line-height: 1.5rem; + --tw-shadow: 0 0 #0000; + } + .form-input:focus, + .form-textarea:focus, + .form-select:focus, + .form-multiselect:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty, /*!*/ /*!*/); + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: #2563eb; + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 + var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 + calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), + var(--tw-shadow); + border-color: #2563eb; + } + .form-input::placeholder, + .form-textarea::placeholder { + color: #6b7280; + opacity: 1; + } + .form-input::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + .form-input::-webkit-date-and-time-value { + min-height: 1.5em; + } + .form-input::-webkit-datetime-edit, + .form-input::-webkit-datetime-edit-year-field, + .form-input::-webkit-datetime-edit-month-field, + .form-input::-webkit-datetime-edit-day-field, + .form-input::-webkit-datetime-edit-hour-field, + .form-input::-webkit-datetime-edit-minute-field, + .form-input::-webkit-datetime-edit-second-field, + .form-input::-webkit-datetime-edit-millisecond-field, + .form-input::-webkit-datetime-edit-meridiem-field { + padding-top: 0; + padding-bottom: 0; + } + .form-checkbox, + .form-radio { + appearance: none; + padding: 0; + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + display: inline-block; + vertical-align: middle; + background-origin: border-box; + -webkit-user-select: none; + user-select: none; + flex-shrink: 0; + height: 1rem; + width: 1rem; + color: #2563eb; + background-color: #fff; + border-color: #6b7280; + border-width: 1px; + --tw-shadow: 0 0 #0000; + } + .form-checkbox { + border-radius: 0px; + } + .form-checkbox:focus, + .form-radio:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty, /*!*/ /*!*/); + --tw-ring-offset-width: 2px; + --tw-ring-offset-color: #fff; + --tw-ring-color: #2563eb; + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 + var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 + calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), + var(--tw-shadow); + } + .form-checkbox:checked, + .form-radio:checked { + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + } + .form-checkbox:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); + } + .form-checkbox:checked:hover, + .form-checkbox:checked:focus, + .form-radio:checked:hover, + .form-radio:checked:focus { + border-color: transparent; + background-color: currentColor; + } + .form-checkbox:indeterminate { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + } + .form-checkbox:indeterminate:hover, + .form-checkbox:indeterminate:focus { + border-color: transparent; + background-color: currentColor; + } } diff --git a/packages/vscode-ext/.eslintrc.json b/packages/vscode-ext/.eslintrc.json index f9b22b79..5dfecab7 100644 --- a/packages/vscode-ext/.eslintrc.json +++ b/packages/vscode-ext/.eslintrc.json @@ -1,24 +1,18 @@ { - "root": true, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/naming-convention": "warn", - "@typescript-eslint/semi": "warn", - "curly": "warn", - "eqeqeq": "warn", - "no-throw-literal": "warn", - "semi": "off" - }, - "ignorePatterns": [ - "out", - "dist", - "**/*.d.ts" - ] + "root": true, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/naming-convention": "warn", + "@typescript-eslint/semi": "warn", + "curly": "warn", + "eqeqeq": "warn", + "no-throw-literal": "warn", + "semi": "off" + }, + "ignorePatterns": ["out", "dist", "**/*.d.ts"] } diff --git a/packages/vscode-ext/.vscode/extensions.json b/packages/vscode-ext/.vscode/extensions.json index 3ac9aeb6..c0a2258b 100644 --- a/packages/vscode-ext/.vscode/extensions.json +++ b/packages/vscode-ext/.vscode/extensions.json @@ -1,7 +1,5 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "dbaeumer.vscode-eslint" - ] + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": ["dbaeumer.vscode-eslint"] } diff --git a/packages/vscode-ext/.vscode/launch.json b/packages/vscode-ext/.vscode/launch.json index 670d6e66..1210201d 100644 --- a/packages/vscode-ext/.vscode/launch.json +++ b/packages/vscode-ext/.vscode/launch.json @@ -3,32 +3,26 @@ // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { - "version": "0.2.0", - "configurations": [ - { - "name": "Run Extension", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" - ], - "outFiles": [ - "${workspaceFolder}/out/test/**/*.js" - ], - "preLaunchTask": "${defaultBuildTask}" - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test/suite/index" + ], + "outFiles": ["${workspaceFolder}/out/test/**/*.js"], + "preLaunchTask": "${defaultBuildTask}" + } + ] } diff --git a/packages/vscode-ext/.vscode/settings.json b/packages/vscode-ext/.vscode/settings.json index 30bf8c2d..ffeaf91c 100644 --- a/packages/vscode-ext/.vscode/settings.json +++ b/packages/vscode-ext/.vscode/settings.json @@ -1,11 +1,11 @@ // Place your settings in this file to overwrite default and user settings. { - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, - // Turn off tsc task auto detection since we have the necessary tasks as npm scripts - "typescript.tsc.autoDetect": "off" -} \ No newline at end of file + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, + // Turn off tsc task auto detection since we have the necessary tasks as npm scripts + "typescript.tsc.autoDetect": "off" +} diff --git a/packages/vscode-ext/.vscode/tasks.json b/packages/vscode-ext/.vscode/tasks.json index 3b17e53b..078ff7e0 100644 --- a/packages/vscode-ext/.vscode/tasks.json +++ b/packages/vscode-ext/.vscode/tasks.json @@ -1,20 +1,20 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": "$tsc-watch", - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - } - ] + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] } diff --git a/packages/vscode-ext/tsconfig.json b/packages/vscode-ext/tsconfig.json index 29fc0a52..aed48ef9 100644 --- a/packages/vscode-ext/tsconfig.json +++ b/packages/vscode-ext/tsconfig.json @@ -1,17 +1,15 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "outDir": "out", - "lib": [ - "ES2020", "dom" - ], - "sourceMap": true, - "rootDir": "src", - "strict": true, /* enable all strict type-checking options */ - /* Additional Checks */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - } + "compilerOptions": { + "module": "commonjs", + "target": "ES2020", + "outDir": "out", + "lib": ["ES2020", "dom"], + "sourceMap": true, + "rootDir": "src", + "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + } } From 633bab9c30a7a5d4ae2d25ce15e377f0d86f7490 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 20 Jun 2022 11:11:11 -0400 Subject: [PATCH 15/60] a fistful of comments --- .../Distributions/PointSetDist/PointSetDist_Scoring.res | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 50f8faa9..1335e990 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -124,7 +124,7 @@ module WithScalarAnswer = { ~estimatePdf: float => float, ~answer: scalar, ~priorPdf: float => float, - ): result => { + ): result => { let numerator = answer->estimatePdf let priorDensityOfAnswer = answer->priorPdf if numerator < 0.0 || priorDensityOfAnswer < 0.0 { @@ -162,7 +162,7 @@ module TwoScalars = { minusScaledLogOfQuotient(~esti=estimate, ~answ=answer) } - let scoreWithPrior = (~estimate: float, ~answer: float, ~prior: float) => + let scoreWithPrior = (~estimate: scalar, ~answer: scalar, ~prior: scalar) => if answer == 0.0 { 0.0->Ok } else if estimate == 0.0 || prior == 0.0 { From 4b1c226173e43e76453fd6f60a2df057b49048d3 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Mon, 20 Jun 2022 16:14:41 -0400 Subject: [PATCH 16/60] fix: PointSetDist_Scoring.WithScalarAnswer.scoreWithPrior Done in pair coding with Quinn. Value::[0.3 to 0.9] --- .../Scoring/WithScalarAnswer_test.res | 81 +++++++++++++++++++ .../PointSetDist/PointSetDist_Scoring.res | 11 ++- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res new file mode 100644 index 00000000..362aed81 --- /dev/null +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res @@ -0,0 +1,81 @@ +// Bring up a discrete distribution +open Jest +open Expect +open TestHelpers +open GenericDist_Fixtures + +// WithDistAnswer -> in the KL divergence test file. + +// WithScalarAnswer +describe("WithScalarAnswer: discrete -> discrete -> float", () => { + let mixture = a => DistributionTypes.DistributionOperation.Mixture(a) + let pointA = mkDelta(3.0) + let pointB = mkDelta(2.0) + let pointC = mkDelta(1.0) + let pointD = mkDelta(0.0) + + test("score: agrees with analytical answer when finite", () => { + let prediction' = [(pointA, 0.25), (pointB, 0.25), (pointC, 0.25), (pointD, 0.25)]->mixture->run + let prediction = switch prediction' { + | Dist(PointSet(a'')) => a'' + | _ => raise(MixtureFailed) + } + + let answer = 2.0 // So this is: assigning 100% probability to 2.0 + let result = PointSetDist_Scoring.WithScalarAnswer.score(~estimate=prediction, ~answer) + switch result { + | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.25 /. 1.0)) + | _ => raise(MixtureFailed) + } + }) + + test("score: agrees with analytical answer when finite", () => { + let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run + let prediction = switch prediction' { + | Dist(PointSet(a'')) => a'' + | _ => raise(MixtureFailed) + } + let answer = 3.0 // So this is: assigning 100% probability to 2.0 + let result = PointSetDist_Scoring.WithScalarAnswer.score(~estimate=prediction, ~answer) + switch result { + | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.75 /. 1.0)) + | _ => raise(MixtureFailed) + } + }) + + test("scoreWithPrior: ", () => { + let prior' = [(pointA, 0.5), (pointB, 0.5)]->mixture->run + let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run + + let prediction = switch prediction' { + | Dist(PointSet(a'')) => a'' + | _ => raise(MixtureFailed) + } + + let prior = switch prior' { + | Dist(PointSet(a'')) => a'' + | _ => raise(MixtureFailed) + } + + let answer = 3.0 // So this is: assigning 100% probability to 2.0 + let result = PointSetDist_Scoring.WithScalarAnswer.scoreWithPrior( + ~estimate=prediction, + ~answer, + ~prior, + ) + switch result { + | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.75 /. 1.0) -. -.Js.Math.log(0.5 /. 1.0)) + | _ => raise(MixtureFailed) + } + }) +}) + +// WithDistAnswer +/* +describe("WithScalarAnswer: discrete -> discrete -> float", () => { +}) + +// TwoScalars +describe("WithScalarAnswer: discrete -> discrete -> float", () => { +}) +*/ diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 1335e990..fc1ad8f3 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -115,11 +115,20 @@ module WithScalarAnswer = { } _score(~estimatePdf, ~answer) } + /* + let score1 = (~estimate: pointSetDist, ~answer: scalar): result => { + let probabilityAssignedToAnswer = Ok(1.0) + } + */ let scoreWithPrior = (~estimate: pointSetDist, ~answer: scalar, ~prior: pointSetDist): result< score, Operation.Error.t, > => { + E.R.merge(score(~estimate, ~answer), score(~estimate=prior, ~answer))->E.R2.fmap(((s1, s2)) => + s1 -. s2 + ) + /* let _scoreWithPrior = ( ~estimatePdf: float => float, ~answer: scalar, @@ -132,7 +141,6 @@ module WithScalarAnswer = { } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { infinity->Ok } else { - minusScaledLogOfQuotient(~esti=numerator, ~answ=priorDensityOfAnswer) } } @@ -149,6 +157,7 @@ module WithScalarAnswer = { | Mixed(prio) => Mixed.T.xToY(x, prio)->sum } _scoreWithPrior(~estimatePdf, ~answer, ~priorPdf) + */ } } From 93f5b4ba2ac13e18cbcae5841a230ebe196ed8fc Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Mon, 20 Jun 2022 16:39:48 -0400 Subject: [PATCH 17/60] feat: Fix remaining scoring errors with Quinn Value::0.3 to 0.9 --- .../Scoring/WithScalarAnswer_test.res | 92 ++++++++++++++++++- .../PointSetDist/PointSetDist_Scoring.res | 25 ++++- 2 files changed, 111 insertions(+), 6 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res index 362aed81..2732d384 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res @@ -14,7 +14,7 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { let pointC = mkDelta(1.0) let pointD = mkDelta(0.0) - test("score: agrees with analytical answer when finite", () => { + test("WithScalarAnswer.score: agrees with analytical answer when finite", () => { let prediction' = [(pointA, 0.25), (pointB, 0.25), (pointC, 0.25), (pointD, 0.25)]->mixture->run let prediction = switch prediction' { | Dist(PointSet(a'')) => a'' @@ -29,7 +29,7 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { } }) - test("score: agrees with analytical answer when finite", () => { + test("WithScalarAnswer.score: agrees with analytical answer when finite", () => { let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run let prediction = switch prediction' { | Dist(PointSet(a'')) => a'' @@ -43,7 +43,7 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { } }) - test("scoreWithPrior: ", () => { + test("WithScalarAnswer.scoreWithPrior: ", () => { let prior' = [(pointA, 0.5), (pointB, 0.5)]->mixture->run let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run @@ -70,7 +70,91 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { }) }) -// WithDistAnswer +describe("TwoScalars: float -> float -> float", () => { + test("TwoScalars.score: ", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 2.0 // 100% of probability mass to 2.0 + let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) + switch score { + | Ok(x) => x->expect->toEqual(infinity) + | _ => raise(MixtureFailed) + } + }) + + test("TwoScalars.score: ", () => { + let scalar1 = 1.5 // 100% of probability mass 1.0 + let scalar2 = 1.5 // 100% of probability mass to 2.0 + let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(MixtureFailed) + } + }) + + test("TwoScalars.scoreWithPrior: ", () => { + let scalar1 = 1.5 // 100% of probability mass 1.0 + let scalar2 = 1.5 // 100% of probability mass to 2.0 + let scalar3 = 1.0 // 100% of probability mass to 2.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(-.infinity) + | _ => raise(MixtureFailed) + } + }) + + test("TwoScalars.scoreWithPrior: ", () => { + let scalar1 = 1.5 // 100% of probability mass 1.0 + let scalar2 = 1.5 // 100% of probability mass to 2.0 + let scalar3 = 1.5 // 100% of probability mass to 2.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(MixtureFailed) + } + }) + + test("TwoScalars.scoreWithPrior: ", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 1.5 // 100% of probability mass to 2.0 + let scalar3 = 1.0 // 100% of probability mass to 2.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual("Error: Really dumb forecasters") // unclear what this case should give; could be smth else, or undefined + | _ => raise(MixtureFailed) + } + }) + + test("TwoScalars.scoreWithPrior: ", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 1.0 // 100% of probability mass to 2.0 + let scalar3 = 1.0 // 100% of probability mass to 2.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(MixtureFailed) + } + }) +}) /* describe("WithScalarAnswer: discrete -> discrete -> float", () => { }) diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index fc1ad8f3..7db90ee0 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -129,7 +129,7 @@ module WithScalarAnswer = { s1 -. s2 ) /* - let _scoreWithPrior = ( + let _scoreWithPrior = ( ~estimatePdf: float => float, ~answer: scalar, ~priorPdf: float => float, @@ -141,6 +141,7 @@ module WithScalarAnswer = { } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { infinity->Ok } else { + // } } @@ -157,11 +158,30 @@ module WithScalarAnswer = { | Mixed(prio) => Mixed.T.xToY(x, prio)->sum } _scoreWithPrior(~estimatePdf, ~answer, ~priorPdf) - */ +*/ } } +// For mixed discrete answer +// (prediction, answer) => sum(answer.map(a => a.probability * WithScalarAnswer.score(prediction, a.value))) + module TwoScalars = { + // You will almost never want to use this. + let score = (~estimate: scalar, ~answer: scalar) => { + if estimate == answer { + 0.0->Ok + } else { + infinity->Ok // - log(0) + } + } + + let scoreWithPrior = (~estimate: scalar, ~answer: scalar, ~prior: scalar) => { + E.R.merge(score(~estimate, ~answer), score(~estimate=prior, ~answer))->E.R2.fmap(((s1, s2)) => + s1 -. s2 + ) + // unclear what this should give if both are wrong: infinity-infinity. Maybe some warning?? + } + /* let score = (~estimate: scalar, ~answer: scalar) => if answer == 0.0 { 0.0->Ok @@ -179,6 +199,7 @@ module TwoScalars = { } else { minusScaledLogOfQuotient(~esti=estimate /. prior, ~answ=answer) } + */ } let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result< From 95adc677010230bae4dc988bde7a3c5bc9484711 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Tue, 21 Jun 2022 11:55:00 -0400 Subject: [PATCH 18/60] some adjustments I guess --- .../rescript/Distributions/GenericDist.res | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 02163092..b8aa680f 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -172,16 +172,20 @@ module Score = { ) | (Score_Dist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => - toPointSetFn(esti')->E.R.bind(esti'' => - {estimate: esti'', answer: answ', prior: None} - ->PointSetDist_Scoring.DistEstimateScalarAnswer - ->Ok + toPointSetFn(esti')->E.R2.fmap(esti'' => + { + estimate: esti'', + answer: answ', + prior: None, + }->PointSetDist_Scoring.DistEstimateScalarAnswer ) | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(PSDist(prior'')))) => - toPointSetFn(esti')->E.R.bind(esti'' => - {estimate: esti'', answer: answ', prior: Some(prior'')} - ->PointSetDist_Scoring.DistEstimateScalarAnswer - ->Ok + toPointSetFn(esti')->E.R2.fmap(esti'' => + { + estimate: esti'', + answer: answ', + prior: Some(prior''), + }->PointSetDist_Scoring.DistEstimateScalarAnswer ) | (Score_Scalar(_), Score_Dist(_), None) => NotYetImplemented->Error | (Score_Scalar(_), Score_Dist(_), Some(Ok(PSScalar(_)))) => NotYetImplemented->Error From d80ea676c5ca745d28362789f05465fbb7611b1c Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Tue, 21 Jun 2022 12:23:58 -0400 Subject: [PATCH 19/60] fixed tests after pair; error'd out mixed case --- .../Distributions/GenericDist_Fixtures.res | 7 +- .../Distributions/Scoring/TwoScalars_test.res | 90 +++++++++++++ .../Scoring/WithScalarAnswer_test.res | 121 ++---------------- .../PointSetDist/PointSetDist_Scoring.res | 87 +++---------- 4 files changed, 121 insertions(+), 184 deletions(-) create mode 100644 packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res diff --git a/packages/squiggle-lang/__tests__/Distributions/GenericDist_Fixtures.res b/packages/squiggle-lang/__tests__/Distributions/GenericDist_Fixtures.res index d184b61b..440d7681 100644 --- a/packages/squiggle-lang/__tests__/Distributions/GenericDist_Fixtures.res +++ b/packages/squiggle-lang/__tests__/Distributions/GenericDist_Fixtures.res @@ -19,7 +19,6 @@ exception MixtureFailed let float1 = 1.0 let float2 = 2.0 let float3 = 3.0 -let {mkDelta} = module(TestHelpers) -let point1 = mkDelta(float1) -let point2 = mkDelta(float2) -let point3 = mkDelta(float3) +let point1 = TestHelpers.mkDelta(float1) +let point2 = TestHelpers.mkDelta(float2) +let point3 = TestHelpers.mkDelta(float3) diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res new file mode 100644 index 00000000..a200212d --- /dev/null +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res @@ -0,0 +1,90 @@ +open Jest +open Expect +open GenericDist_Fixtures +exception ScoreFailed + +describe("TwoScalars: scalar -> scalar -> score", () => { + test("score: infinity", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 2.0 // 100% of probability mass to 2.0 + let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) + switch score { + | Ok(x) => x->expect->toEqual(infinity) + | _ => raise(MixtureFailed) + } + }) + + test("score: 0.0", () => { + let scalar1 = 1.5 // 100% of probability mass 1.5 + let scalar2 = 1.5 // 100% of probability mass to 1.5 + let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(MixtureFailed) + } + }) + + test("scoreWithPrior: minus infinity", () => { + let scalar1 = 1.5 // 100% of probability mass 1.5 + let scalar2 = 1.5 // 100% of probability mass to 1.5 + let scalar3 = 1.0 // 100% of probability mass to 1.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(-.infinity) + | _ => raise(MixtureFailed) + } + }) + + test("scoreWithPrior: 0.0", () => { + let scalar1 = 1.5 // 100% of probability mass 1.5 + let scalar2 = 1.5 // 100% of probability mass to 1.5 + let scalar3 = 1.5 // 100% of probability mass to 1.5 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(ScoreFailed) + } + }) + + test("scoreWithPrior: really dumb forecasters", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 1.5 // 100% of probability mass to 1.5 + let scalar3 = 1.0 // 100% of probability mass to 1.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(infinity -. infinity) // "Error: Really dumb forecasters" + | _ => raise(ScoreFailed) + } + }) + + test("scoreWithPrior: 0.0", () => { + let scalar1 = 1.0 // 100% of probability mass 1.0 + let scalar2 = 1.0 // 100% of probability mass to 1.0 + let scalar3 = 1.0 // 100% of probability mass to 1.0 + + let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( + ~estimate=scalar1, + ~answer=scalar2, + ~prior=scalar3, + ) + switch score { + | Ok(x) => x->expect->toEqual(0.0) + | _ => raise(ScoreFailed) + } + }) +}) diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res index 2732d384..f899f30d 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/WithScalarAnswer_test.res @@ -1,23 +1,20 @@ -// Bring up a discrete distribution open Jest open Expect open TestHelpers open GenericDist_Fixtures +exception ScoreFailed -// WithDistAnswer -> in the KL divergence test file. - -// WithScalarAnswer -describe("WithScalarAnswer: discrete -> discrete -> float", () => { +describe("WithScalarAnswer: discrete -> scalar -> score", () => { let mixture = a => DistributionTypes.DistributionOperation.Mixture(a) let pointA = mkDelta(3.0) let pointB = mkDelta(2.0) let pointC = mkDelta(1.0) let pointD = mkDelta(0.0) - test("WithScalarAnswer.score: agrees with analytical answer when finite", () => { + test("score: agrees with analytical answer when finite", () => { let prediction' = [(pointA, 0.25), (pointB, 0.25), (pointC, 0.25), (pointD, 0.25)]->mixture->run let prediction = switch prediction' { - | Dist(PointSet(a'')) => a'' + | Dist(PointSet(p)) => p | _ => raise(MixtureFailed) } @@ -25,35 +22,35 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { let result = PointSetDist_Scoring.WithScalarAnswer.score(~estimate=prediction, ~answer) switch result { | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.25 /. 1.0)) - | _ => raise(MixtureFailed) + | _ => raise(ScoreFailed) } }) - test("WithScalarAnswer.score: agrees with analytical answer when finite", () => { + test("score: agrees with analytical answer when finite", () => { let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run let prediction = switch prediction' { - | Dist(PointSet(a'')) => a'' + | Dist(PointSet(p)) => p | _ => raise(MixtureFailed) } let answer = 3.0 // So this is: assigning 100% probability to 2.0 let result = PointSetDist_Scoring.WithScalarAnswer.score(~estimate=prediction, ~answer) switch result { | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.75 /. 1.0)) - | _ => raise(MixtureFailed) + | _ => raise(ScoreFailed) } }) - test("WithScalarAnswer.scoreWithPrior: ", () => { + test("scoreWithPrior: agrees with analytical answer when finite", () => { let prior' = [(pointA, 0.5), (pointB, 0.5)]->mixture->run let prediction' = [(pointA, 0.75), (pointB, 0.25)]->mixture->run let prediction = switch prediction' { - | Dist(PointSet(a'')) => a'' + | Dist(PointSet(p)) => p | _ => raise(MixtureFailed) } let prior = switch prior' { - | Dist(PointSet(a'')) => a'' + | Dist(PointSet(p)) => p | _ => raise(MixtureFailed) } @@ -65,101 +62,7 @@ describe("WithScalarAnswer: discrete -> discrete -> float", () => { ) switch result { | Ok(x) => x->expect->toEqual(-.Js.Math.log(0.75 /. 1.0) -. -.Js.Math.log(0.5 /. 1.0)) - | _ => raise(MixtureFailed) + | _ => raise(ScoreFailed) } }) }) - -describe("TwoScalars: float -> float -> float", () => { - test("TwoScalars.score: ", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 2.0 // 100% of probability mass to 2.0 - let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) - switch score { - | Ok(x) => x->expect->toEqual(infinity) - | _ => raise(MixtureFailed) - } - }) - - test("TwoScalars.score: ", () => { - let scalar1 = 1.5 // 100% of probability mass 1.0 - let scalar2 = 1.5 // 100% of probability mass to 2.0 - let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(MixtureFailed) - } - }) - - test("TwoScalars.scoreWithPrior: ", () => { - let scalar1 = 1.5 // 100% of probability mass 1.0 - let scalar2 = 1.5 // 100% of probability mass to 2.0 - let scalar3 = 1.0 // 100% of probability mass to 2.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(-.infinity) - | _ => raise(MixtureFailed) - } - }) - - test("TwoScalars.scoreWithPrior: ", () => { - let scalar1 = 1.5 // 100% of probability mass 1.0 - let scalar2 = 1.5 // 100% of probability mass to 2.0 - let scalar3 = 1.5 // 100% of probability mass to 2.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(MixtureFailed) - } - }) - - test("TwoScalars.scoreWithPrior: ", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 1.5 // 100% of probability mass to 2.0 - let scalar3 = 1.0 // 100% of probability mass to 2.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual("Error: Really dumb forecasters") // unclear what this case should give; could be smth else, or undefined - | _ => raise(MixtureFailed) - } - }) - - test("TwoScalars.scoreWithPrior: ", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 1.0 // 100% of probability mass to 2.0 - let scalar3 = 1.0 // 100% of probability mass to 2.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(MixtureFailed) - } - }) -}) -/* -describe("WithScalarAnswer: discrete -> discrete -> float", () => { -}) - -// TwoScalars -describe("WithScalarAnswer: discrete -> discrete -> float", () => { -}) -*/ diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 7db90ee0..56f67d17 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -93,33 +93,32 @@ module WithDistAnswer = { module WithScalarAnswer = { let sum = (mp: PointSetTypes.MixedPoint.t): float => mp.continuous +. mp.discrete let score = (~estimate: pointSetDist, ~answer: scalar): result => { - let _score = (~estimatePdf: float => float, ~answer: float): result< + let _score = (~estimatePdf: float => option, ~answer: float): result< score, Operation.Error.t, > => { let density = answer->estimatePdf - if density < 0.0 { - Operation.PdfInvalidError->Error - } else if density == 0.0 { - infinity->Ok - } else { - density->logFn->(x => -.x)->Ok + switch density { + | None => Operation.PdfInvalidError->Error + | Some(density') => + if density' < 0.0 { + Operation.PdfInvalidError->Error + } else if density' == 0.0 { + infinity->Ok + } else { + density'->logFn->(x => -.x)->Ok + } } } let estimatePdf = x => switch estimate { - | Continuous(esti) => Continuous.T.xToY(x, esti)->sum - | Discrete(esti) => Discrete.T.xToY(x, esti)->sum - | Mixed(esti) => Mixed.T.xToY(x, esti)->sum + | Continuous(esti) => Continuous.T.xToY(x, esti)->sum->Some + | Discrete(esti) => Discrete.T.xToY(x, esti)->sum->Some + | Mixed(_) => None } _score(~estimatePdf, ~answer) } - /* - let score1 = (~estimate: pointSetDist, ~answer: scalar): result => { - let probabilityAssignedToAnswer = Ok(1.0) - } - */ let scoreWithPrior = (~estimate: pointSetDist, ~answer: scalar, ~prior: pointSetDist): result< score, @@ -128,47 +127,13 @@ module WithScalarAnswer = { E.R.merge(score(~estimate, ~answer), score(~estimate=prior, ~answer))->E.R2.fmap(((s1, s2)) => s1 -. s2 ) - /* - let _scoreWithPrior = ( - ~estimatePdf: float => float, - ~answer: scalar, - ~priorPdf: float => float, - ): result => { - let numerator = answer->estimatePdf - let priorDensityOfAnswer = answer->priorPdf - if numerator < 0.0 || priorDensityOfAnswer < 0.0 { - Operation.PdfInvalidError->Error - } else if numerator == 0.0 || priorDensityOfAnswer == 0.0 { - infinity->Ok - } else { - // - } - } - - let estimatePdf = x => - switch estimate { - | Continuous(esti) => Continuous.T.xToY(x, esti)->sum - | Discrete(esti) => Discrete.T.xToY(x, esti)->sum - | Mixed(esti) => Mixed.T.xToY(x, esti)->sum - } - let priorPdf = x => - switch prior { - | Continuous(prio) => Continuous.T.xToY(x, prio)->sum - | Discrete(prio) => Discrete.T.xToY(x, prio)->sum - | Mixed(prio) => Mixed.T.xToY(x, prio)->sum - } - _scoreWithPrior(~estimatePdf, ~answer, ~priorPdf) -*/ } } -// For mixed discrete answer -// (prediction, answer) => sum(answer.map(a => a.probability * WithScalarAnswer.score(prediction, a.value))) - module TwoScalars = { // You will almost never want to use this. let score = (~estimate: scalar, ~answer: scalar) => { - if estimate == answer { + if Js.Math.abs_float(estimate -. answer) < MagicNumbers.Epsilon.ten { 0.0->Ok } else { infinity->Ok // - log(0) @@ -178,28 +143,8 @@ module TwoScalars = { let scoreWithPrior = (~estimate: scalar, ~answer: scalar, ~prior: scalar) => { E.R.merge(score(~estimate, ~answer), score(~estimate=prior, ~answer))->E.R2.fmap(((s1, s2)) => s1 -. s2 - ) - // unclear what this should give if both are wrong: infinity-infinity. Maybe some warning?? + ) // This will presently NaN if both are wrong: infinity-infinity. } - /* - let score = (~estimate: scalar, ~answer: scalar) => - if answer == 0.0 { - 0.0->Ok - } else if estimate == 0.0 { - infinity->Ok - } else { - minusScaledLogOfQuotient(~esti=estimate, ~answ=answer) - } - - let scoreWithPrior = (~estimate: scalar, ~answer: scalar, ~prior: scalar) => - if answer == 0.0 { - 0.0->Ok - } else if estimate == 0.0 || prior == 0.0 { - infinity->Ok - } else { - minusScaledLogOfQuotient(~esti=estimate /. prior, ~answ=answer) - } - */ } let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result< From 0c66bb057946e0573869159961040b46729c2ad8 Mon Sep 17 00:00:00 2001 From: Sam Nolan Date: Fri, 24 Jun 2022 07:22:31 +0000 Subject: [PATCH 20/60] Add more options for distribution charts Changing title, color, tick format, and domain --- .../src/components/DistributionChart.tsx | 52 ++-- .../src/components/SquiggleChart.tsx | 24 ++ .../src/lib/distributionSpecBuilder.ts | 256 ++++++++++++++++++ 3 files changed, 299 insertions(+), 33 deletions(-) create mode 100644 packages/components/src/lib/distributionSpecBuilder.ts diff --git a/packages/components/src/components/DistributionChart.tsx b/packages/components/src/components/DistributionChart.tsx index 961178ff..af644d29 100644 --- a/packages/components/src/components/DistributionChart.tsx +++ b/packages/components/src/components/DistributionChart.tsx @@ -5,18 +5,15 @@ import { distributionError, distributionErrorToString, } from "@quri/squiggle-lang"; -import { Vega, VisualizationSpec } from "react-vega"; -import * as chartSpecification from "../vega-specs/spec-distributions.json"; +import { Vega } from "react-vega"; import { ErrorAlert } from "./Alert"; import { useSize } from "react-use"; import clsx from "clsx"; import { - linearXScale, - logXScale, - linearYScale, - expYScale, -} from "./DistributionVegaScales"; + buildVegaSpec, + DistributionChartSpecOptions, +} from "../lib/distributionSpecBuilder"; import { NumberShower } from "./NumberShower"; export type DistributionPlottingSettings = { @@ -24,27 +21,26 @@ export type DistributionPlottingSettings = { showSummary: boolean; /** Whether to show the user graph controls (scale etc) */ showControls: boolean; - /** Set the x scale to be logarithmic by deault */ - logX: boolean; - /** Set the y scale to be exponential by deault */ - expY: boolean; -}; +} & DistributionChartSpecOptions; export type DistributionChartProps = { distribution: Distribution; width?: number; height: number; + actions?: boolean; } & DistributionPlottingSettings; -export const DistributionChart: React.FC = ({ - distribution, - height, - showSummary, - width, - showControls, - logX, - expY, -}) => { +export const DistributionChart: React.FC = (props) => { + const { + distribution, + height, + showSummary, + width, + showControls, + logX, + expY, + actions = false, + } = props; const [isLogX, setLogX] = React.useState(logX); const [isExpY, setExpY] = React.useState(expY); @@ -64,7 +60,7 @@ export const DistributionChart: React.FC = ({ const massBelow0 = shape.value.continuous.some((x) => x.x <= 0) || shape.value.discrete.some((x) => x.x <= 0); - const spec = buildVegaSpec(isLogX, isExpY); + const spec = buildVegaSpec(props); let widthProp = width ? width : size.width; if (widthProp < 20) { @@ -82,7 +78,7 @@ export const DistributionChart: React.FC = ({ data={{ con: shape.value.continuous, dis: shape.value.discrete }} width={widthProp - 10} height={height} - actions={false} + actions={actions} /> ) : ( @@ -116,16 +112,6 @@ export const DistributionChart: React.FC = ({ return sized; }; -function buildVegaSpec(isLogX: boolean, isExpY: boolean): VisualizationSpec { - return { - ...chartSpecification, - scales: [ - isLogX ? logXScale : linearXScale, - isExpY ? expYScale : linearYScale, - ], - } as VisualizationSpec; -} - interface CheckBoxProps { label: string; onChange: (x: boolean) => void; diff --git a/packages/components/src/components/SquiggleChart.tsx b/packages/components/src/components/SquiggleChart.tsx index f7bb7ace..e01d6920 100644 --- a/packages/components/src/components/SquiggleChart.tsx +++ b/packages/components/src/components/SquiggleChart.tsx @@ -41,6 +41,18 @@ export interface SquiggleChartProps { logX?: boolean; /** Set the y scale to be exponential by deault */ expY?: boolean; + /** How to format numbers on the x axis */ + tickFormat?: string; + /** Title of the graphed distribution */ + title?: string; + /** Color of the graphed distribution */ + color?: string; + /** Specify the lower bound of the x scale */ + minX?: number; + /** Specify the upper bound of the x scale */ + maxX?: number; + /** Whether to show vega actions to the user, so they can copy the chart spec */ + distributionChartActions?: boolean; } const defaultOnChange = () => {}; @@ -60,6 +72,12 @@ export const SquiggleChart: React.FC = ({ logX = false, expY = false, chartSettings = defaultChartSettings, + tickFormat, + minX, + maxX, + color, + title, + distributionChartActions, }) => { const { result } = useSquiggle({ code: squiggleString, @@ -78,6 +96,12 @@ export const SquiggleChart: React.FC = ({ showSummary, logX, expY, + format: tickFormat, + minX, + maxX, + color, + title, + actions: distributionChartActions, }; return ( diff --git a/packages/components/src/lib/distributionSpecBuilder.ts b/packages/components/src/lib/distributionSpecBuilder.ts new file mode 100644 index 00000000..b40a973d --- /dev/null +++ b/packages/components/src/lib/distributionSpecBuilder.ts @@ -0,0 +1,256 @@ +import { VisualizationSpec } from "react-vega"; +import type { LogScale, LinearScale, PowScale } from "vega"; + +export type DistributionChartSpecOptions = { + /** Set the x scale to be logarithmic by deault */ + logX: boolean; + /** Set the y scale to be exponential by deault */ + expY: boolean; + /** The minimum x coordinate shown on the chart */ + minX?: number; + /** The maximum x coordinate shown on the chart */ + maxX?: number; + /** The color of the chart */ + color?: string; + /** The title of the chart */ + title?: string; + /** The formatting of the ticks */ + format?: string; +}; + +export let linearXScale: LinearScale = { + name: "xscale", + clamp: true, + type: "linear", + range: "width", + zero: false, + nice: false, + domain: { + fields: [ + { + data: "con", + field: "x", + }, + { + data: "dis", + field: "x", + }, + ], + }, +}; +export let linearYScale: LinearScale = { + name: "yscale", + type: "linear", + range: "height", + zero: false, + domain: { + fields: [ + { + data: "con", + field: "y", + }, + { + data: "dis", + field: "y", + }, + ], + }, +}; + +export let logXScale: LogScale = { + name: "xscale", + type: "log", + range: "width", + zero: false, + base: 10, + nice: false, + clamp: true, + domain: { + fields: [ + { + data: "con", + field: "x", + }, + { + data: "dis", + field: "x", + }, + ], + }, +}; + +export let expYScale: PowScale = { + name: "yscale", + type: "pow", + exponent: 0.1, + range: "height", + zero: false, + nice: false, + domain: { + fields: [ + { + data: "con", + field: "y", + }, + { + data: "dis", + field: "y", + }, + ], + }, +}; + +export function buildVegaSpec( + specOptions: DistributionChartSpecOptions +): VisualizationSpec { + let { + format = ".9~s", + color = "#739ECC", + title, + minX, + maxX, + logX, + expY, + } = specOptions; + + let xScale = logX ? logXScale : linearXScale; + if (minX !== undefined) { + xScale = { ...xScale, domainMin: minX }; + } + + if (maxX !== undefined) { + xScale = { ...xScale, domainMax: maxX }; + } + + let spec: VisualizationSpec = { + $schema: "https://vega.github.io/schema/vega/v5.json", + description: "A basic area chart example", + width: 500, + height: 100, + padding: 5, + data: [ + { + name: "con", + }, + { + name: "dis", + }, + ], + signals: [], + scales: [xScale, expY ? expYScale : linearYScale], + axes: [ + { + orient: "bottom", + scale: "xscale", + labelColor: "#727d93", + tickColor: "#fff", + tickOpacity: 0.0, + domainColor: "#fff", + domainOpacity: 0.0, + format: format, + tickCount: 10, + }, + ], + marks: [ + { + type: "area", + from: { + data: "con", + }, + encode: { + update: { + interpolate: { value: "linear" }, + x: { + scale: "xscale", + field: "x", + }, + y: { + scale: "yscale", + field: "y", + }, + y2: { + scale: "yscale", + value: 0, + }, + fill: { + value: color, + }, + fillOpacity: { + value: 1, + }, + }, + }, + }, + { + type: "rect", + from: { + data: "dis", + }, + encode: { + enter: { + width: { + value: 1, + }, + }, + update: { + x: { + scale: "xscale", + field: "x", + }, + y: { + scale: "yscale", + field: "y", + }, + y2: { + scale: "yscale", + value: 0, + }, + fill: { + value: "#2f65a7", + }, + }, + }, + }, + { + type: "symbol", + from: { + data: "dis", + }, + encode: { + enter: { + shape: { + value: "circle", + }, + size: [{ value: 100 }], + tooltip: { + signal: "datum.y", + }, + }, + update: { + x: { + scale: "xscale", + field: "x", + }, + y: { + scale: "yscale", + field: "y", + }, + fill: { + value: "#1e4577", + }, + }, + }, + }, + ], + }; + if (title) { + spec = { + ...spec, + title: { + text: title, + }, + }; + } + + return spec; +} From 9dbd4f076c8356ce6ad3f4731b6b5d03706f43d0 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Fri, 24 Jun 2022 08:56:16 -0400 Subject: [PATCH 21/60] fixed paren balancing and so on --- .../ReducerInterface_GenericDistribution.res | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 69858d71..8b5c0634 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -226,16 +226,22 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio )->Some | ("normalize", [IEvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) | ("klDivergence", [IEvDistribution(prediction), IEvDistribution(answer)]) => - Some(DistributionOperation.run(FromDist(ToScore(LogScore(Score_Dist(answer), None), prediction), ~env)) + Some( + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Dist(answer), None)), prediction), + ~env, + ), + ) | ( "klDivergence", [IEvDistribution(prediction), IEvDistribution(answer), IEvDistribution(prior)], ) => - Some( - DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), estimate), ~env - ) - ) + Some( + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), prediction), + ~env, + ), + ) | ( "logScoreWithPointAnswer", [IEvDistribution(prediction), IEvNumber(answer), IEvDistribution(prior)], @@ -249,7 +255,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ], ) => DistributionOperation.run( - FromDist(ToScore(LogScore(answer, prior->Some)), prediction), + FromDist(ToScore(LogScore(Score_Scalar(answer), Score_Dist(prior)->Some)), prediction), ~env, )->Some | ("logScoreWithPointAnswer", [IEvDistribution(prediction), IEvNumber(answer)]) @@ -257,7 +263,10 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio "logScoreWithPointAnswer", [IEvDistribution(prediction), IEvDistribution(Symbolic(#Float(answer)))], ) => - DistributionOperation.run(FromDist(ToScore(LogScore(answer, None)), prediction), ~env)->Some + DistributionOperation.run( + FromDist(ToScore(LogScore(Score_Scalar(answer), None)), prediction), + ~env, + )->Some | ("isNormalized", [IEvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) | ("toPointSet", [IEvDistribution(dist)]) => Helpers.toDistFn(ToPointSet, dist, ~env) | ("scaleLog", [IEvDistribution(dist)]) => From e0e2f12e27ffef1a50965acd1b387bbd548ddf9d Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Fri, 24 Jun 2022 09:07:15 -0400 Subject: [PATCH 22/60] added path to constructors --- .../ReducerInterface_GenericDistribution.res | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 8b5c0634..22234333 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -228,7 +228,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio | ("klDivergence", [IEvDistribution(prediction), IEvDistribution(answer)]) => Some( DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Dist(answer), None)), prediction), + FromDist(ToScore(LogScore(DistributionTypes.Score_Dist(answer), None)), prediction), ~env, ), ) @@ -238,7 +238,15 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ) => Some( DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Dist(answer), Some(Score_Dist(prior)))), prediction), + FromDist( + ToScore( + LogScore( + DistributionTypes.Score_Dist(answer), + Some(DistributionTypes.Score_Dist(prior)), + ), + ), + prediction, + ), ~env, ), ) @@ -255,7 +263,15 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ], ) => DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Scalar(answer), Score_Dist(prior)->Some)), prediction), + FromDist( + ToScore( + LogScore( + DistributionTypes.Score_Scalar(answer), + DistributionTypes.Score_Dist(prior)->Some, + ), + ), + prediction, + ), ~env, )->Some | ("logScoreWithPointAnswer", [IEvDistribution(prediction), IEvNumber(answer)]) @@ -264,7 +280,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio [IEvDistribution(prediction), IEvDistribution(Symbolic(#Float(answer)))], ) => DistributionOperation.run( - FromDist(ToScore(LogScore(Score_Scalar(answer), None)), prediction), + FromDist(ToScore(LogScore(DistributionTypes.Score_Scalar(answer), None)), prediction), ~env, )->Some | ("isNormalized", [IEvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) From 29cf1cebb23e7a33bf4ddcd447c1ce722a4d9dff Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Fri, 24 Jun 2022 09:19:15 -0400 Subject: [PATCH 23/60] fixed paths to constructors --- .../ReducerInterface_GenericDistribution.res | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index 22234333..fee4df4d 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -228,7 +228,10 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio | ("klDivergence", [IEvDistribution(prediction), IEvDistribution(answer)]) => Some( DistributionOperation.run( - FromDist(ToScore(LogScore(DistributionTypes.Score_Dist(answer), None)), prediction), + FromDist( + ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), None)), + prediction, + ), ~env, ), ) @@ -241,8 +244,8 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio FromDist( ToScore( LogScore( - DistributionTypes.Score_Dist(answer), - Some(DistributionTypes.Score_Dist(prior)), + DistributionTypes.DistributionOperation.Score_Dist(answer), + Some(DistributionTypes.DistributionOperation.Score_Dist(prior)), ), ), prediction, @@ -266,8 +269,8 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio FromDist( ToScore( LogScore( - DistributionTypes.Score_Scalar(answer), - DistributionTypes.Score_Dist(prior)->Some, + DistributionTypes.DistributionOperation.Score_Scalar(answer), + DistributionTypes.DistributionOperation.Score_Dist(prior)->Some, ), ), prediction, @@ -280,7 +283,10 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio [IEvDistribution(prediction), IEvDistribution(Symbolic(#Float(answer)))], ) => DistributionOperation.run( - FromDist(ToScore(LogScore(DistributionTypes.Score_Scalar(answer), None)), prediction), + FromDist( + ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), None)), + prediction, + ), ~env, )->Some | ("isNormalized", [IEvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) From acb0d3b9eeb0f61c1f912f75fdff214ad73be01d Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Sun, 26 Jun 2022 12:28:04 -0400 Subject: [PATCH 24/60] removed \`TwoScalars\` material --- .../Distributions/Scoring/TwoScalars_test.res | 90 ------------------- .../rescript/Distributions/GenericDist.res | 9 +- .../PointSetDist/PointSetDist_Scoring.res | 22 ----- 3 files changed, 1 insertion(+), 120 deletions(-) delete mode 100644 packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res deleted file mode 100644 index a200212d..00000000 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/TwoScalars_test.res +++ /dev/null @@ -1,90 +0,0 @@ -open Jest -open Expect -open GenericDist_Fixtures -exception ScoreFailed - -describe("TwoScalars: scalar -> scalar -> score", () => { - test("score: infinity", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 2.0 // 100% of probability mass to 2.0 - let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) - switch score { - | Ok(x) => x->expect->toEqual(infinity) - | _ => raise(MixtureFailed) - } - }) - - test("score: 0.0", () => { - let scalar1 = 1.5 // 100% of probability mass 1.5 - let scalar2 = 1.5 // 100% of probability mass to 1.5 - let score = PointSetDist_Scoring.TwoScalars.score(~estimate=scalar1, ~answer=scalar2) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(MixtureFailed) - } - }) - - test("scoreWithPrior: minus infinity", () => { - let scalar1 = 1.5 // 100% of probability mass 1.5 - let scalar2 = 1.5 // 100% of probability mass to 1.5 - let scalar3 = 1.0 // 100% of probability mass to 1.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(-.infinity) - | _ => raise(MixtureFailed) - } - }) - - test("scoreWithPrior: 0.0", () => { - let scalar1 = 1.5 // 100% of probability mass 1.5 - let scalar2 = 1.5 // 100% of probability mass to 1.5 - let scalar3 = 1.5 // 100% of probability mass to 1.5 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(ScoreFailed) - } - }) - - test("scoreWithPrior: really dumb forecasters", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 1.5 // 100% of probability mass to 1.5 - let scalar3 = 1.0 // 100% of probability mass to 1.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(infinity -. infinity) // "Error: Really dumb forecasters" - | _ => raise(ScoreFailed) - } - }) - - test("scoreWithPrior: 0.0", () => { - let scalar1 = 1.0 // 100% of probability mass 1.0 - let scalar2 = 1.0 // 100% of probability mass to 1.0 - let scalar3 = 1.0 // 100% of probability mass to 1.0 - - let score = PointSetDist_Scoring.TwoScalars.scoreWithPrior( - ~estimate=scalar1, - ~answer=scalar2, - ~prior=scalar3, - ) - switch score { - | Ok(x) => x->expect->toEqual(0.0) - | _ => raise(ScoreFailed) - } - }) -}) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index b8aa680f..2c2108dd 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -190,14 +190,7 @@ module Score = { | (Score_Scalar(_), Score_Dist(_), None) => NotYetImplemented->Error | (Score_Scalar(_), Score_Dist(_), Some(Ok(PSScalar(_)))) => NotYetImplemented->Error | (Score_Scalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error - | (Score_Scalar(esti'), Score_Scalar(answ'), None) => - {estimate: esti', answer: answ', prior: None} - ->PointSetDist_Scoring.ScalarEstimateScalarAnswer - ->Ok - | (Score_Scalar(esti'), Score_Scalar(answ'), Some(Ok(PSScalar(prior'')))) => - {estimate: esti', answer: answ', prior: prior''->Some} - ->PointSetDist_Scoring.ScalarEstimateScalarAnswer - ->Ok + | (Score_Scalar(_), Score_Scalar(_), _) => NotYetImplemented->Error | (_, _, Some(Error(err))) => err->Error } } diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 56f67d17..b7806bfa 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -6,7 +6,6 @@ type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} type scoreArgs = | DistEstimateDistAnswer(abstractScoreArgs) | DistEstimateScalarAnswer(abstractScoreArgs) - | ScalarEstimateScalarAnswer(abstractScoreArgs) let logFn = Js.Math.log // base e let minusScaledLogOfQuotient = (~esti, ~answ): result => { @@ -130,23 +129,6 @@ module WithScalarAnswer = { } } -module TwoScalars = { - // You will almost never want to use this. - let score = (~estimate: scalar, ~answer: scalar) => { - if Js.Math.abs_float(estimate -. answer) < MagicNumbers.Epsilon.ten { - 0.0->Ok - } else { - infinity->Ok // - log(0) - } - } - - let scoreWithPrior = (~estimate: scalar, ~answer: scalar, ~prior: scalar) => { - E.R.merge(score(~estimate, ~answer), score(~estimate=prior, ~answer))->E.R2.fmap(((s1, s2)) => - s1 -. s2 - ) // This will presently NaN if both are wrong: infinity-infinity. - } -} - let twoGenericDistsToTwoPointSetDists = (~toPointSetFn, estimate, answer): result< (pointSetDist, pointSetDist), 'e, @@ -165,8 +147,4 @@ let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< WithScalarAnswer.score(~estimate, ~answer) | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => WithScalarAnswer.scoreWithPrior(~estimate, ~answer, ~prior) - | ScalarEstimateScalarAnswer({estimate, answer, prior: None}) => - TwoScalars.score(~estimate, ~answer) - | ScalarEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => - TwoScalars.scoreWithPrior(~estimate, ~answer, ~prior) } From 4858aa9fe535394a3abe4affb69b1fc6520f809d Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 4 Jul 2022 10:22:06 -0400 Subject: [PATCH 25/60] **most** comments, might do something with polymorphic variants so that types are more truthful next, but might not --- .../Distributions/DistributionOperation.res | 8 -------- .../Distributions/DistributionOperation.resi | 18 ------------------ .../Distributions/DistributionTypes.res | 16 ---------------- .../src/rescript/Distributions/GenericDist.res | 8 ++++---- .../PointSetDist/PointSetDist_Scoring.res | 13 ++++++------- 5 files changed, 10 insertions(+), 53 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index c4606c05..3cb16af2 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -278,14 +278,6 @@ module Constructors = { C.LogScore.distEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR let distEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => C.LogScore.distEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR - let scalarEstimateDistAnswer = (~env, estimate, answer) => - C.LogScore.scalarEstimateDistAnswer(estimate, answer)->run(~env)->toFloatR - let scalarEstimateDistAnswerWithPrior = (~env, estimate, answer, prior) => - C.LogScore.scalarEstimateDistAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR - let scalarEstimateScalarAnswer = (~env, estimate, answer) => - C.LogScore.scalarEstimateScalarAnswer(estimate, answer)->run(~env)->toFloatR - let scalarEstimateScalarAnswerWithPrior = (~env, estimate, answer, prior) => - C.LogScore.scalarEstimateScalarAnswerWithPrior(estimate, answer, prior)->run(~env)->toFloatR } let toPointSet = (~env, dist) => C.toPointSet(dist)->run(~env)->toDistR let toSampleSet = (~env, dist, n) => C.toSampleSet(dist, n)->run(~env)->toDistR diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index 7254f67a..509b34ca 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -83,24 +83,6 @@ module Constructors: { float, DistributionTypes.DistributionOperation.genericDistOrScalar, ) => result - @genType - let scalarEstimateDistAnswer: (~env: env, float, genericDist) => result - @genType - let scalarEstimateDistAnswerWithPrior: ( - ~env: env, - float, - genericDist, - DistributionTypes.DistributionOperation.genericDistOrScalar, - ) => result - @genType - let scalarEstimateScalarAnswer: (~env: env, float, float) => result - @genType - let scalarEstimateScalarAnswerWithPrior: ( - ~env: env, - float, - float, - DistributionTypes.DistributionOperation.genericDistOrScalar, - ) => result } @genType let toPointSet: (~env: env, genericDist) => result diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index f6b7fe90..ffe31b6d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -194,22 +194,6 @@ module Constructors = { ToScore(LogScore(Score_Scalar(answer), Some(prior))), estimate, ) - let scalarEstimateDistAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), None)), - estimate, - ) - let scalarEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Dist(answer), Some(prior))), - estimate, - ) - let scalarEstimateScalarAnswer = (estimate, answer): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), None)), - estimate, - ) - let scalarEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromFloat( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), - estimate, - ) } let scaleMultiply = (dist, n): t => FromDist(ToDist(Scale(#Multiply, n)), dist) let scalePower = (dist, n): t => FromDist(ToDist(Scale(#Power, n)), dist) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 2c2108dd..17adf244 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -160,7 +160,7 @@ module Score = { switch (esti, answ, prior') { | (Score_Dist(esti'), Score_Dist(answ'), None) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => - {estimate: esti'', answer: answ'', prior: None}->PointSetDist_Scoring.DistEstimateDistAnswer + {estimate: esti'', answer: answ'', prior: None}->PointSetDist_Scoring.DistAnswer ) | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(PSDist(prior'')))) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => @@ -168,7 +168,7 @@ module Score = { estimate: esti'', answer: answ'', prior: Some(prior''), - }->PointSetDist_Scoring.DistEstimateDistAnswer + }->PointSetDist_Scoring.DistAnswer ) | (Score_Dist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error | (Score_Dist(esti'), Score_Scalar(answ'), None) => @@ -177,7 +177,7 @@ module Score = { estimate: esti'', answer: answ', prior: None, - }->PointSetDist_Scoring.DistEstimateScalarAnswer + }->PointSetDist_Scoring.ScalarAnswer ) | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(PSDist(prior'')))) => toPointSetFn(esti')->E.R2.fmap(esti'' => @@ -185,7 +185,7 @@ module Score = { estimate: esti'', answer: answ', prior: Some(prior''), - }->PointSetDist_Scoring.DistEstimateScalarAnswer + }->PointSetDist_Scoring.ScalarAnswer ) | (Score_Scalar(_), Score_Dist(_), None) => NotYetImplemented->Error | (Score_Scalar(_), Score_Dist(_), Some(Ok(PSScalar(_)))) => NotYetImplemented->Error diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index b7806bfa..5e8eb489 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -4,8 +4,8 @@ type scalar = float type score = float type abstractScoreArgs<'a, 'b> = {estimate: 'a, answer: 'b, prior: option<'a>} type scoreArgs = - | DistEstimateDistAnswer(abstractScoreArgs) - | DistEstimateScalarAnswer(abstractScoreArgs) + | DistAnswer(abstractScoreArgs) + | ScalarAnswer(abstractScoreArgs) let logFn = Js.Math.log // base e let minusScaledLogOfQuotient = (~esti, ~answ): result => { @@ -139,12 +139,11 @@ let logScore = (args: scoreArgs, ~combineFn, ~integrateFn, ~toMixedFn): result< Operation.Error.t, > => switch args { - | DistEstimateDistAnswer({estimate, answer, prior: None}) => + | DistAnswer({estimate, answer, prior: None}) => WithDistAnswer.sum(~estimate, ~answer, ~integrateFn, ~combineFn, ~toMixedFn) - | DistEstimateDistAnswer({estimate, answer, prior: Some(prior)}) => + | DistAnswer({estimate, answer, prior: Some(prior)}) => WithDistAnswer.sumWithPrior(~estimate, ~answer, ~prior, ~integrateFn, ~combineFn, ~toMixedFn) - | DistEstimateScalarAnswer({estimate, answer, prior: None}) => - WithScalarAnswer.score(~estimate, ~answer) - | DistEstimateScalarAnswer({estimate, answer, prior: Some(prior)}) => + | ScalarAnswer({estimate, answer, prior: None}) => WithScalarAnswer.score(~estimate, ~answer) + | ScalarAnswer({estimate, answer, prior: Some(prior)}) => WithScalarAnswer.scoreWithPrior(~estimate, ~answer, ~prior) } From 78893320527eac715286a5a209352490d0c1397f Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 4 Jul 2022 11:24:30 -0400 Subject: [PATCH 26/60] polymorphic variants to neatly constrain types --- .../DistributionOperation_test.res | 14 +- .../__tests__/Distributions/Mixture_test.res | 6 +- .../Scoring/KlDivergence_test.res | 4 +- .../__tests__/Distributions/Symbolic_test.res | 24 +-- .../Distributions/DistributionOperation.res | 47 +++-- .../Distributions/DistributionOperation.resi | 2 +- .../Distributions/DistributionTypes.res | 170 ++++++++++-------- .../ReducerInterface_GenericDistribution.res | 30 +--- 8 files changed, 154 insertions(+), 143 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res b/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res index 60e74d74..54ce40a8 100644 --- a/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res @@ -34,7 +34,7 @@ describe("sparkline", () => { expected: DistributionOperation.outputType, ) => { test(name, () => { - let result = DistributionOperation.run(~env, FromDist(ToString(ToSparkline(20)), dist)) + let result = DistributionOperation.run(~env, FromDist(#ToString(ToSparkline(20)), dist)) expect(result)->toEqual(expected) }) } @@ -81,8 +81,8 @@ describe("sparkline", () => { describe("toPointSet", () => { test("on symbolic normal distribution", () => { let result = - run(FromDist(ToDist(ToPointSet), normalDist5)) - ->outputMap(FromDist(ToFloat(#Mean))) + run(FromDist(#ToDist(ToPointSet), normalDist5)) + ->outputMap(FromDist(#ToFloat(#Mean))) ->toFloat ->toExt expect(result)->toBeSoCloseTo(5.0, ~digits=0) @@ -90,10 +90,10 @@ describe("toPointSet", () => { test("on sample set", () => { let result = - run(FromDist(ToDist(ToPointSet), normalDist5)) - ->outputMap(FromDist(ToDist(ToSampleSet(1000)))) - ->outputMap(FromDist(ToDist(ToPointSet))) - ->outputMap(FromDist(ToFloat(#Mean))) + run(FromDist(#ToDist(ToPointSet), normalDist5)) + ->outputMap(FromDist(#ToDist(ToSampleSet(1000)))) + ->outputMap(FromDist(#ToDist(ToPointSet))) + ->outputMap(FromDist(#ToFloat(#Mean))) ->toFloat ->toExt expect(result)->toBeSoCloseTo(5.0, ~digits=-1) diff --git a/packages/squiggle-lang/__tests__/Distributions/Mixture_test.res b/packages/squiggle-lang/__tests__/Distributions/Mixture_test.res index ee048853..7dc1f5df 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Mixture_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Mixture_test.res @@ -11,7 +11,7 @@ describe("mixture", () => { let (mean1, mean2) = tup let meanValue = { run(Mixture([(mkNormal(mean1, 9e-1), 0.5), (mkNormal(mean2, 9e-1), 0.5)]))->outputMap( - FromDist(ToFloat(#Mean)), + FromDist(#ToFloat(#Mean)), ) } meanValue->unpackFloat->expect->toBeSoCloseTo((mean1 +. mean2) /. 2.0, ~digits=-1) @@ -28,7 +28,7 @@ describe("mixture", () => { let meanValue = { run( Mixture([(mkBeta(alpha, beta), betaWeight), (mkExponential(rate), exponentialWeight)]), - )->outputMap(FromDist(ToFloat(#Mean))) + )->outputMap(FromDist(#ToFloat(#Mean))) } let betaMean = 1.0 /. (1.0 +. beta /. alpha) let exponentialMean = 1.0 /. rate @@ -52,7 +52,7 @@ describe("mixture", () => { (mkUniform(low, high), uniformWeight), (mkLognormal(mu, sigma), lognormalWeight), ]), - )->outputMap(FromDist(ToFloat(#Mean))) + )->outputMap(FromDist(#ToFloat(#Mean))) } let uniformMean = (low +. high) /. 2.0 let lognormalMean = mu +. sigma ** 2.0 /. 2.0 diff --git a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res index 089d247f..f8793dc9 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Scoring/KlDivergence_test.res @@ -186,8 +186,8 @@ describe("combineAlongSupportOfSecondArgument0", () => { uniformMakeR(lowPrediction, highPrediction)->E.R2.errMap(s => DistributionTypes.ArgumentError( s, )) - let answerWrapped = E.R.fmap(a => run(FromDist(ToDist(ToPointSet), a)), answer) - let predictionWrapped = E.R.fmap(a => run(FromDist(ToDist(ToPointSet), a)), prediction) + let answerWrapped = E.R.fmap(a => run(FromDist(#ToDist(ToPointSet), a)), answer) + let predictionWrapped = E.R.fmap(a => run(FromDist(#ToDist(ToPointSet), a)), prediction) let interpolator = XYShape.XtoY.continuousInterpolator(#Stepwise, #UseZero) let integrand = PointSetDist_Scoring.WithDistAnswer.integrand diff --git a/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res b/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res index 6ee9ffc8..4e5cd216 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res @@ -8,34 +8,34 @@ let mkNormal = (mean, stdev) => DistributionTypes.Symbolic(#Normal({mean: mean, describe("(Symbolic) normalize", () => { testAll("has no impact on normal distributions", list{-1e8, -1e-2, 0.0, 1e-4, 1e16}, mean => { let normalValue = mkNormal(mean, 2.0) - let normalizedValue = run(FromDist(ToDist(Normalize), normalValue)) + let normalizedValue = run(FromDist(#ToDist(Normalize), normalValue)) normalizedValue->unpackDist->expect->toEqual(normalValue) }) }) describe("(Symbolic) mean", () => { testAll("of normal distributions", list{-1e8, -16.0, -1e-2, 0.0, 1e-4, 32.0, 1e16}, mean => { - run(FromDist(ToFloat(#Mean), mkNormal(mean, 4.0)))->unpackFloat->expect->toBeCloseTo(mean) + run(FromDist(#ToFloat(#Mean), mkNormal(mean, 4.0)))->unpackFloat->expect->toBeCloseTo(mean) }) Skip.test("of normal(0, -1) (it NaNs out)", () => { - run(FromDist(ToFloat(#Mean), mkNormal(1e1, -1e0)))->unpackFloat->expect->ExpectJs.toBeFalsy + run(FromDist(#ToFloat(#Mean), mkNormal(1e1, -1e0)))->unpackFloat->expect->ExpectJs.toBeFalsy }) test("of normal(0, 1e-8) (it doesn't freak out at tiny stdev)", () => { - run(FromDist(ToFloat(#Mean), mkNormal(0.0, 1e-8)))->unpackFloat->expect->toBeCloseTo(0.0) + run(FromDist(#ToFloat(#Mean), mkNormal(0.0, 1e-8)))->unpackFloat->expect->toBeCloseTo(0.0) }) testAll("of exponential distributions", list{1e-7, 2.0, 10.0, 100.0}, rate => { let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Exponential({rate: rate}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Exponential({rate: rate}))), ) meanValue->unpackFloat->expect->toBeCloseTo(1.0 /. rate) // https://en.wikipedia.org/wiki/Exponential_distribution#Mean,_variance,_moments,_and_median }) test("of a cauchy distribution", () => { let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Cauchy({local: 1.0, scale: 1.0}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Cauchy({local: 1.0, scale: 1.0}))), ) meanValue->unpackFloat->expect->toBeSoCloseTo(1.0098094001641797, ~digits=5) //-> toBe(GenDistError(Other("Cauchy distributions may have no mean value."))) @@ -48,7 +48,7 @@ describe("(Symbolic) mean", () => { let (low, medium, high) = tup let meanValue = run( FromDist( - ToFloat(#Mean), + #ToFloat(#Mean), DistributionTypes.Symbolic(#Triangular({low: low, medium: medium, high: high})), ), ) @@ -63,7 +63,7 @@ describe("(Symbolic) mean", () => { tup => { let (alpha, beta) = tup let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Beta({alpha: alpha, beta: beta}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Beta({alpha: alpha, beta: beta}))), ) meanValue->unpackFloat->expect->toBeCloseTo(1.0 /. (1.0 +. beta /. alpha)) // https://en.wikipedia.org/wiki/Beta_distribution#Mean }, @@ -72,7 +72,7 @@ describe("(Symbolic) mean", () => { // TODO: When we have our theory of validators we won't want this to be NaN but to be an error. test("of beta(0, 0)", () => { let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Beta({alpha: 0.0, beta: 0.0}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Beta({alpha: 0.0, beta: 0.0}))), ) meanValue->unpackFloat->expect->ExpectJs.toBeFalsy }) @@ -83,7 +83,7 @@ describe("(Symbolic) mean", () => { tup => { let (mu, sigma) = tup let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Lognormal({mu: mu, sigma: sigma}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Lognormal({mu: mu, sigma: sigma}))), ) meanValue->unpackFloat->expect->toBeCloseTo(Js.Math.exp(mu +. sigma ** 2.0 /. 2.0)) // https://brilliant.org/wiki/log-normal-distribution/ }, @@ -95,14 +95,14 @@ describe("(Symbolic) mean", () => { tup => { let (low, high) = tup let meanValue = run( - FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Uniform({low: low, high: high}))), + FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Uniform({low: low, high: high}))), ) meanValue->unpackFloat->expect->toBeCloseTo((low +. high) /. 2.0) // https://en.wikipedia.org/wiki/Continuous_uniform_distribution#Moments }, ) test("of a float", () => { - let meanValue = run(FromDist(ToFloat(#Mean), DistributionTypes.Symbolic(#Float(7.7)))) + let meanValue = run(FromDist(#ToFloat(#Mean), DistributionTypes.Symbolic(#Float(7.7)))) meanValue->unpackFloat->expect->toBeCloseTo(7.7) }) }) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 3cb16af2..1b2fb0e9 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -101,14 +101,14 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { } let toPointSetFn = r => { - switch reCall(~functionCallInfo=FromDist(ToDist(ToPointSet), r), ()) { + switch reCall(~functionCallInfo=FromDist(#ToDist(ToPointSet), r), ()) { | Dist(PointSet(p)) => Ok(p) | e => Error(OutputLocal.toErrorOrUnreachable(e)) } } let toSampleSetFn = r => { - switch reCall(~functionCallInfo=FromDist(ToDist(ToSampleSet(sampleCount)), r), ()) { + switch reCall(~functionCallInfo=FromDist(#ToDist(ToSampleSet(sampleCount)), r), ()) { | Dist(SampleSet(p)) => Ok(p) | e => Error(OutputLocal.toErrorOrUnreachable(e)) } @@ -116,13 +116,13 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { let scaleMultiply = (r, weight) => reCall( - ~functionCallInfo=FromDist(ToDistCombination(Pointwise, #Multiply, #Float(weight)), r), + ~functionCallInfo=FromDist(#ToDistCombination(Pointwise, #Multiply, #Float(weight)), r), (), )->OutputLocal.toDistR let pointwiseAdd = (r1, r2) => reCall( - ~functionCallInfo=FromDist(ToDistCombination(Pointwise, #Add, #Dist(r2)), r1), + ~functionCallInfo=FromDist(#ToDistCombination(Pointwise, #Add, #Dist(r2)), r1), (), )->OutputLocal.toDistR @@ -131,40 +131,40 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { dist: genericDist, ): outputType => { let response = switch subFnName { - | ToFloat(distToFloatOperation) => + | #ToFloat(distToFloatOperation) => GenericDist.toFloatOperation(dist, ~toPointSetFn, ~distToFloatOperation) ->E.R2.fmap(r => Float(r)) ->OutputLocal.fromResult - | ToString(ToString) => dist->GenericDist.toString->String - | ToString(ToSparkline(bucketCount)) => + | #ToString(ToString) => dist->GenericDist.toString->String + | #ToString(ToSparkline(bucketCount)) => GenericDist.toSparkline(dist, ~sampleCount, ~bucketCount, ()) ->E.R2.fmap(r => String(r)) ->OutputLocal.fromResult - | ToDist(Inspect) => { + | #ToDist(Inspect) => { Js.log2("Console log requested: ", dist) Dist(dist) } - | ToDist(Normalize) => dist->GenericDist.normalize->Dist - | ToScore(LogScore(answer, prior)) => + | #ToDist(Normalize) => dist->GenericDist.normalize->Dist + | #ToScore(LogScore(answer, prior)) => GenericDist.Score.logScore(~estimate=Score_Dist(dist), ~answer, ~prior) ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult - | ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool - | ToDist(Truncate(leftCutoff, rightCutoff)) => + | #ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool + | #ToDist(Truncate(leftCutoff, rightCutoff)) => GenericDist.truncate(~toPointSetFn, ~leftCutoff, ~rightCutoff, dist, ()) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDist(ToSampleSet(n)) => + | #ToDist(ToSampleSet(n)) => dist ->GenericDist.toSampleSetDist(n) ->E.R2.fmap(r => Dist(SampleSet(r))) ->OutputLocal.fromResult - | ToDist(ToPointSet) => + | #ToDist(ToPointSet) => dist ->GenericDist.toPointSet(~xyPointLength, ~sampleCount, ()) ->E.R2.fmap(r => Dist(PointSet(r))) ->OutputLocal.fromResult - | ToDist(Scale(#LogarithmWithThreshold(eps), f)) => + | #ToDist(Scale(#LogarithmWithThreshold(eps), f)) => dist ->GenericDist.pointwiseCombinationFloat( ~toPointSetFn, @@ -173,23 +173,23 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { ) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDist(Scale(#Multiply, f)) => + | #ToDist(Scale(#Multiply, f)) => dist ->GenericDist.pointwiseCombinationFloat(~toPointSetFn, ~algebraicCombination=#Multiply, ~f) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDist(Scale(#Logarithm, f)) => + | #ToDist(Scale(#Logarithm, f)) => dist ->GenericDist.pointwiseCombinationFloat(~toPointSetFn, ~algebraicCombination=#Logarithm, ~f) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDist(Scale(#Power, f)) => + | #ToDist(Scale(#Power, f)) => dist ->GenericDist.pointwiseCombinationFloat(~toPointSetFn, ~algebraicCombination=#Power, ~f) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDistCombination(Algebraic(_), _, #Float(_)) => GenDistError(NotYetImplemented) - | ToDistCombination(Algebraic(strategy), arithmeticOperation, #Dist(t2)) => + | #ToDistCombination(Algebraic(_), _, #Float(_)) => GenDistError(NotYetImplemented) + | #ToDistCombination(Algebraic(strategy), arithmeticOperation, #Dist(t2)) => dist ->GenericDist.algebraicCombination( ~strategy, @@ -200,12 +200,12 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { ) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDistCombination(Pointwise, algebraicCombination, #Dist(t2)) => + | #ToDistCombination(Pointwise, algebraicCombination, #Dist(t2)) => dist ->GenericDist.pointwiseCombination(~toPointSetFn, ~algebraicCombination, ~t2) ->E.R2.fmap(r => Dist(r)) ->OutputLocal.fromResult - | ToDistCombination(Pointwise, algebraicCombination, #Float(f)) => + | #ToDistCombination(Pointwise, algebraicCombination, #Float(f)) => dist ->GenericDist.pointwiseCombinationFloat(~toPointSetFn, ~algebraicCombination, ~f) ->E.R2.fmap(r => Dist(r)) @@ -216,8 +216,7 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { switch functionCallInfo { | FromDist(subFnName, dist) => fromDistFn(subFnName, dist) - | FromFloat(subFnName, float) => - reCall(~functionCallInfo=FromDist(subFnName, GenericDist.fromFloat(float)), ()) + | FromFloat(subFnName, x) => reCall(~functionCallInfo=FromFloat(subFnName, x), ()) | Mixture(dists) => dists ->GenericDist.mixture(~scaleMultiplyFn=scaleMultiply, ~pointwiseAddFn=pointwiseAdd) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index 509b34ca..c39dab7f 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -27,7 +27,7 @@ let runFromDist: ( ) => outputType let runFromFloat: ( ~env: env, - ~functionCallInfo: DistributionTypes.DistributionOperation.fromDist, + ~functionCallInfo: DistributionTypes.DistributionOperation.fromFloat, float, ) => outputType diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index ffe31b6d..b607b8e4 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -102,58 +102,82 @@ module DistributionOperation = { type toScore = LogScore(genericDistOrScalar, option) - type fromDist = - | ToFloat(toFloat) - | ToDist(toDist) - | ToScore(toScore) - | ToDistCombination(direction, Operation.Algebraic.t, [#Dist(genericDist) | #Float(float)]) - | ToString(toString) - | ToBool(toBool) + type fromFloat = [ + | #ToFloat(toFloat) + | #ToDist(toDist) + | #ToDistCombination(direction, Operation.Algebraic.t, [#Dist(genericDist) | #Float(float)]) + | #ToString(toString) + | #ToBool(toBool) + ] + + type fromDist = [ + | fromFloat + | #ToScore(toScore) + ] type singleParamaterFunction = | FromDist(fromDist) - | FromFloat(fromDist) + | FromFloat(fromFloat) type genericFunctionCallInfo = | FromDist(fromDist, genericDist) - | FromFloat(fromDist, float) + | FromFloat(fromFloat, float) | FromSamples(array) | Mixture(array<(genericDist, float)>) - let distCallToString = (distFunction: fromDist): string => - switch distFunction { - | ToFloat(#Cdf(r)) => `cdf(${E.Float.toFixed(r)})` - | ToFloat(#Inv(r)) => `inv(${E.Float.toFixed(r)})` - | ToFloat(#Mean) => `mean` - | ToFloat(#Min) => `min` - | ToFloat(#Max) => `max` - | ToFloat(#Stdev) => `stdev` - | ToFloat(#Variance) => `variance` - | ToFloat(#Mode) => `mode` - | ToFloat(#Pdf(r)) => `pdf(${E.Float.toFixed(r)})` - | ToFloat(#Sample) => `sample` - | ToFloat(#IntegralSum) => `integralSum` - | ToScore(_) => `logScore` - | ToDist(Normalize) => `normalize` - | ToDist(ToPointSet) => `toPointSet` - | ToDist(ToSampleSet(r)) => `toSampleSet(${E.I.toString(r)})` - | ToDist(Truncate(_, _)) => `truncate` - | ToDist(Inspect) => `inspect` - | ToDist(Scale(#Power, r)) => `scalePower(${E.Float.toFixed(r)})` - | ToDist(Scale(#Multiply, r)) => `scaleMultiply(${E.Float.toFixed(r)})` - | ToDist(Scale(#Logarithm, r)) => `scaleLog(${E.Float.toFixed(r)})` - | ToDist(Scale(#LogarithmWithThreshold(eps), r)) => + let floatCallToString = (floatFunction: fromFloat): string => + switch floatFunction { + | #ToFloat(#Cdf(r)) => `cdf(${E.Float.toFixed(r)})` + | #ToFloat(#Inv(r)) => `inv(${E.Float.toFixed(r)})` + | #ToFloat(#Mean) => `mean` + | #ToFloat(#Min) => `min` + | #ToFloat(#Max) => `max` + | #ToFloat(#Stdev) => `stdev` + | #ToFloat(#Variance) => `variance` + | #ToFloat(#Mode) => `mode` + | #ToFloat(#Pdf(r)) => `pdf(${E.Float.toFixed(r)})` + | #ToFloat(#Sample) => `sample` + | #ToFloat(#IntegralSum) => `integralSum` + | #ToDist(Normalize) => `normalize` + | #ToDist(ToPointSet) => `toPointSet` + | #ToDist(ToSampleSet(r)) => `toSampleSet(${E.I.toString(r)})` + | #ToDist(Truncate(_, _)) => `truncate` + | #ToDist(Inspect) => `inspect` + | #ToDist(Scale(#Power, r)) => `scalePower(${E.Float.toFixed(r)})` + | #ToDist(Scale(#Multiply, r)) => `scaleMultiply(${E.Float.toFixed(r)})` + | #ToDist(Scale(#Logarithm, r)) => `scaleLog(${E.Float.toFixed(r)})` + | #ToDist(Scale(#LogarithmWithThreshold(eps), r)) => `scaleLogWithThreshold(${E.Float.toFixed(r)}, epsilon=${E.Float.toFixed(eps)})` - | ToString(ToString) => `toString` - | ToString(ToSparkline(n)) => `sparkline(${E.I.toString(n)})` - | ToBool(IsNormalized) => `isNormalized` - | ToDistCombination(Algebraic(_), _, _) => `algebraic` - | ToDistCombination(Pointwise, _, _) => `pointwise` + | #ToString(ToString) => `toString` + | #ToString(ToSparkline(n)) => `sparkline(${E.I.toString(n)})` + | #ToBool(IsNormalized) => `isNormalized` + | #ToDistCombination(Algebraic(_), _, _) => `algebraic` + | #ToDistCombination(Pointwise, _, _) => `pointwise` + } + + let distCallToString = ( + distFunction: [ + | #ToFloat(toFloat) + | #ToDist(toDist) + | #ToDistCombination(direction, Operation.Algebraic.t, [#Dist(genericDist) | #Float(float)]) + | #ToString(toString) + | #ToBool(toBool) + | #ToScore(toScore) + ], + ): string => + switch distFunction { + | #ToScore(_) => `logScore` + | #ToFloat(x) => floatCallToString(#ToFloat(x)) + | #ToDist(x) => floatCallToString(#ToDist(x)) + | #ToString(x) => floatCallToString(#ToString(x)) + | #ToBool(x) => floatCallToString(#ToBool(x)) + | #ToDistCombination(x, y, z) => floatCallToString(#ToDistCombination(x, y, z)) } let toString = (d: genericFunctionCallInfo): string => switch d { - | FromDist(f, _) | FromFloat(f, _) => distCallToString(f) + | FromDist(f, _) => distCallToString(f) + | FromFloat(f, _) => floatCallToString(f) | Mixture(_) => `mixture` | FromSamples(_) => `fromSamples` } @@ -163,93 +187,93 @@ module Constructors = { module UsingDists = { @genType - let mean = (dist): t => FromDist(ToFloat(#Mean), dist) - let stdev = (dist): t => FromDist(ToFloat(#Stdev), dist) - let variance = (dist): t => FromDist(ToFloat(#Variance), dist) - let sample = (dist): t => FromDist(ToFloat(#Sample), dist) - let cdf = (dist, x): t => FromDist(ToFloat(#Cdf(x)), dist) - let inv = (dist, x): t => FromDist(ToFloat(#Inv(x)), dist) - let pdf = (dist, x): t => FromDist(ToFloat(#Pdf(x)), dist) - let normalize = (dist): t => FromDist(ToDist(Normalize), dist) - let isNormalized = (dist): t => FromDist(ToBool(IsNormalized), dist) - let toPointSet = (dist): t => FromDist(ToDist(ToPointSet), dist) - let toSampleSet = (dist, r): t => FromDist(ToDist(ToSampleSet(r)), dist) + let mean = (dist): t => FromDist(#ToFloat(#Mean), dist) + let stdev = (dist): t => FromDist(#ToFloat(#Stdev), dist) + let variance = (dist): t => FromDist(#ToFloat(#Variance), dist) + let sample = (dist): t => FromDist(#ToFloat(#Sample), dist) + let cdf = (dist, x): t => FromDist(#ToFloat(#Cdf(x)), dist) + let inv = (dist, x): t => FromDist(#ToFloat(#Inv(x)), dist) + let pdf = (dist, x): t => FromDist(#ToFloat(#Pdf(x)), dist) + let normalize = (dist): t => FromDist(#ToDist(Normalize), dist) + let isNormalized = (dist): t => FromDist(#ToBool(IsNormalized), dist) + let toPointSet = (dist): t => FromDist(#ToDist(ToPointSet), dist) + let toSampleSet = (dist, r): t => FromDist(#ToDist(ToSampleSet(r)), dist) let fromSamples = (xs): t => FromSamples(xs) - let truncate = (dist, left, right): t => FromDist(ToDist(Truncate(left, right)), dist) - let inspect = (dist): t => FromDist(ToDist(Inspect), dist) + let truncate = (dist, left, right): t => FromDist(#ToDist(Truncate(left, right)), dist) + let inspect = (dist): t => FromDist(#ToDist(Inspect), dist) module LogScore = { let distEstimateDistAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Dist(answer), None)), + #ToScore(LogScore(Score_Dist(answer), None)), estimate, ) let distEstimateDistAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Dist(answer), Some(prior))), + #ToScore(LogScore(Score_Dist(answer), Some(prior))), estimate, ) let distEstimateScalarAnswer = (estimate, answer): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), None)), + #ToScore(LogScore(Score_Scalar(answer), None)), estimate, ) let distEstimateScalarAnswerWithPrior = (estimate, answer, prior): t => FromDist( - ToScore(LogScore(Score_Scalar(answer), Some(prior))), + #ToScore(LogScore(Score_Scalar(answer), Some(prior))), estimate, ) } - let scaleMultiply = (dist, n): t => FromDist(ToDist(Scale(#Multiply, n)), dist) - let scalePower = (dist, n): t => FromDist(ToDist(Scale(#Power, n)), dist) - let scaleLogarithm = (dist, n): t => FromDist(ToDist(Scale(#Logarithm, n)), dist) + let scaleMultiply = (dist, n): t => FromDist(#ToDist(Scale(#Multiply, n)), dist) + let scalePower = (dist, n): t => FromDist(#ToDist(Scale(#Power, n)), dist) + let scaleLogarithm = (dist, n): t => FromDist(#ToDist(Scale(#Logarithm, n)), dist) let scaleLogarithmWithThreshold = (dist, n, eps): t => FromDist( - ToDist(Scale(#LogarithmWithThreshold(eps), n)), + #ToDist(Scale(#LogarithmWithThreshold(eps), n)), dist, ) - let toString = (dist): t => FromDist(ToString(ToString), dist) - let toSparkline = (dist, n): t => FromDist(ToString(ToSparkline(n)), dist) + let toString = (dist): t => FromDist(#ToString(ToString), dist) + let toSparkline = (dist, n): t => FromDist(#ToString(ToSparkline(n)), dist) let algebraicAdd = (dist1, dist2: genericDist): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Add, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Add, #Dist(dist2)), dist1, ) let algebraicMultiply = (dist1, dist2): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Multiply, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Multiply, #Dist(dist2)), dist1, ) let algebraicDivide = (dist1, dist2): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Divide, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Divide, #Dist(dist2)), dist1, ) let algebraicSubtract = (dist1, dist2): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Subtract, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Subtract, #Dist(dist2)), dist1, ) let algebraicLogarithm = (dist1, dist2): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Logarithm, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Logarithm, #Dist(dist2)), dist1, ) let algebraicPower = (dist1, dist2): t => FromDist( - ToDistCombination(Algebraic(AsDefault), #Power, #Dist(dist2)), + #ToDistCombination(Algebraic(AsDefault), #Power, #Dist(dist2)), dist1, ) let pointwiseAdd = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Add, #Dist(dist2)), + #ToDistCombination(Pointwise, #Add, #Dist(dist2)), dist1, ) let pointwiseMultiply = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Multiply, #Dist(dist2)), + #ToDistCombination(Pointwise, #Multiply, #Dist(dist2)), dist1, ) let pointwiseDivide = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Divide, #Dist(dist2)), + #ToDistCombination(Pointwise, #Divide, #Dist(dist2)), dist1, ) let pointwiseSubtract = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Subtract, #Dist(dist2)), + #ToDistCombination(Pointwise, #Subtract, #Dist(dist2)), dist1, ) let pointwiseLogarithm = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Logarithm, #Dist(dist2)), + #ToDistCombination(Pointwise, #Logarithm, #Dist(dist2)), dist1, ) let pointwisePower = (dist1, dist2): t => FromDist( - ToDistCombination(Pointwise, #Power, #Dist(dist2)), + #ToDistCombination(Pointwise, #Power, #Dist(dist2)), dist1, ) } diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index fee4df4d..b73f84e0 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -34,9 +34,7 @@ module Helpers = { dist: DistributionTypes.genericDist, ~env: DistributionOperation.env, ) => { - FromDist(DistributionTypes.DistributionOperation.ToFloat(fnCall), dist) - ->DistributionOperation.run(~env) - ->Some + FromDist(#ToFloat(fnCall), dist)->DistributionOperation.run(~env)->Some } let toStringFn = ( @@ -44,9 +42,7 @@ module Helpers = { dist: DistributionTypes.genericDist, ~env: DistributionOperation.env, ) => { - FromDist(DistributionTypes.DistributionOperation.ToString(fnCall), dist) - ->DistributionOperation.run(~env) - ->Some + FromDist(#ToString(fnCall), dist)->DistributionOperation.run(~env)->Some } let toBoolFn = ( @@ -54,9 +50,7 @@ module Helpers = { dist: DistributionTypes.genericDist, ~env: DistributionOperation.env, ) => { - FromDist(DistributionTypes.DistributionOperation.ToBool(fnCall), dist) - ->DistributionOperation.run(~env) - ->Some + FromDist(#ToBool(fnCall), dist)->DistributionOperation.run(~env)->Some } let toDistFn = ( @@ -64,18 +58,12 @@ module Helpers = { dist, ~env: DistributionOperation.env, ) => { - FromDist(DistributionTypes.DistributionOperation.ToDist(fnCall), dist) - ->DistributionOperation.run(~env) - ->Some + FromDist(#ToDist(fnCall), dist)->DistributionOperation.run(~env)->Some } let twoDiststoDistFn = (direction, arithmetic, dist1, dist2, ~env: DistributionOperation.env) => { FromDist( - DistributionTypes.DistributionOperation.ToDistCombination( - direction, - arithmeticMap(arithmetic), - #Dist(dist2), - ), + #ToDistCombination(direction, arithmeticMap(arithmetic), #Dist(dist2)), dist1, )->DistributionOperation.run(~env) } @@ -229,7 +217,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio Some( DistributionOperation.run( FromDist( - ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), None)), + #ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), None)), prediction, ), ~env, @@ -242,7 +230,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio Some( DistributionOperation.run( FromDist( - ToScore( + #ToScore( LogScore( DistributionTypes.DistributionOperation.Score_Dist(answer), Some(DistributionTypes.DistributionOperation.Score_Dist(prior)), @@ -267,7 +255,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ) => DistributionOperation.run( FromDist( - ToScore( + #ToScore( LogScore( DistributionTypes.DistributionOperation.Score_Scalar(answer), DistributionTypes.DistributionOperation.Score_Dist(prior)->Some, @@ -284,7 +272,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ) => DistributionOperation.run( FromDist( - ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), None)), + #ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), None)), prediction, ), ~env, From 6973f70e4cdda091fa65bc941b67ef34434e3964 Mon Sep 17 00:00:00 2001 From: Sam Nolan Date: Mon, 11 Jul 2022 11:22:21 +1000 Subject: [PATCH 27/60] Add graph settings to playground --- .../src/components/SquiggleChart.tsx | 47 +++++----- .../src/components/SquigglePlayground.tsx | 88 +++++++++++++------ .../src/lib/distributionSpecBuilder.ts | 4 +- .../src/stories/SquiggleChart.stories.mdx | 2 +- 4 files changed, 88 insertions(+), 53 deletions(-) diff --git a/packages/components/src/components/SquiggleChart.tsx b/packages/components/src/components/SquiggleChart.tsx index cd480e69..f9f2b368 100644 --- a/packages/components/src/components/SquiggleChart.tsx +++ b/packages/components/src/components/SquiggleChart.tsx @@ -60,29 +60,30 @@ export interface SquiggleChartProps { const defaultOnChange = () => {}; -export const SquiggleChart: React.FC = React.memo(({ - code = "", - environment, - onChange = defaultOnChange, // defaultOnChange must be constant, don't move its definition here - height = 200, - bindings = defaultBindings, - jsImports = defaultImports, - showSummary = false, - width, - showTypes = false, - showControls = false, - logX = false, - expY = false, - diagramStart = 0, - diagramStop = 10, - diagramCount = 100, - tickFormat, - minX, - maxX, - color, - title, - distributionChartActions, -}) => { +export const SquiggleChart: React.FC = React.memo( + ({ + code = "", + environment, + onChange = defaultOnChange, // defaultOnChange must be constant, don't move its definition here + height = 200, + bindings = defaultBindings, + jsImports = defaultImports, + showSummary = false, + width, + showTypes = false, + showControls = false, + logX = false, + expY = false, + diagramStart = 0, + diagramStop = 10, + diagramCount = 100, + tickFormat, + minX, + maxX, + color, + title, + distributionChartActions, + }) => { const result = useSquiggle({ code, bindings, diff --git a/packages/components/src/components/SquigglePlayground.tsx b/packages/components/src/components/SquigglePlayground.tsx index 301d8892..534be721 100644 --- a/packages/components/src/components/SquigglePlayground.tsx +++ b/packages/components/src/components/SquigglePlayground.tsx @@ -18,7 +18,7 @@ import clsx from "clsx"; import { defaultBindings, environment } from "@quri/squiggle-lang"; -import { SquiggleChart } from "./SquiggleChart"; +import { SquiggleChart, SquiggleChartProps } from "./SquiggleChart"; import { CodeEditor } from "./CodeEditor"; import { JsonEditor } from "./JsonEditor"; import { ErrorAlert, SuccessAlert } from "./Alert"; @@ -27,28 +27,16 @@ import { Toggle } from "./ui/Toggle"; import { Checkbox } from "./ui/Checkbox"; import { StyledTab } from "./ui/StyledTab"; -interface PlaygroundProps { +type PlaygroundProps = SquiggleChartProps & { /** The initial squiggle string to put in the playground */ defaultCode?: string; /** How many pixels high is the playground */ - height?: number; - /** Whether to show the types of outputs in the playground */ - showTypes?: boolean; - /** Whether to show the log scale controls in the playground */ - showControls?: boolean; - /** Whether to show the summary table in the playground */ - showSummary?: boolean; - /** Whether to log the x coordinate on distribution charts */ - logX?: boolean; - /** Whether to exp the y coordinate on distribution charts */ - expY?: boolean; - /** If code is set, component becomes controlled */ - code?: string; onCodeChange?(expr: string): void; + /* When settings change */ onSettingsChange?(settings: any): void; /** Should we show the editor? */ showEditor?: boolean; -} +}; const schema = yup.object({}).shape({ sampleCount: yup @@ -82,6 +70,12 @@ const schema = yup.object({}).shape({ showEditor: yup.boolean().required(), logX: yup.boolean().required(), expY: yup.boolean().required(), + tickFormat: yup.string().default(".9~s"), + title: yup.string(), + color: yup.string().default("#739ECC").required(), + minX: yup.number(), + maxX: yup.number(), + distributionChartActions: yup.boolean(), showSettingsPage: yup.boolean().default(false), diagramStart: yup.number().required().positive().integer().default(0).min(0), diagramStop: yup.number().required().positive().integer().default(10).min(0), @@ -114,7 +108,7 @@ function InputItem({ }: { name: Path; label: string; - type: "number"; + type: "number" | "text" | "color"; register: UseFormRegister; }) { return ( @@ -122,7 +116,7 @@ function InputItem({
{label}
@@ -202,6 +196,11 @@ const ViewSettings: React.FC<{ register: UseFormRegister }> = ({ name="expY" label="Show y scale exponentially" /> + }> = ({ name="showSummary" label="Show summary statistics" /> + + + + + @@ -385,6 +414,12 @@ export const SquigglePlayground: FC = ({ showSummary = false, logX = false, expY = false, + title, + minX, + maxX, + color = "#739ECC", + tickFormat = ".9~s", + distributionChartActions, code: controlledCode, onCodeChange, onSettingsChange, @@ -408,6 +443,12 @@ export const SquigglePlayground: FC = ({ showControls, logX, expY, + title, + minX, + maxX, + color, + tickFormat, + distributionChartActions, showSummary, showEditor, leftSizePercent: 50, @@ -440,15 +481,7 @@ export const SquigglePlayground: FC = ({ @@ -496,6 +529,7 @@ export const SquigglePlayground: FC = ({ const withoutEditor =
{tabs}
; + console.log(vars); return ( diff --git a/packages/components/src/lib/distributionSpecBuilder.ts b/packages/components/src/lib/distributionSpecBuilder.ts index b40a973d..4286dbdb 100644 --- a/packages/components/src/lib/distributionSpecBuilder.ts +++ b/packages/components/src/lib/distributionSpecBuilder.ts @@ -114,11 +114,11 @@ export function buildVegaSpec( } = specOptions; let xScale = logX ? logXScale : linearXScale; - if (minX !== undefined) { + if (minX !== undefined && Number.isFinite(minX)) { xScale = { ...xScale, domainMin: minX }; } - if (maxX !== undefined) { + if (maxX !== undefined && Number.isFinite(maxX)) { xScale = { ...xScale, domainMax: maxX }; } diff --git a/packages/components/src/stories/SquiggleChart.stories.mdx b/packages/components/src/stories/SquiggleChart.stories.mdx index 2483c985..2febfb6f 100644 --- a/packages/components/src/stories/SquiggleChart.stories.mdx +++ b/packages/components/src/stories/SquiggleChart.stories.mdx @@ -3,7 +3,7 @@ import { Canvas, Meta, Story, Props } from "@storybook/addon-docs"; -export const Template = SquiggleChart; +export const Template = (props) => ; /* We have to hardcode a width here, because otherwise some interaction with Storybook creates an infinite loop with the internal width From 740f07a2b6650e42f4959681088ef3369a339b39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:48:04 +0000 Subject: [PATCH 28/60] :arrow_up: Bump webpack-dev-server from 4.9.2 to 4.9.3 Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 4.9.2 to 4.9.3. - [Release notes](https://github.com/webpack/webpack-dev-server/releases) - [Changelog](https://github.com/webpack/webpack-dev-server/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack-dev-server/compare/v4.9.2...v4.9.3) --- updated-dependencies: - dependency-name: webpack-dev-server dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- yarn.lock | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..09262a2c 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -56,7 +56,7 @@ "web-vitals": "^2.1.4", "webpack": "^5.73.0", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.9.2" + "webpack-dev-server": "^4.9.3" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18", diff --git a/yarn.lock b/yarn.lock index bb697719..d3611b27 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -6912,10 +6912,10 @@ confusing-browser-globals@^1.0.11: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.3: version "2.15.3" @@ -18265,10 +18265,10 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" - integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== +webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -18282,7 +18282,7 @@ webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" + connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" From cd9599280542989a57887224d0ecb040ae6c7855 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:48:36 +0000 Subject: [PATCH 29/60] :arrow_up: Bump vega-lite from 5.2.0 to 5.3.0 Bumps [vega-lite](https://github.com/vega/vega-lite) from 5.2.0 to 5.3.0. - [Release notes](https://github.com/vega/vega-lite/releases) - [Changelog](https://github.com/vega/vega-lite/blob/v5.3.0/CHANGELOG.md) - [Commits](https://github.com/vega/vega-lite/compare/v5.2.0...v5.3.0) --- updated-dependencies: - dependency-name: vega-lite dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- yarn.lock | 40 +++++++++----------------------- 2 files changed, 12 insertions(+), 30 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..f1feb773 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -18,7 +18,7 @@ "react-vega": "^7.5.1", "vega": "^5.22.1", "vega-embed": "^6.21.0", - "vega-lite": "^5.2.0", + "vega-lite": "^5.3.0", "vscode-uri": "^3.0.3", "yup": "^0.32.11" }, diff --git a/yarn.lock b/yarn.lock index bb697719..64d20e4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -17076,16 +17076,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -17774,10 +17769,10 @@ vega-label@~1.2.0: vega-scenegraph "^4.9.2" vega-util "^1.15.2" -vega-lite@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== +vega-lite@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.3.0.tgz#b9b9ecd80e869e823e6848c67d0a8ad94954bdee" + integrity sha512-6giodZ/bJnWyLq6Gj4OyiDt7EndoGyC9f5xDQjo82yPpUiO4MuG9iiPMqR1SPKmG9/qPBf+klWQR0v/7Mgju0Q== dependencies: "@types/clone" "~2.1.1" array-flat-polyfill "^1.0.1" @@ -17785,11 +17780,11 @@ vega-lite@^5.2.0: fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" + tslib "~2.4.0" vega-event-selector "~3.0.0" vega-expression "~5.0.0" vega-util "~1.17.0" - yargs "~17.2.1" + yargs "~17.5.1" vega-loader@^4.3.2, vega-loader@^4.4.0, vega-loader@~4.5.0: version "4.5.0" @@ -18906,7 +18901,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@~17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -18919,19 +18914,6 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.3.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From fbbab103911ac6251efa9be996fcd62004e18898 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:50:42 +0000 Subject: [PATCH 30/60] :arrow_up: Bump @types/vscode from 1.68.0 to 1.69.0 Bumps [@types/vscode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/vscode) from 1.68.0 to 1.69.0. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/vscode) --- updated-dependencies: - dependency-name: "@types/vscode" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index a0386e21..62de7528 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -138,7 +138,7 @@ "devDependencies": { "@types/glob": "^7.2.0", "@types/node": "18.x", - "@types/vscode": "^1.68.0", + "@types/vscode": "^1.69.0", "@typescript-eslint/eslint-plugin": "^5.30.4", "@typescript-eslint/parser": "^5.30.4", "eslint": "^8.18.0", diff --git a/yarn.lock b/yarn.lock index bb697719..69722484 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -4524,10 +4524,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/vscode@^1.68.0": - version "1.68.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.68.0.tgz#c0864e4ea43c509bfc6b53f4e91aa923fd0475b8" - integrity sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw== +"@types/vscode@^1.69.0": + version "1.69.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.69.0.tgz#a472011af392fbcf82cbb82f60b4c239c21b921c" + integrity sha512-RlzDAnGqUoo9wS6d4tthNyAdZLxOIddLiX3djMoWk29jFfSA1yJbIwr0epBYqqYarWB6s2Z+4VaZCQ80Jaa3kA== "@types/webpack-env@^1.16.0": version "1.17.0" From d401b1283918dcc136fb2f933ab1ead3b207e66c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:51:09 +0000 Subject: [PATCH 31/60] :arrow_up: Bump @babel/plugin-proposal-private-property-in-object Bumps [@babel/plugin-proposal-private-property-in-object](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-proposal-private-property-in-object) from 7.17.12 to 7.18.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-plugin-proposal-private-property-in-object) --- updated-dependencies: - dependency-name: "@babel/plugin-proposal-private-property-in-object" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- yarn.lock | 194 ++++++++++++++++++++++++++----- 2 files changed, 165 insertions(+), 31 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..11d63430 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -23,7 +23,7 @@ "yup": "^0.32.11" }, "devDependencies": { - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", "@storybook/addon-actions": "^6.5.9", "@storybook/addon-essentials": "^6.5.9", "@storybook/addon-links": "^6.5.9", diff --git a/yarn.lock b/yarn.lock index bb697719..e4c0db20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,6 +147,13 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" @@ -213,12 +220,21 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/generator@^7.18.7": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" + integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.7", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" @@ -238,18 +254,18 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": version "7.17.12" @@ -292,6 +308,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" @@ -307,6 +328,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -314,6 +343,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -321,6 +357,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-member-expression-to-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" + integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -349,15 +392,22 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -379,6 +429,17 @@ "@babel/traverse" "^7.18.2" "@babel/types" "^7.18.2" +"@babel/helper-replace-supers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" + integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" @@ -400,11 +461,23 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" @@ -438,11 +511,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3", "@babel/parser@^7.18.5": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.18.6", "@babel/parser@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" + integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" @@ -598,14 +685,14 @@ "@babel/helper-create-class-features-plugin" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12", "@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -1255,6 +1342,15 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" @@ -1271,6 +1367,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.8.tgz#f095e62ab46abf1da35e5a2011f43aee72d8d5b0" + integrity sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.8" + "@babel/types" "^7.18.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" @@ -1279,6 +1391,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.8.tgz#c5af199951bf41ba4a6a9a6d0d8ad722b30cd42f" + integrity sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2165,6 +2285,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.7" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" @@ -2175,6 +2304,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/source-map@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" @@ -4422,9 +4556,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" From 2d5f52aa5b423a79989b016992c7deb395c96820 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 14:51:38 +0000 Subject: [PATCH 32/60] :arrow_up: Bump tailwindcss from 3.1.4 to 3.1.5 Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 3.1.4 to 3.1.5. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v3.1.4...v3.1.5) --- updated-dependencies: - dependency-name: tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- yarn.lock | 35 ++++++++++++++++++++++---------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..8f0afb94 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -49,7 +49,7 @@ "react": "^18.1.0", "react-scripts": "^5.0.1", "style-loader": "^3.3.1", - "tailwindcss": "^3.1.3", + "tailwindcss": "^3.1.5", "ts-loader": "^9.3.0", "tsconfig-paths-webpack-plugin": "^3.5.2", "typescript": "^4.7.4", diff --git a/yarn.lock b/yarn.lock index bb697719..d2089081 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -13722,7 +13722,7 @@ postcss-lab-function@^4.2.0: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: +postcss-load-config@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== @@ -13730,6 +13730,14 @@ postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + postcss-loader@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" @@ -15378,7 +15386,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -16628,10 +16636,10 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== -tailwindcss@^3.0.2, tailwindcss@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.4.tgz#64b09059805505902139fa805d97046080bd90b9" - integrity sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ== +tailwindcss@^3.0.2, tailwindcss@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.5.tgz#c8e0bb1cbacf29a6411d9c07debc1af9d388d4ca" + integrity sha512-bC/2dy3dGPqxMWAqFSRgQxVCfmO/31ZbeEp8s9DMDh4zgPZ5WW1gxRJkbBkXcTUIzaSUdhWrcsrSOe32ccgB4w== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -16649,12 +16657,12 @@ tailwindcss@^3.0.2, tailwindcss@^3.1.3: postcss "^8.4.14" postcss-import "^14.1.0" postcss-js "^4.0.0" - postcss-load-config "^3.1.4" + postcss-load-config "^4.0.1" postcss-nested "5.0.6" postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" - resolve "^1.22.0" + resolve "^1.22.1" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" @@ -18858,6 +18866,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" From a344a215c4947a17813e7f6c74bedf534dc5d8b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:26:17 +0000 Subject: [PATCH 33/60] :arrow_up: Bump react-hook-form from 7.33.0 to 7.33.1 Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.33.0 to 7.33.1. - [Release notes](https://github.com/react-hook-form/react-hook-form/releases) - [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md) - [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.33.0...v7.33.1) --- updated-dependencies: - dependency-name: react-hook-form dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 4 +-- yarn.lock | 48 ++++++++++---------------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..99a7db2b 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -13,12 +13,12 @@ "lodash": "^4.17.21", "react": "^18.1.0", "react-ace": "^10.1.0", - "react-hook-form": "^7.33.0", + "react-hook-form": "^7.33.1", "react-use": "^17.4.0", "react-vega": "^7.5.1", "vega": "^5.22.1", "vega-embed": "^6.21.0", - "vega-lite": "^5.2.0", + "vega-lite": "^5.3.0", "vscode-uri": "^3.0.3", "yup": "^0.32.11" }, diff --git a/yarn.lock b/yarn.lock index bb697719..238234c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -14670,10 +14670,10 @@ react-helmet-async@*, react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" -react-hook-form@^7.33.0: - version "7.33.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.0.tgz#44a87ddd630f00ebeb0f15aa978f69ca74b8a77b" - integrity sha512-h8XoeUHQs1Snx1s/sSvM+eVTSKkWQt8TcrbL+3/Rt5gugxpy4ueL5ZZkubffyNpUyyTz0qM0kwOi2c+JgGTjLA== +react-hook-form@^7.33.1: + version "7.33.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0" + integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg== react-inspector@^5.1.0: version "5.1.1" @@ -17076,16 +17076,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -17774,10 +17769,10 @@ vega-label@~1.2.0: vega-scenegraph "^4.9.2" vega-util "^1.15.2" -vega-lite@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== +vega-lite@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.3.0.tgz#b9b9ecd80e869e823e6848c67d0a8ad94954bdee" + integrity sha512-6giodZ/bJnWyLq6Gj4OyiDt7EndoGyC9f5xDQjo82yPpUiO4MuG9iiPMqR1SPKmG9/qPBf+klWQR0v/7Mgju0Q== dependencies: "@types/clone" "~2.1.1" array-flat-polyfill "^1.0.1" @@ -17785,11 +17780,11 @@ vega-lite@^5.2.0: fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" + tslib "~2.4.0" vega-event-selector "~3.0.0" vega-expression "~5.0.0" vega-util "~1.17.0" - yargs "~17.2.1" + yargs "~17.5.1" vega-loader@^4.3.2, vega-loader@^4.4.0, vega-loader@~4.5.0: version "4.5.0" @@ -18906,7 +18901,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@~17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -18919,19 +18914,6 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.3.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From af75f4fd1dac4d7263ec69988bd6036a6b88c8db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:26:53 +0000 Subject: [PATCH 34/60] :arrow_up: Bump eslint from 8.18.0 to 8.19.0 Bumps [eslint](https://github.com/eslint/eslint) from 8.18.0 to 8.19.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.18.0...v8.19.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 48 ++++++++++---------------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index a0386e21..9861343c 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -141,7 +141,7 @@ "@types/vscode": "^1.68.0", "@typescript-eslint/eslint-plugin": "^5.30.4", "@typescript-eslint/parser": "^5.30.4", - "eslint": "^8.18.0", + "eslint": "^8.19.0", "glob": "^8.0.3", "js-yaml": "^4.1.0", "typescript": "^4.7.4", diff --git a/yarn.lock b/yarn.lock index bb697719..f84a0ca9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -8551,10 +8551,10 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^3.1.1" -eslint@^8.18.0, eslint@^8.3.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== +eslint@^8.19.0, eslint@^8.3.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" @@ -17076,16 +17076,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -17774,10 +17769,10 @@ vega-label@~1.2.0: vega-scenegraph "^4.9.2" vega-util "^1.15.2" -vega-lite@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== +vega-lite@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.3.0.tgz#b9b9ecd80e869e823e6848c67d0a8ad94954bdee" + integrity sha512-6giodZ/bJnWyLq6Gj4OyiDt7EndoGyC9f5xDQjo82yPpUiO4MuG9iiPMqR1SPKmG9/qPBf+klWQR0v/7Mgju0Q== dependencies: "@types/clone" "~2.1.1" array-flat-polyfill "^1.0.1" @@ -17785,11 +17780,11 @@ vega-lite@^5.2.0: fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" + tslib "~2.4.0" vega-event-selector "~3.0.0" vega-expression "~5.0.0" vega-util "~1.17.0" - yargs "~17.2.1" + yargs "~17.5.1" vega-loader@^4.3.2, vega-loader@^4.4.0, vega-loader@~4.5.0: version "4.5.0" @@ -18906,7 +18901,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@~17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -18919,19 +18914,6 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.3.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 89ac9662767e578871ea0035cc5a4340e3b464e4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:27:40 +0000 Subject: [PATCH 35/60] :arrow_up: Bump ts-node from 10.8.1 to 10.8.2 Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.8.1 to 10.8.2. - [Release notes](https://github.com/TypeStrong/ts-node/releases) - [Commits](https://github.com/TypeStrong/ts-node/compare/v10.8.1...v10.8.2) --- updated-dependencies: - dependency-name: ts-node dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/squiggle-lang/package.json | 2 +- yarn.lock | 48 +++++++++-------------------- 2 files changed, 16 insertions(+), 34 deletions(-) diff --git a/packages/squiggle-lang/package.json b/packages/squiggle-lang/package.json index c9501b3b..b2067205 100644 --- a/packages/squiggle-lang/package.json +++ b/packages/squiggle-lang/package.json @@ -65,7 +65,7 @@ "rescript-fast-check": "^1.1.1", "ts-jest": "^27.1.4", "ts-loader": "^9.3.0", - "ts-node": "^10.8.1", + "ts-node": "^10.8.2", "typescript": "^4.7.4", "webpack": "^5.73.0", "webpack-cli": "^4.10.0" diff --git a/yarn.lock b/yarn.lock index bb697719..aef6d446 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -17028,10 +17028,10 @@ ts-loader@^9.3.0: micromatch "^4.0.0" semver "^7.3.4" -ts-node@^10.8.1: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== +ts-node@^10.8.2: + version "10.8.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" + integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -17076,16 +17076,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -17774,10 +17769,10 @@ vega-label@~1.2.0: vega-scenegraph "^4.9.2" vega-util "^1.15.2" -vega-lite@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== +vega-lite@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.3.0.tgz#b9b9ecd80e869e823e6848c67d0a8ad94954bdee" + integrity sha512-6giodZ/bJnWyLq6Gj4OyiDt7EndoGyC9f5xDQjo82yPpUiO4MuG9iiPMqR1SPKmG9/qPBf+klWQR0v/7Mgju0Q== dependencies: "@types/clone" "~2.1.1" array-flat-polyfill "^1.0.1" @@ -17785,11 +17780,11 @@ vega-lite@^5.2.0: fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" + tslib "~2.4.0" vega-event-selector "~3.0.0" vega-expression "~5.0.0" vega-util "~1.17.0" - yargs "~17.2.1" + yargs "~17.5.1" vega-loader@^4.3.2, vega-loader@^4.4.0, vega-loader@~4.5.0: version "4.5.0" @@ -18906,7 +18901,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@~17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -18919,19 +18914,6 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.3.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 4524e1e55a80d06fcba9ea03ac92f1e375ba8a46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:28:03 +0000 Subject: [PATCH 36/60] :arrow_up: Bump @headlessui/react from 1.6.5 to 1.6.6 Bumps [@headlessui/react](https://github.com/tailwindlabs/headlessui/tree/HEAD/packages/@headlessui-react) from 1.6.5 to 1.6.6. - [Release notes](https://github.com/tailwindlabs/headlessui/releases) - [Changelog](https://github.com/tailwindlabs/headlessui/blob/main/packages/@headlessui-react/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/headlessui/commits/@headlessui/react@v1.6.6/packages/@headlessui-react) --- updated-dependencies: - dependency-name: "@headlessui/react" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 4 +-- yarn.lock | 48 ++++++++++---------------------- 2 files changed, 17 insertions(+), 35 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index 5015ab35..af1a6ac5 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -3,7 +3,7 @@ "version": "0.2.20", "license": "MIT", "dependencies": { - "@headlessui/react": "^1.6.5", + "@headlessui/react": "^1.6.6", "@heroicons/react": "^1.0.6", "@hookform/resolvers": "^2.9.3", "@quri/squiggle-lang": "^0.2.8", @@ -18,7 +18,7 @@ "react-vega": "^7.5.1", "vega": "^5.22.1", "vega-embed": "^6.21.0", - "vega-lite": "^5.2.0", + "vega-lite": "^5.3.0", "vscode-uri": "^3.0.3", "yup": "^0.32.11" }, diff --git a/yarn.lock b/yarn.lock index bb697719..65a8a169 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1854,10 +1854,10 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@headlessui/react@^1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.5.tgz#5587c537de809cf3146eb2ff263e5e940b1bf69c" - integrity sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg== +"@headlessui/react@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.6.tgz#3073c066b85535c9d28783da0a4d9288b5354d0c" + integrity sha512-MFJtmj9Xh/hhBMhLccGbBoSk+sk61BlP6sJe4uQcVMtXZhCgGqd2GyIQzzmsdPdTEWGSF434CBi8mnhR6um46Q== "@heroicons/react@^1.0.6": version "1.0.6" @@ -4422,9 +4422,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.1", "@types/react@^18.0.9": - version "18.0.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.14.tgz#e016616ffff51dba01b04945610fe3671fdbe06d" - integrity sha512-x4gGuASSiWmo0xjDLpm5mPb52syZHJx02VKbqUKdLmKtAwIh63XClGsiTI1K6DO5q7ox4xAsQrU+Gl3+gGXF9Q== + version "18.0.15" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.15.tgz#d355644c26832dc27f3e6cbf0c4f4603fc4ab7fe" + integrity sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -17076,16 +17076,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0, tslib@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -tslib@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -17774,10 +17769,10 @@ vega-label@~1.2.0: vega-scenegraph "^4.9.2" vega-util "^1.15.2" -vega-lite@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.2.0.tgz#bc3c5c70a38d9de8f3fb9644c7dd52f3b9f47a1b" - integrity sha512-Yxcg8MvYfxHcG6BbkaKT0oVCIMIcE19UvqIsEwBmyd/7h2nzW7oRnID81T8UrY7hpDrIr6wa2JADOT2dhGNErw== +vega-lite@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-5.3.0.tgz#b9b9ecd80e869e823e6848c67d0a8ad94954bdee" + integrity sha512-6giodZ/bJnWyLq6Gj4OyiDt7EndoGyC9f5xDQjo82yPpUiO4MuG9iiPMqR1SPKmG9/qPBf+klWQR0v/7Mgju0Q== dependencies: "@types/clone" "~2.1.1" array-flat-polyfill "^1.0.1" @@ -17785,11 +17780,11 @@ vega-lite@^5.2.0: fast-deep-equal "~3.1.3" fast-json-stable-stringify "~2.1.0" json-stringify-pretty-compact "~3.0.0" - tslib "~2.3.1" + tslib "~2.4.0" vega-event-selector "~3.0.0" vega-expression "~5.0.0" vega-util "~1.17.0" - yargs "~17.2.1" + yargs "~17.5.1" vega-loader@^4.3.2, vega-loader@^4.4.0, vega-loader@~4.5.0: version "4.5.0" @@ -18906,7 +18901,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.0.0: +yargs@^17.0.0, yargs@~17.5.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== @@ -18919,19 +18914,6 @@ yargs@^17.0.0: y18n "^5.0.5" yargs-parser "^21.0.0" -yargs@~17.2.1: - version "17.2.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" - integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - yauzl@^2.3.1: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" From 3fa0904d28f9cf7a97a533eb3eb52fe346c9686a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:41:02 +0000 Subject: [PATCH 37/60] :arrow_up: Bump @typescript-eslint/eslint-plugin from 5.30.4 to 5.30.5 Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.30.4 to 5.30.5. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.30.5/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 72 +++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index c0693c43..46b858f3 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -139,7 +139,7 @@ "@types/glob": "^7.2.0", "@types/node": "18.x", "@types/vscode": "^1.69.0", - "@typescript-eslint/eslint-plugin": "^5.30.4", + "@typescript-eslint/eslint-plugin": "^5.30.5", "@typescript-eslint/parser": "^5.30.4", "eslint": "^8.19.0", "glob": "^8.0.3", diff --git a/yarn.lock b/yarn.lock index e1536d81..e2596462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4731,14 +4731,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.30.4", "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" - integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== +"@typescript-eslint/eslint-plugin@^5.30.5", "@typescript-eslint/eslint-plugin@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d" + integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/type-utils" "5.30.4" - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/type-utils" "5.30.5" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -4779,12 +4779,20 @@ "@typescript-eslint/types" "5.30.4" "@typescript-eslint/visitor-keys" "5.30.4" -"@typescript-eslint/type-utils@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" - integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== +"@typescript-eslint/scope-manager@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" + integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg== dependencies: - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" + +"@typescript-eslint/type-utils@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9" + integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw== + dependencies: + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" tsutils "^3.21.0" @@ -4798,6 +4806,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== +"@typescript-eslint/types@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" + integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== + "@typescript-eslint/typescript-estree@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" @@ -4824,6 +4837,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" + integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ== + dependencies: + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" @@ -4836,15 +4862,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.30.4", "@typescript-eslint/utils@^5.13.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" - integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== +"@typescript-eslint/utils@5.30.5", "@typescript-eslint/utils@^5.13.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765" + integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -4864,6 +4890,14 @@ "@typescript-eslint/types" "5.30.4" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" + integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA== + dependencies: + "@typescript-eslint/types" "5.30.5" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From 2f620b2a85dabdecea4e97d4981ce56c0bdd6b72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:44:15 +0000 Subject: [PATCH 38/60] :arrow_up: Bump react-vega from 7.5.1 to 7.6.0 Bumps [react-vega](https://github.com/vega/react-vega) from 7.5.1 to 7.6.0. - [Release notes](https://github.com/vega/react-vega/releases) - [Changelog](https://github.com/vega/react-vega/blob/master/CHANGELOG.md) - [Commits](https://github.com/vega/react-vega/compare/v7.5.1...v7.6.0) --- updated-dependencies: - dependency-name: react-vega dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 8 +- yarn.lock | 259 ++++++++++++++++++++++++------- 2 files changed, 207 insertions(+), 60 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index f1feb773..3163036f 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -15,7 +15,7 @@ "react-ace": "^10.1.0", "react-hook-form": "^7.33.0", "react-use": "^17.4.0", - "react-vega": "^7.5.1", + "react-vega": "^7.6.0", "vega": "^5.22.1", "vega-embed": "^6.21.0", "vega-lite": "^5.3.0", @@ -23,7 +23,7 @@ "yup": "^0.32.11" }, "devDependencies": { - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", "@storybook/addon-actions": "^6.5.9", "@storybook/addon-essentials": "^6.5.9", "@storybook/addon-links": "^6.5.9", @@ -49,14 +49,14 @@ "react": "^18.1.0", "react-scripts": "^5.0.1", "style-loader": "^3.3.1", - "tailwindcss": "^3.1.3", + "tailwindcss": "^3.1.5", "ts-loader": "^9.3.0", "tsconfig-paths-webpack-plugin": "^3.5.2", "typescript": "^4.7.4", "web-vitals": "^2.1.4", "webpack": "^5.73.0", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.9.2" + "webpack-dev-server": "^4.9.3" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18", diff --git a/yarn.lock b/yarn.lock index 64d20e4e..02d47d6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,6 +147,13 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" @@ -213,12 +220,21 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/generator@^7.18.7": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" + integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.7", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" @@ -238,18 +254,18 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": version "7.17.12" @@ -292,6 +308,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" @@ -307,6 +328,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -314,6 +343,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -321,6 +357,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-member-expression-to-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" + integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -349,15 +392,22 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -379,6 +429,17 @@ "@babel/traverse" "^7.18.2" "@babel/types" "^7.18.2" +"@babel/helper-replace-supers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" + integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" @@ -400,11 +461,23 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" @@ -438,11 +511,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3", "@babel/parser@^7.18.5": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.18.6", "@babel/parser@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" + integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" @@ -598,14 +685,14 @@ "@babel/helper-create-class-features-plugin" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12", "@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -1255,6 +1342,15 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" @@ -1271,6 +1367,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.8.tgz#f095e62ab46abf1da35e5a2011f43aee72d8d5b0" + integrity sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.8" + "@babel/types" "^7.18.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" @@ -1279,6 +1391,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.8.tgz#c5af199951bf41ba4a6a9a6d0d8ad722b30cd42f" + integrity sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2165,6 +2285,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.7" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" @@ -2175,6 +2304,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/source-map@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" @@ -4524,10 +4658,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/vscode@^1.68.0": - version "1.68.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.68.0.tgz#c0864e4ea43c509bfc6b53f4e91aa923fd0475b8" - integrity sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw== +"@types/vscode@^1.69.0": + version "1.69.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.69.0.tgz#a472011af392fbcf82cbb82f60b4c239c21b921c" + integrity sha512-RlzDAnGqUoo9wS6d4tthNyAdZLxOIddLiX3djMoWk29jFfSA1yJbIwr0epBYqqYarWB6s2Z+4VaZCQ80Jaa3kA== "@types/webpack-env@^1.16.0": version "1.17.0" @@ -6912,10 +7046,10 @@ confusing-browser-globals@^1.0.11: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.3: version "2.15.3" @@ -8551,10 +8685,10 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^3.1.1" -eslint@^8.18.0, eslint@^8.3.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== +eslint@^8.19.0, eslint@^8.3.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" @@ -13722,7 +13856,7 @@ postcss-lab-function@^4.2.0: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: +postcss-load-config@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== @@ -13730,6 +13864,14 @@ postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + postcss-loader@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" @@ -14862,10 +15004,10 @@ react-use@^17.4.0: ts-easing "^0.2.0" tslib "^2.1.0" -react-vega@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/react-vega/-/react-vega-7.5.1.tgz#574ada8b53aa8bdae61a286c1e0fb5a8efdbd064" - integrity sha512-pbcSrLsqmUP2+1v+/im99GdGompT0jJwJo9Cjq3QQ9URUYMuEEvfTCergEtfVRcBjC6bPTN6sLbe+8yQSqB4jg== +react-vega@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/react-vega/-/react-vega-7.6.0.tgz#b791c944046b20e02d366c7d0f8dcc21bdb4a6bb" + integrity sha512-2oMML4wH9qWLnZPRxJm06ozwrVN/K+nkjqdI5/ofWWsrBnnH4iB9rRKrsV8px0nlWgZrwfdCH4g5RUiyyJHWSA== dependencies: "@types/react" "*" fast-deep-equal "^3.1.1" @@ -15378,7 +15520,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -16628,10 +16770,10 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== -tailwindcss@^3.0.2, tailwindcss@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.4.tgz#64b09059805505902139fa805d97046080bd90b9" - integrity sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ== +tailwindcss@^3.0.2, tailwindcss@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.5.tgz#c8e0bb1cbacf29a6411d9c07debc1af9d388d4ca" + integrity sha512-bC/2dy3dGPqxMWAqFSRgQxVCfmO/31ZbeEp8s9DMDh4zgPZ5WW1gxRJkbBkXcTUIzaSUdhWrcsrSOe32ccgB4w== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -16649,12 +16791,12 @@ tailwindcss@^3.0.2, tailwindcss@^3.1.3: postcss "^8.4.14" postcss-import "^14.1.0" postcss-js "^4.0.0" - postcss-load-config "^3.1.4" + postcss-load-config "^4.0.1" postcss-nested "5.0.6" postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" - resolve "^1.22.0" + resolve "^1.22.1" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" @@ -18260,10 +18402,10 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" - integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== +webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -18277,7 +18419,7 @@ webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" + connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" @@ -18853,6 +18995,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" From d387b86dcf3f798b24303e63f3cf6ba2c88dde60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:47:49 +0000 Subject: [PATCH 39/60] :arrow_up: Bump framer-motion from 6.4.1 to 6.4.3 Bumps [framer-motion](https://github.com/framer/motion) from 6.4.1 to 6.4.3. - [Release notes](https://github.com/framer/motion/releases) - [Changelog](https://github.com/framer/motion/blob/main/CHANGELOG.md) - [Commits](https://github.com/framer/motion/compare/v6.4.1...v6.4.3) --- updated-dependencies: - dependency-name: framer-motion dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 8 +- yarn.lock | 331 ++++++++++++++++++++++--------- 2 files changed, 243 insertions(+), 96 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index f1feb773..f76d5ed4 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -9,7 +9,7 @@ "@quri/squiggle-lang": "^0.2.8", "@react-hook/size": "^2.1.2", "clsx": "^1.1.1", - "framer-motion": "^6.4.1", + "framer-motion": "^6.4.3", "lodash": "^4.17.21", "react": "^18.1.0", "react-ace": "^10.1.0", @@ -23,7 +23,7 @@ "yup": "^0.32.11" }, "devDependencies": { - "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", "@storybook/addon-actions": "^6.5.9", "@storybook/addon-essentials": "^6.5.9", "@storybook/addon-links": "^6.5.9", @@ -49,14 +49,14 @@ "react": "^18.1.0", "react-scripts": "^5.0.1", "style-loader": "^3.3.1", - "tailwindcss": "^3.1.3", + "tailwindcss": "^3.1.5", "ts-loader": "^9.3.0", "tsconfig-paths-webpack-plugin": "^3.5.2", "typescript": "^4.7.4", "web-vitals": "^2.1.4", "webpack": "^5.73.0", "webpack-cli": "^4.10.0", - "webpack-dev-server": "^4.9.2" + "webpack-dev-server": "^4.9.3" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18", diff --git a/yarn.lock b/yarn.lock index 64d20e4e..b32781d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -147,6 +147,13 @@ dependencies: "@babel/highlight" "^7.16.7" +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" @@ -213,12 +220,21 @@ "@jridgewell/gen-mapping" "^0.3.0" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/generator@^7.18.7": + version "7.18.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" + integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.7" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.16.7", "@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" @@ -238,18 +254,18 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== +"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": version "7.17.12" @@ -292,6 +308,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== +"@babel/helper-environment-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" + integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== + "@babel/helper-explode-assignable-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" @@ -307,6 +328,14 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.17.0" +"@babel/helper-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz#8334fecb0afba66e6d87a7e8c6bb7fed79926b83" + integrity sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-hoist-variables@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" @@ -314,6 +343,13 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-member-expression-to-functions@^7.17.7": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" @@ -321,6 +357,13 @@ dependencies: "@babel/types" "^7.17.0" +"@babel/helper-member-expression-to-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz#44802d7d602c285e1692db0bad9396d007be2afc" + integrity sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" @@ -349,15 +392,22 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" + integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" @@ -379,6 +429,17 @@ "@babel/traverse" "^7.18.2" "@babel/types" "^7.18.2" +"@babel/helper-replace-supers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" + integrity sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" @@ -400,11 +461,23 @@ dependencies: "@babel/types" "^7.16.7" +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" @@ -438,11 +511,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3", "@babel/parser@^7.18.5": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== +"@babel/parser@^7.18.6", "@babel/parser@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" + integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" @@ -598,14 +685,14 @@ "@babel/helper-create-class-features-plugin" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz#b02efb7f106d544667d91ae97405a9fd8c93952d" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12", "@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": @@ -1255,6 +1342,15 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" @@ -1271,6 +1367,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.8.tgz#f095e62ab46abf1da35e5a2011f43aee72d8d5b0" + integrity sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.8" + "@babel/types" "^7.18.8" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" @@ -1279,6 +1391,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.18.6", "@babel/types@^7.18.7", "@babel/types@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.8.tgz#c5af199951bf41ba4a6a9a6d0d8ad722b30cd42f" + integrity sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2165,6 +2285,15 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.7" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" @@ -2175,6 +2304,11 @@ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "@jridgewell/source-map@^0.3.2": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" @@ -2249,56 +2383,56 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@motionone/animation@^10.10.1": - version "10.10.1" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.10.1.tgz#d3d3ecb11c6d7507a104b080f31b07be9bc7056d" - integrity sha512-iX839/Ir5wT7hVX0yCZYjcDhHAOkVR5hIhVBTf37qEUD693uVwrxC2i1BI9vMVPc1rIoFtftYjOtwoO9Oq/aog== +"@motionone/animation@^10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.12.0.tgz#bca8968d3d9c779f8a548678f24206bd36cc60b6" + integrity sha512-SCWkVjMChQwA4Cnt1pdmhCi0OC4cAR+rqsskNEqmbgfG59zmn50TfOP6vgqjkYbaSZXXLeEb03Mez362jIEHRg== dependencies: - "@motionone/easing" "^10.9.0" - "@motionone/types" "^10.9.0" - "@motionone/utils" "^10.9.0" + "@motionone/easing" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" tslib "^2.3.1" -"@motionone/dom@^10.11.0": - version "10.11.0" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.11.0.tgz#dc2e46b0e21044cc9ae89a994cd6725eac09e48b" - integrity sha512-ST56HBslkeoeDwqRFWafkD+JT5FEwlHqB2K2KGaQh6wo6zfKQ9xwjQcqgDiBv2gg6s8ycjHAdFS6dnMHQ5hXKw== +"@motionone/dom@^10.11.1": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" + integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== dependencies: - "@motionone/animation" "^10.10.1" - "@motionone/generators" "^10.9.0" - "@motionone/types" "^10.9.0" - "@motionone/utils" "^10.9.0" + "@motionone/animation" "^10.12.0" + "@motionone/generators" "^10.12.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" hey-listen "^1.0.8" tslib "^2.3.1" -"@motionone/easing@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.9.0.tgz#42910c70dd30e1bbba27a9612ce03bca022d0da7" - integrity sha512-FYIr3HlQEb7aE5LOpY6BPQUaPyKeJt6VfGA+npy73+JIGqoVOjbrdZ1ZQxzTXqO76mG3UZvv1+twrDamRQsxFw== +"@motionone/easing@^10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.12.0.tgz#cc10a00ed5ec9a7a05daf4ef985fcd14840b9a50" + integrity sha512-kdwcn1ja/0//BBHRElX3In1yfqMEhqUoL3G0njDan8R+gfPy3DanyuCtio4VruHQ1m3XN3LcrqavbClzcGo7IA== dependencies: - "@motionone/utils" "^10.9.0" + "@motionone/utils" "^10.12.0" tslib "^2.3.1" -"@motionone/generators@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.9.0.tgz#46f3e706f45a9566db7e0ce62d677c884813cdaa" - integrity sha512-BOkHx4qQswJV+z/6k05qdvRENE4hG606NI5cIPTsLtSuksnRn83utuj/15VTNoFeYHuTdhwzxvIPvlPVayIGTg== +"@motionone/generators@^10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.12.0.tgz#2a175c47c741ed3864dd834e6c98efa68798a866" + integrity sha512-QM8/ndOve80HLXImChwW8ogrEM/8m9xzZEl2Ci2ep1uGLAQ+ADiwzKtl11inGESrxiFDrUdD12WXacCn+y172Q== dependencies: - "@motionone/types" "^10.9.0" - "@motionone/utils" "^10.9.0" + "@motionone/types" "^10.12.0" + "@motionone/utils" "^10.12.0" tslib "^2.3.1" -"@motionone/types@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.9.0.tgz#7caa9c1b746dd30bcf6104ce9c82a5a928385da2" - integrity sha512-ZcEDfsrS2ym9+vExV7+59avkzEO/PLkNj16uaDvbWhi0Q/vOZ72j2LQTrtDLWVyZRIeUaB/i8DJP017Gj6UYQw== +"@motionone/types@^10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.12.0.tgz#06ede843d4c2990edbd22ecf8d5568d1fcd1f105" + integrity sha512-D9k7ijkAT6JJOCMUVn9IgJqWolp7N3oBbWRQTIRGGO41Bmr/JzLv4GzAb00PvkYAzZX+BpnSTKqXI19zrSjC5w== -"@motionone/utils@^10.9.0": - version "10.9.0" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.9.0.tgz#a68fe41fe37e4365b07dfc676f014a0e43b8beb2" - integrity sha512-5IgmwQ8TdH1HsQ9d2QZeBCu9+HkqjoYRYItRpmusoyiedPMZaKdU3pr3qFP5nbAj68Ww2sTUxgEZEOF20qJA6w== +"@motionone/utils@^10.12.0": + version "10.12.0" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.12.0.tgz#e8432a96bb7f91148987d0baaab6653ae727f9ee" + integrity sha512-2g3tCqYYwb/tgzCDRbILbD5edXJB45HV51NbnhwKVOOl0PhFraRDtehzLKo9wLHdaTnO/IjVn6cHQsw6RjdolA== dependencies: - "@motionone/types" "^10.9.0" + "@motionone/types" "^10.12.0" hey-listen "^1.0.8" tslib "^2.3.1" @@ -4524,10 +4658,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/vscode@^1.68.0": - version "1.68.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.68.0.tgz#c0864e4ea43c509bfc6b53f4e91aa923fd0475b8" - integrity sha512-duBwEK5ta/eBBMJMQ7ECMEsMvlE3XJdRGh3xoS1uOO4jl2Z4LPBl5vx8WvBP10ERAgDRmIt/FaSD4RHyBGbChw== +"@types/vscode@^1.69.0": + version "1.69.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.69.0.tgz#a472011af392fbcf82cbb82f60b4c239c21b921c" + integrity sha512-RlzDAnGqUoo9wS6d4tthNyAdZLxOIddLiX3djMoWk29jFfSA1yJbIwr0epBYqqYarWB6s2Z+4VaZCQ80Jaa3kA== "@types/webpack-env@^1.16.0": version "1.17.0" @@ -6912,10 +7046,10 @@ confusing-browser-globals@^1.0.11: resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^2.15.3: version "2.15.3" @@ -8551,10 +8685,10 @@ eslint-webpack-plugin@^3.1.1: normalize-path "^3.0.0" schema-utils "^3.1.1" -eslint@^8.18.0, eslint@^8.3.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" - integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== +eslint@^8.19.0, eslint@^8.3.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.19.0.tgz#7342a3cbc4fbc5c106a1eefe0fd0b50b6b1a7d28" + integrity sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" @@ -9214,12 +9348,12 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -framer-motion@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.4.1.tgz#d351a96d80bea5736af4175e6307bc63bb4daed1" - integrity sha512-JiVnG3p0mO9yWxjNx3xxJaKP4hTWdm6oIbzfMJZEMtoOahSNoDTRZA/mFPzfVNj2foKwFPOLFv/lw8UUZjyUqA== +framer-motion@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.4.3.tgz#1d60f352ccc2840b0302c35c0993d972da550d03" + integrity sha512-prcyOGFkGjwGEgbxObIWteVz1ihuWaDLdR03626cbA1GxTaPRpLb8ioJfWPmP5mwcWC7TlhMOjS5kBYnuiktFA== dependencies: - "@motionone/dom" "^10.11.0" + "@motionone/dom" "^10.11.1" framesync "6.0.1" hey-listen "^1.0.8" popmotion "11.0.3" @@ -13722,7 +13856,7 @@ postcss-lab-function@^4.2.0: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: +postcss-load-config@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== @@ -13730,6 +13864,14 @@ postcss-load-config@^3.0.0, postcss-load-config@^3.1.4: lilconfig "^2.0.5" yaml "^1.10.2" +postcss-load-config@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" + integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== + dependencies: + lilconfig "^2.0.5" + yaml "^2.1.1" + postcss-loader@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-4.3.0.tgz#2c4de9657cd4f07af5ab42bd60a673004da1b8cc" @@ -15378,7 +15520,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.3.2, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -16628,10 +16770,10 @@ synchronous-promise@^2.0.15: resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz#07ca1822b9de0001f5ff73595f3d08c4f720eb8e" integrity sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg== -tailwindcss@^3.0.2, tailwindcss@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.4.tgz#64b09059805505902139fa805d97046080bd90b9" - integrity sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ== +tailwindcss@^3.0.2, tailwindcss@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.5.tgz#c8e0bb1cbacf29a6411d9c07debc1af9d388d4ca" + integrity sha512-bC/2dy3dGPqxMWAqFSRgQxVCfmO/31ZbeEp8s9DMDh4zgPZ5WW1gxRJkbBkXcTUIzaSUdhWrcsrSOe32ccgB4w== dependencies: arg "^5.0.2" chokidar "^3.5.3" @@ -16649,12 +16791,12 @@ tailwindcss@^3.0.2, tailwindcss@^3.1.3: postcss "^8.4.14" postcss-import "^14.1.0" postcss-js "^4.0.0" - postcss-load-config "^3.1.4" + postcss-load-config "^4.0.1" postcss-nested "5.0.6" postcss-selector-parser "^6.0.10" postcss-value-parser "^4.2.0" quick-lru "^5.1.1" - resolve "^1.22.0" + resolve "^1.22.1" tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" @@ -18260,10 +18402,10 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.2.tgz#c188db28c7bff12f87deda2a5595679ebbc3c9bc" - integrity sha512-H95Ns95dP24ZsEzO6G9iT+PNw4Q7ltll1GfJHV4fKphuHWgKFzGHWi4alTlTnpk1SPPk41X+l2RB7rLfIhnB9Q== +webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -18277,7 +18419,7 @@ webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.2: chokidar "^3.5.3" colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" + connect-history-api-fallback "^2.0.0" default-gateway "^6.0.3" express "^4.17.3" graceful-fs "^4.2.6" @@ -18853,6 +18995,11 @@ yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" From f0afcc4a6647c45c308715a9fec03200456fb06b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:50:34 +0000 Subject: [PATCH 40/60] :arrow_up: Bump @typescript-eslint/parser from 5.30.4 to 5.30.5 Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.30.4 to 5.30.5. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.30.5/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 48 +++++--------------------------- 2 files changed, 8 insertions(+), 42 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index 46b858f3..a28711fe 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -140,7 +140,7 @@ "@types/node": "18.x", "@types/vscode": "^1.69.0", "@typescript-eslint/eslint-plugin": "^5.30.5", - "@typescript-eslint/parser": "^5.30.4", + "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", "glob": "^8.0.3", "js-yaml": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 1519df2a..da9267fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4753,14 +4753,14 @@ dependencies: "@typescript-eslint/utils" "5.29.0" -"@typescript-eslint/parser@^5.30.4", "@typescript-eslint/parser@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" - integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== +"@typescript-eslint/parser@^5.30.5", "@typescript-eslint/parser@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" + integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" debug "^4.3.4" "@typescript-eslint/scope-manager@5.29.0": @@ -4771,14 +4771,6 @@ "@typescript-eslint/types" "5.29.0" "@typescript-eslint/visitor-keys" "5.29.0" -"@typescript-eslint/scope-manager@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" - integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== - dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" - "@typescript-eslint/scope-manager@5.30.5": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" @@ -4801,11 +4793,6 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== -"@typescript-eslint/types@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" - integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== - "@typescript-eslint/types@5.30.5": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" @@ -4824,19 +4811,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" - integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== - dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.30.5": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" @@ -4882,14 +4856,6 @@ "@typescript-eslint/types" "5.29.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" - integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== - dependencies: - "@typescript-eslint/types" "5.30.4" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.30.5": version "5.30.5" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" From 5e4f99f5a16b3d0c30e8db366b72d5496e9a4ff9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:00:08 +0000 Subject: [PATCH 41/60] :arrow_up: Bump @docusaurus/core from 2.0.0-beta.21 to 2.0.0-beta.22 Bumps [@docusaurus/core](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus) from 2.0.0-beta.21 to 2.0.0-beta.22. - [Release notes](https://github.com/facebook/docusaurus/releases) - [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/docusaurus/commits/v2.0.0-beta.22/packages/docusaurus) --- updated-dependencies: - dependency-name: "@docusaurus/core" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/website/package.json | 2 +- yarn.lock | 1298 +++++++++++++++++++++------------ 2 files changed, 841 insertions(+), 459 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 5369fa96..e6836726 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -12,7 +12,7 @@ "format": "prettier --write ." }, "dependencies": { - "@docusaurus/core": "2.0.0-beta.21", + "@docusaurus/core": "2.0.0-beta.22", "@docusaurus/preset-classic": "2.0.0-beta.21", "@quri/squiggle-components": "^0.2.20", "base64-js": "^1.5.1", diff --git a/yarn.lock b/yarn.lock index e1536d81..00a90016 100644 --- a/yarn.lock +++ b/yarn.lock @@ -159,6 +159,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.5.tgz#acac0c839e317038c73137fbb6ef71a1d6238471" integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== +"@babel/compat-data@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -181,21 +186,21 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.18.2", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" - integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.18.2", "@babel/core@^7.18.6", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" + integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== dependencies: "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.5" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.5" - "@babel/types" "^7.18.4" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helpers" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -211,16 +216,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.2", "@babel/generator@^7.7.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== - dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/generator@^7.18.7": +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.2", "@babel/generator@^7.18.6", "@babel/generator@^7.18.7", "@babel/generator@^7.7.2": version "7.18.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== @@ -236,15 +232,15 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz#f14d640ed1ee9246fb33b8255f08353acfe70e6a" + integrity sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.17.10": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== @@ -254,6 +250,16 @@ browserslist "^4.20.2" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz#18d35bfb9f83b1293c22c55b3d576c1315b6ed96" + integrity sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0", "@babel/helper-create-class-features-plugin@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz#6f15f8459f3b523b39e00a99982e2c040871ed72" @@ -275,6 +281,14 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -313,14 +327,14 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz#b7eee2b5b9d70602e59d1a6cad7dd24de7ca6cd7" integrity sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q== -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.18.6" -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": +"@babel/helper-function-name@^7.17.9": version "7.17.9" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== @@ -336,13 +350,6 @@ "@babel/template" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -371,7 +378,14 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.0": +"@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.12.1": version "7.18.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== @@ -385,6 +399,20 @@ "@babel/traverse" "^7.18.0" "@babel/types" "^7.18.0" +"@babel/helper-module-transforms@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz#4f8408afead0188cfa48672f9d0e5787b61778c8" + integrity sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@babel/types" "^7.18.8" + "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" @@ -409,16 +437,17 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz#9448974dd4fb1d80fefe72e8a0af37809cd30d6d" integrity sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg== -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz#fa1f81acd19daee9d73de297c0308783cd3cfc23" + integrity sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-wrap-function" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": +"@babel/helper-replace-supers@^7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== @@ -440,13 +469,20 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": +"@babel/helper-simple-access@^7.17.7": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== dependencies: "@babel/types" "^7.18.2" +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -454,6 +490,13 @@ dependencies: "@babel/types" "^7.16.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz#7dff00a5320ca4cf63270e5a0eca4b268b7380d9" + integrity sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw== + dependencies: + "@babel/types" "^7.18.6" + "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" @@ -483,17 +526,22 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helpers@^7.12.5", "@babel/helpers@^7.18.2": +"@babel/helper-wrap-function@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz#ec44ea4ad9d8988b90c3e465ba2382f4de81a073" + integrity sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw== + dependencies: + "@babel/helper-function-name" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helpers@^7.12.5": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== @@ -502,6 +550,15 @@ "@babel/traverse" "^7.18.2" "@babel/types" "^7.18.2" +"@babel/helpers@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.6.tgz#4c966140eaa1fcaa3d5a8c09d7db61077d4debfd" + integrity sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + "@babel/highlight@^7.16.7": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" @@ -520,7 +577,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3", "@babel/parser@^7.18.5": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== @@ -530,32 +587,33 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.8.tgz#822146080ac9c62dac0823bb3489622e0bc1cbdf" integrity sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz#1dca338caaefca368639c9ffb095afbd4d420b1e" - integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz#0d498ec8f0374b1e2eb54b9cb2c4c78714c77753" - integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz#b4e4dbc2cd1acd0133479918f7c6412961c9adb8" + integrity sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" -"@babel/plugin-proposal-async-generator-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz#094a417e31ce7e692d84bab06c8e2a607cbeef03" - integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.17.12": +"@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz#84f65c0cc247d46f40a6da99aadd6438315d80a4" integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== @@ -563,13 +621,21 @@ "@babel/helper-create-class-features-plugin" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-class-static-block@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz#7d02253156e3c3793bdb9f2faac3a1c05f0ba710" - integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz#8aa81d403ab72d3962fc06c26e222dacfc9b9020" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.12.12", "@babel/plugin-proposal-decorators@^7.16.4": @@ -584,12 +650,12 @@ "@babel/plugin-syntax-decorators" "^7.17.12" charcodes "^0.2.0" -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-default-from@^7.12.1": @@ -600,31 +666,31 @@ "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-export-default-from" "^7.16.7" -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz#b22864ccd662db9606edb2287ea5fd1709f05378" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== +"@babel/plugin-proposal-export-namespace-from@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz#1016f0aa5ab383bbf8b3a85a2dcaedf6c8ee7491" + integrity sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz#f4642951792437233216d8c1af370bb0fbff4664" - integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz#c64a1bcb2b0a6d0ed2ff674fd120f90ee4b88a23" - integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz#3b9cac6f1ffc2aa459d111df80c12020dfc6b665" + integrity sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz#1e93079bbc2cbc756f6db6a1925157c4a92b94be" integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== @@ -632,7 +698,15 @@ "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0", "@babel/plugin-proposal-numeric-separator@^7.16.7": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== @@ -640,6 +714,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" @@ -649,7 +731,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.18.0": +"@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.18.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz#79f2390c892ba2a68ec112eb0d895cfbd11155e8" integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== @@ -660,15 +742,26 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.17.12" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== +"@babel/plugin-proposal-object-rest-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz#ec93bba06bfb3e15ebd7da73e953d84b094d5daf" + integrity sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.6" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.17.12": +"@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.16.0": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz#f96949e9bacace3a9066323a5cf90cfb9de67174" integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== @@ -677,7 +770,16 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.16.0", "@babel/plugin-proposal-private-methods@^7.17.12": +"@babel/plugin-proposal-optional-chaining@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz#46d4f2ffc20e87fad1d98bc4fa5d466366f6aa0b" + integrity sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.16.0": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz#c2ca3a80beb7539289938da005ad525a038a819c" integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== @@ -685,7 +787,15 @@ "@babel/helper-create-class-features-plugin" "^7.17.12" "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.17.12", "@babel/plugin-proposal-private-property-in-object@^7.18.6": +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.12.1", "@babel/plugin-proposal-private-property-in-object@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz#a64137b232f0aca3733a67eb1a144c192389c503" integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== @@ -695,7 +805,15 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz#3dbd7a67bd7f94c8238b394da112d86aaf32ad4d" integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== @@ -766,12 +884,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-syntax-import-assertions@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz#58096a92b11b2e4e54b24c6a0cc0e5e607abcedd" - integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz#cd6190500a4fa2fe31990a963ffab4b63e4505e4" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -801,6 +919,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" +"@babel/plugin-syntax-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" + integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -857,44 +982,65 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.17.12", "@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-typescript@^7.7.2": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz#b54fc3be6de734a56b87508f99d6428b5b605a7b" integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.17.12": +"@babel/plugin-transform-arrow-functions@^7.12.1": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz#dddd783b473b1b1537ef46423e3944ff24898c45" integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-async-to-generator@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz#dbe5511e6b01eee1496c944e35cdfe3f58050832" - integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz#19063fcf8771ec7b31d742339dac62433d0611fe" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz#ccda3d1ab9d5ced5265fdb13f1882d5476c71615" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" -"@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.17.12": +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.12.12": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz#7988627b3e9186a13e4d7735dc9c34a056613fb9" integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.17.12": +"@babel/plugin-transform-block-scoping@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz#b5f78318914615397d86a731ef2cc668796a726c" + integrity sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-classes@^7.12.1": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz#51310b812a090b846c784e47087fa6457baef814" integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== @@ -908,21 +1054,50 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz#bca616a83679698f3258e892ed422546e531387f" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== +"@babel/plugin-transform-classes@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz#7e85777e622e979c85c701a095280360b818ce49" + integrity sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" -"@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.18.0": +"@babel/plugin-transform-computed-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz#5d15eb90e22e69604f3348344c91165c5395d032" + integrity sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-destructuring@^7.12.1": version "7.18.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz#dc4f92587e291b4daa78aa20cc2d7a63aa11e858" integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-destructuring@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz#a98b0e42c7ffbf5eefcbcf33280430f230895c6f" + integrity sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-dotall-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== @@ -930,20 +1105,20 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz#a09aa709a3310013f8e48e0e23bc7ace0f21477c" - integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== +"@babel/plugin-transform-duplicate-keys@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz#e6c94e8cd3c9dd8a88144f7b78ae22975a7ff473" + integrity sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-flow-strip-types@^7.16.0", "@babel/plugin-transform-flow-strip-types@^7.17.12": version "7.17.12" @@ -953,96 +1128,103 @@ "@babel/helper-plugin-utils" "^7.17.12" "@babel/plugin-syntax-flow" "^7.17.12" -"@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.18.1": +"@babel/plugin-transform-for-of@^7.12.1": version "7.18.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz#ed14b657e162b72afbbb2b4cdad277bf2bb32036" integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-for-of@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-literals@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz#97131fbc6bbb261487105b4b3edbf9ebf9c830ae" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== +"@babel/plugin-transform-function-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz#6a7e4ae2893d336fd1b8f64c9f92276391d0f1b4" + integrity sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz#9d6af353b5209df72960baf4492722d56f39a205" + integrity sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-modules-amd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz#7ef1002e67e36da3155edc8bf1ac9398064c02ed" - integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz#8c91f8c5115d2202f277549848874027d7172d21" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz#1aa8efa2e2a6e818b6a7f2235fceaf09bdb31e9e" - integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz#afd243afba166cca69892e24a8fd8c9f2ca87883" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.18.2" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.18.0": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz#87f11c44fbfd3657be000d4897e192d9cb535996" - integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== +"@babel/plugin-transform-modules-systemjs@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz#026511b7657d63bf5d4cf2fd4aeb963139914a54" + integrity sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-identifier" "^7.16.7" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz#56aac64a2c2a1922341129a4597d1fd5c3ff020f" - integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz#9c4a5a5966e0434d515f2675c227fd8cc8606931" - integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz#c89bfbc7cc6805d692f3a49bc5fc1b630007246d" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-new-target@^7.17.12": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz#8c228c4a07501dd12c95c5f23d1622131cc23931" - integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.17.12": version "7.17.12" @@ -1051,12 +1233,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-parameters@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz#ee9f1a0ce6d78af58d0956a9378ea3427cccb48a" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.14.5": version "7.17.12" @@ -1065,21 +1254,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.16.7": +"@babel/plugin-transform-react-display-name@^7.16.0": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.12.12": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz#2aa20022709cd6a3f40b45d60603d5f269586dba" integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== @@ -1090,49 +1286,67 @@ "@babel/plugin-syntax-jsx" "^7.17.12" "@babel/types" "^7.17.12" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz#ef82c8e310913f3522462c9ac967d395092f1954" - integrity sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ== +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" + integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.18.6" -"@babel/plugin-transform-regenerator@^7.18.0": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz#44274d655eb3f1af3f3a574ba819d3f48caf99d5" - integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz#585c66cb84d4b4bf72519a34cfce761b8676ca73" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" regenerator-transform "^0.15.0" -"@babel/plugin-transform-reserved-words@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz#7dbd349f3cdffba751e817cf40ca1386732f652f" - integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.16.4", "@babel/plugin-transform-runtime@^7.18.2": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.5.tgz#f4d3188ba6a8815793993c71c2c225d0ee1d7743" - integrity sha512-Q17hHxXr2fplrE+5BSC1j1Fo5cOA8YeP8XW3/1paI8MzF/faZGh0MaH1KC4jLAvqLPamQWHB5/B7KqSLY1kuHA== +"@babel/plugin-transform-runtime@^7.16.4", "@babel/plugin-transform-runtime@^7.18.2", "@babel/plugin-transform-runtime@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" + integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.16.7": +"@babel/plugin-transform-shorthand-properties@^7.12.1": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.17.12": +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.12.1": version "7.17.12" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz#c112cad3064299f03ea32afed1d659223935d1f5" integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== @@ -1140,83 +1354,98 @@ "@babel/helper-plugin-utils" "^7.17.12" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== +"@babel/plugin-transform-spread@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz#82b080241965f1689f0a60ecc6f1f6575dbdb9d6" + integrity sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.6" -"@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.18.2": +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.12.1": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz#31ed6915721864847c48b656281d0098ea1add28" integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== dependencies: "@babel/helper-plugin-utils" "^7.17.12" -"@babel/plugin-transform-typeof-symbol@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz#0f12f57ac35e98b35b4ed34829948d42bd0e6889" - integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== +"@babel/plugin-transform-template-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz#b763f4dc9d11a7cce58cf9a490d82e80547db9c2" + integrity sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-typescript@^7.17.12": - version "7.18.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz#587eaf6a39edb8c06215e550dc939faeadd750bf" - integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== +"@babel/plugin-transform-typeof-symbol@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz#486bb39d5a18047358e0d04dc0d2f322f0b92e92" + integrity sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-typescript" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz#303feb7a920e650f2213ef37b36bbf327e6fa5a0" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.18.2": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.2.tgz#f47d3000a098617926e674c945d95a28cb90977a" - integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-async-generator-functions" "^7.17.12" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/plugin-proposal-class-static-block" "^7.18.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.17.12" - "@babel/plugin-proposal-json-strings" "^7.17.12" - "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.18.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-private-methods" "^7.17.12" - "@babel/plugin-proposal-private-property-in-object" "^7.17.12" - "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" + integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== + dependencies: + "@babel/compat-data" "^7.18.6" + "@babel/helper-compilation-targets" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.6" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.6" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.6" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.6" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-import-assertions" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1226,43 +1455,43 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.17.12" - "@babel/plugin-transform-async-to-generator" "^7.17.12" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.17.12" - "@babel/plugin-transform-classes" "^7.17.12" - "@babel/plugin-transform-computed-properties" "^7.17.12" - "@babel/plugin-transform-destructuring" "^7.18.0" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.17.12" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.18.1" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.17.12" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.18.0" - "@babel/plugin-transform-modules-commonjs" "^7.18.2" - "@babel/plugin-transform-modules-systemjs" "^7.18.0" - "@babel/plugin-transform-modules-umd" "^7.18.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" - "@babel/plugin-transform-new-target" "^7.17.12" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.17.12" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.18.0" - "@babel/plugin-transform-reserved-words" "^7.17.12" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.17.12" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.18.2" - "@babel/plugin-transform-typeof-symbol" "^7.17.12" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.6" + "@babel/plugin-transform-classes" "^7.18.6" + "@babel/plugin-transform-computed-properties" "^7.18.6" + "@babel/plugin-transform-destructuring" "^7.18.6" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.6" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.6" + "@babel/plugin-transform-function-name" "^7.18.6" + "@babel/plugin-transform-literals" "^7.18.6" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.6" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.6" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.6" + "@babel/plugin-transform-typeof-symbol" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.2" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" + "@babel/types" "^7.18.6" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1286,26 +1515,26 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.17.12.tgz#62adbd2d1870c0de3893095757ed5b00b492ab3d" - integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== +"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.17.12" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@^7.12.7", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.17.12": - version "7.17.12" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz#40269e0a0084d56fc5731b6c40febe1c9a4a3e8c" - integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== +"@babel/preset-typescript@^7.12.7", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.17.12" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" "@babel/register@^7.12.1": version "7.17.7" @@ -1318,10 +1547,10 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.18.3": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.3.tgz#52f0241a31e0ec61a6187530af6227c2846bd60c" - integrity sha512-l4ddFwrc9rnR+EJsHsh+TJ4A35YqQz/UqcjtlX2ov53hlJYG5CxtQmNZxyajwDVmCxwy++rtvGU5HazCK4W41Q== +"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.18.3", "@babel/runtime-corejs3@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz#6f02c5536911f4b445946a2179554b95c8838635" + integrity sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw== dependencies: core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" @@ -1351,23 +1580,7 @@ "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.7.2": - version "7.18.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.5.tgz#94a8195ad9642801837988ab77f36e992d9a20cd" - integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.5" - "@babel/types" "^7.18.4" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.18.6": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.12.11", "@babel/traverse@^7.12.9", "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.8", "@babel/traverse@^7.7.2": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.8.tgz#f095e62ab46abf1da35e5a2011f43aee72d8d5b0" integrity sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg== @@ -1383,7 +1596,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.12.11", "@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.18.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== @@ -1623,6 +1836,83 @@ webpack-merge "^5.8.0" webpackbar "^5.0.2" +"@docusaurus/core@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.22.tgz#72430b817571e2d7354012523bcaefc99fe4e004" + integrity sha512-8KU56anfNo6V6crZG+K/zPKvyAAosZcWfkeNYWu14BzigRbBirJf7ZLRkkLa1NgDdJt3EEBgg+Iv8olPMC1uog== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@docusaurus/cssnano-preset" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + "@docusaurus/cssnano-preset@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz#38113877a5857c3f9d493522085d20909dcec474" @@ -1633,6 +1923,16 @@ postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" +"@docusaurus/cssnano-preset@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.22.tgz#dc3491a452fb66569261801c67e00a1bb8b7dce1" + integrity sha512-ewImLASzPD2dRQLhNdBA5AyckkPDqZPMMrQiuDpe4BgfbjROJWLjVzjMbQRdrB2UQPwm9HyE6/+gP55KNISKvQ== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + "@docusaurus/logger@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz#f6ab4133917965349ae03fd9111a940b24d4fd12" @@ -1641,6 +1941,14 @@ chalk "^4.1.2" tslib "^2.4.0" +"@docusaurus/logger@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.22.tgz#dd328d8cddd947c2211fd20ae91f5921b6c70f82" + integrity sha512-Gg6So3GYbFi6pyn5YrFS8lNST90f2sNrBTu/mAo2nDU391vIJ3bDkNfHNi4plz9TyCGxxx8BgOExh6x3xGJhMg== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + "@docusaurus/mdx-loader@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz#52af341e21f22be882d2155a7349bea10f5d77a3" @@ -1663,6 +1971,29 @@ url-loader "^4.1.1" webpack "^5.72.1" +"@docusaurus/mdx-loader@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.22.tgz#7a015c161a4c40300fe99bde7dc0a6ada094d45f" + integrity sha512-kJT3zsHQTfMFSHlNohw0C4VJjKC2cox6navbMRJM4mZUm+wj0YDE2/WAcwYB8abM1AZkgJvAMZnxynq6vUZxhw== + dependencies: + "@babel/parser" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + "@docusaurus/module-type-aliases@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz#345f1c1a99407775d1d3ffc1a90c2df93d50a9b8" @@ -1890,6 +2221,13 @@ dependencies: tslib "^2.4.0" +"@docusaurus/utils-common@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.22.tgz#c3c4365be9d2003917d24393f9ad9678fb6388a1" + integrity sha512-yQM1wPUUqoDCJy0cOFWtUsqxY3utL0E14T4NDtCcdc2Einsl1mamKIaBVpt9SMZugMVXbc/z4IQK8YC81CuXEw== + dependencies: + tslib "^2.4.0" + "@docusaurus/utils-validation@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz#10169661be5f8a233f4c12202ee5802ccb77400f" @@ -1901,6 +2239,17 @@ js-yaml "^4.1.0" tslib "^2.4.0" +"@docusaurus/utils-validation@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.22.tgz#517320e317dbc35ffe538eb586817929ebdb588c" + integrity sha512-sW2jrYvhvkh8PjjZzWFyqGs7tlls3F2FgOOj79T9rGj8y+b4a6sRjl8+QgXITjypcQWssCg0wqf6xSXD+LSD/Q== + dependencies: + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + "@docusaurus/utils@2.0.0-beta.21": version "2.0.0-beta.21" resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz#8fc4499c4cfedd29805025d930f8008cad255044" @@ -1922,6 +2271,27 @@ url-loader "^4.1.1" webpack "^5.72.1" +"@docusaurus/utils@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.22.tgz#4d66df9534419cc5cf2307581bab998541b8b7f2" + integrity sha512-ZwtfJl9n+dMBrdIl1DX9DyO9odMV6+1yqbJkdPrfNSLd17fYZK7HGcwQOem7QIEcJjnroUGrsQoKW8Svg3dQJg== + dependencies: + "@docusaurus/logger" "2.0.0-beta.22" + "@svgr/webpack" "^6.2.1" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + "@emotion/is-prop-valid@^0.8.2": version "0.8.8" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" @@ -1974,10 +2344,10 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@headlessui/react@^1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.5.tgz#5587c537de809cf3146eb2ff263e5e940b1bf69c" - integrity sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg== +"@headlessui/react@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.6.tgz#3073c066b85535c9d28783da0a4d9288b5354d0c" + integrity sha512-MFJtmj9Xh/hhBMhLccGbBoSk+sk61BlP6sJe4uQcVMtXZhCgGqd2GyIQzzmsdPdTEWGSF434CBi8mnhR6um46Q== "@heroicons/react@^1.0.6": version "1.0.6" @@ -2628,7 +2998,7 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@slorber/static-site-generator-webpack-plugin@^4.0.4": +"@slorber/static-site-generator-webpack-plugin@^4.0.4", "@slorber/static-site-generator-webpack-plugin@^4.0.7": version "4.0.7" resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== @@ -4731,14 +5101,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.30.4", "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" - integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== +"@typescript-eslint/eslint-plugin@^5.30.5", "@typescript-eslint/eslint-plugin@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d" + integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/type-utils" "5.30.4" - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/type-utils" "5.30.5" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -4753,14 +5123,14 @@ dependencies: "@typescript-eslint/utils" "5.29.0" -"@typescript-eslint/parser@^5.30.4", "@typescript-eslint/parser@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" - integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== +"@typescript-eslint/parser@^5.30.5", "@typescript-eslint/parser@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" + integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" debug "^4.3.4" "@typescript-eslint/scope-manager@5.29.0": @@ -4771,20 +5141,20 @@ "@typescript-eslint/types" "5.29.0" "@typescript-eslint/visitor-keys" "5.29.0" -"@typescript-eslint/scope-manager@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" - integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== +"@typescript-eslint/scope-manager@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" + integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" -"@typescript-eslint/type-utils@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" - integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== +"@typescript-eslint/type-utils@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9" + integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw== dependencies: - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" tsutils "^3.21.0" @@ -4793,10 +5163,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== -"@typescript-eslint/types@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" - integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== +"@typescript-eslint/types@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" + integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== "@typescript-eslint/typescript-estree@5.29.0": version "5.29.0" @@ -4811,13 +5181,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" - integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== +"@typescript-eslint/typescript-estree@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" + integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -4836,15 +5206,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.30.4", "@typescript-eslint/utils@^5.13.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" - integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== +"@typescript-eslint/utils@5.30.5", "@typescript-eslint/utils@^5.13.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765" + integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -4856,12 +5226,12 @@ "@typescript-eslint/types" "5.29.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" - integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== +"@typescript-eslint/visitor-keys@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" + integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA== dependencies: - "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": @@ -5864,7 +6234,7 @@ babel-plugin-named-exports-order@^0.0.2: resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09" integrity sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== -babel-plugin-polyfill-corejs2@^0.3.0: +babel-plugin-polyfill-corejs2@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== @@ -5881,7 +6251,7 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" -babel-plugin-polyfill-corejs3@^0.5.0: +babel-plugin-polyfill-corejs3@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== @@ -5889,7 +6259,7 @@ babel-plugin-polyfill-corejs3@^0.5.0: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0: +babel-plugin-polyfill-regenerator@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== @@ -7164,10 +7534,10 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.0.4, core-js@^3.19.2, core-js@^3.22.7, core-js@^3.6.5, core-js@^3.8.2: - version "3.23.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.2.tgz#e07a60ca8b14dd129cabdc3d2551baf5a01c76f0" - integrity sha512-ELJOWxNrJfOH/WK4VJ3Qd+fOqZuOuDNDJz0xG6Bt4mGg2eO/UT9CljCrbqDGovjLKUrGajEEBcoTOc0w+yBYeQ== +core-js@^3.0.4, core-js@^3.19.2, core-js@^3.22.7, core-js@^3.23.3, core-js@^3.6.5, core-js@^3.8.2: + version "3.23.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.4.tgz#92d640faa7f48b90bbd5da239986602cfc402aa6" + integrity sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ== core-util-is@~1.0.0: version "1.0.3" @@ -7505,7 +7875,7 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.5: +cssnano-preset-advanced@^5.3.5, cssnano-preset-advanced@^5.3.8: version "5.3.8" resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== @@ -7557,7 +7927,7 @@ cssnano-utils@^3.1.0: resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^5.0.6, cssnano@^5.1.8, cssnano@^5.1.9: +cssnano@^5.0.6, cssnano@^5.1.12, cssnano@^5.1.8, cssnano@^5.1.9: version "5.1.12" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c" integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== @@ -14812,10 +15182,10 @@ react-helmet-async@*, react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" -react-hook-form@^7.33.0: - version "7.33.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.0.tgz#44a87ddd630f00ebeb0f15aa978f69ca74b8a77b" - integrity sha512-h8XoeUHQs1Snx1s/sSvM+eVTSKkWQt8TcrbL+3/Rt5gugxpy4ueL5ZZkubffyNpUyyTz0qM0kwOi2c+JgGTjLA== +react-hook-form@^7.33.1: + version "7.33.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0" + integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg== react-inspector@^5.1.0: version "5.1.1" @@ -15233,6 +15603,18 @@ regexpu-core@^5.0.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + registry-auth-token@^4.0.0: version "4.2.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" @@ -16898,7 +17280,7 @@ terser-webpack-plugin@^4.2.3: terser "^5.3.4" webpack-sources "^1.4.3" -terser-webpack-plugin@^5.0.3, terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.1: +terser-webpack-plugin@^5.0.3, terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== @@ -17416,7 +17798,7 @@ unified@^8.4.2: trough "^1.0.0" vfile "^4.0.0" -unified@^9.0.0: +unified@^9.0.0, unified@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== From 6bd584a36a4af99ad2dcf8baa4a5c3e65f44436c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:01:07 +0000 Subject: [PATCH 42/60] :arrow_up: Bump @types/node from 18.0.0 to 18.0.3 Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.0.0 to 18.0.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 6 +- yarn.lock | 118 +++++++++++++++---------------- 2 files changed, 62 insertions(+), 62 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index b9e51f49..82a3f71f 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -3,7 +3,7 @@ "version": "0.2.20", "license": "MIT", "dependencies": { - "@headlessui/react": "^1.6.5", + "@headlessui/react": "^1.6.6", "@heroicons/react": "^1.0.6", "@hookform/resolvers": "^2.9.3", "@quri/squiggle-lang": "^0.2.8", @@ -13,7 +13,7 @@ "lodash": "^4.17.21", "react": "^18.1.0", "react-ace": "^10.1.0", - "react-hook-form": "^7.33.0", + "react-hook-form": "^7.33.1", "react-use": "^17.4.0", "react-vega": "^7.5.1", "vega": "^5.22.1", @@ -37,7 +37,7 @@ "@testing-library/user-event": "^14.2.1", "@types/jest": "^27.5.0", "@types/lodash": "^4.14.182", - "@types/node": "^18.0.0", + "@types/node": "^18.0.3", "@types/react": "^18.0.9", "@types/styled-components": "^5.1.24", "@types/webpack": "^5.28.0", diff --git a/yarn.lock b/yarn.lock index e1536d81..97f4f27f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1974,10 +1974,10 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@headlessui/react@^1.6.5": - version "1.6.5" - resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.5.tgz#5587c537de809cf3146eb2ff263e5e940b1bf69c" - integrity sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg== +"@headlessui/react@^1.6.6": + version "1.6.6" + resolved "https://registry.yarnpkg.com/@headlessui/react/-/react-1.6.6.tgz#3073c066b85535c9d28783da0a4d9288b5354d0c" + integrity sha512-MFJtmj9Xh/hhBMhLccGbBoSk+sk61BlP6sJe4uQcVMtXZhCgGqd2GyIQzzmsdPdTEWGSF434CBi8mnhR6um46Q== "@heroicons/react@^1.0.6": version "1.0.6" @@ -4445,10 +4445,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@18.x", "@types/node@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== +"@types/node@*", "@types/node@18.x", "@types/node@^18.0.3": + version "18.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" + integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": version "16.11.41" @@ -4731,14 +4731,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.30.4", "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz#a46c8c0ab755a936cb63786a6222876ce51675e4" - integrity sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ== +"@typescript-eslint/eslint-plugin@^5.30.5", "@typescript-eslint/eslint-plugin@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d" + integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/type-utils" "5.30.4" - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/type-utils" "5.30.5" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -4753,14 +4753,14 @@ dependencies: "@typescript-eslint/utils" "5.29.0" -"@typescript-eslint/parser@^5.30.4", "@typescript-eslint/parser@^5.5.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.4.tgz#659411e8700b22c8d5400798ef24838425bf4567" - integrity sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ== +"@typescript-eslint/parser@^5.30.5", "@typescript-eslint/parser@^5.5.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" + integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q== dependencies: - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" debug "^4.3.4" "@typescript-eslint/scope-manager@5.29.0": @@ -4771,20 +4771,20 @@ "@typescript-eslint/types" "5.29.0" "@typescript-eslint/visitor-keys" "5.29.0" -"@typescript-eslint/scope-manager@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz#8140efd2bc12d41d74e8af23872a89f3edbe552e" - integrity sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ== +"@typescript-eslint/scope-manager@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" + integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" -"@typescript-eslint/type-utils@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz#00ff19073cd01f7d27e9af49ce08d6a69f1e4f01" - integrity sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA== +"@typescript-eslint/type-utils@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9" + integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw== dependencies: - "@typescript-eslint/utils" "5.30.4" + "@typescript-eslint/utils" "5.30.5" debug "^4.3.4" tsutils "^3.21.0" @@ -4793,10 +4793,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== -"@typescript-eslint/types@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.4.tgz#3bc99eca8ba3fcfd6a21480e216b09dab81c3999" - integrity sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA== +"@typescript-eslint/types@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" + integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== "@typescript-eslint/typescript-estree@5.29.0": version "5.29.0" @@ -4811,13 +4811,13 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz#ac4be8a2f8fb1f1c3b346d5992a36163121ddb3f" - integrity sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w== +"@typescript-eslint/typescript-estree@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" + integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ== dependencies: - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/visitor-keys" "5.30.4" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/visitor-keys" "5.30.5" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -4836,15 +4836,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.30.4", "@typescript-eslint/utils@^5.13.0": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.4.tgz#07a2b7ce80b2527ea506829f190591b76c70ba9f" - integrity sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ== +"@typescript-eslint/utils@5.30.5", "@typescript-eslint/utils@^5.13.0": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765" + integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.4" - "@typescript-eslint/types" "5.30.4" - "@typescript-eslint/typescript-estree" "5.30.4" + "@typescript-eslint/scope-manager" "5.30.5" + "@typescript-eslint/types" "5.30.5" + "@typescript-eslint/typescript-estree" "5.30.5" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -4856,12 +4856,12 @@ "@typescript-eslint/types" "5.29.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.30.4": - version "5.30.4" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz#b4969df1a440cc999d4bb7f7b7932dce05537089" - integrity sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q== +"@typescript-eslint/visitor-keys@5.30.5": + version "5.30.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" + integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA== dependencies: - "@typescript-eslint/types" "5.30.4" + "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": @@ -14812,10 +14812,10 @@ react-helmet-async@*, react-helmet-async@^1.3.0: react-fast-compare "^3.2.0" shallowequal "^1.1.0" -react-hook-form@^7.33.0: - version "7.33.0" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.0.tgz#44a87ddd630f00ebeb0f15aa978f69ca74b8a77b" - integrity sha512-h8XoeUHQs1Snx1s/sSvM+eVTSKkWQt8TcrbL+3/Rt5gugxpy4ueL5ZZkubffyNpUyyTz0qM0kwOi2c+JgGTjLA== +react-hook-form@^7.33.1: + version "7.33.1" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.33.1.tgz#8c4410e3420788d3b804d62cc4c142915c2e46d0" + integrity sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg== react-inspector@^5.1.0: version "5.1.1" From e9710bb71d935a3386415a024a40c0acd83dbc4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:10:34 +0000 Subject: [PATCH 43/60] :arrow_up: Bump @hookform/resolvers from 2.9.3 to 2.9.5 Bumps [@hookform/resolvers](https://github.com/react-hook-form/resolvers) from 2.9.3 to 2.9.5. - [Release notes](https://github.com/react-hook-form/resolvers/releases) - [Commits](https://github.com/react-hook-form/resolvers/compare/v2.9.3...v2.9.5) --- updated-dependencies: - dependency-name: "@hookform/resolvers" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 4 ++-- yarn.lock | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index b713a489..7ad8efd6 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -5,7 +5,7 @@ "dependencies": { "@headlessui/react": "^1.6.6", "@heroicons/react": "^1.0.6", - "@hookform/resolvers": "^2.9.3", + "@hookform/resolvers": "^2.9.5", "@quri/squiggle-lang": "^0.2.8", "@react-hook/size": "^2.1.2", "clsx": "^1.1.1", @@ -37,7 +37,7 @@ "@testing-library/user-event": "^14.2.1", "@types/jest": "^27.5.0", "@types/lodash": "^4.14.182", - "@types/node": "^18.0.0", + "@types/node": "^18.0.3", "@types/react": "^18.0.9", "@types/styled-components": "^5.1.24", "@types/webpack": "^5.28.0", diff --git a/yarn.lock b/yarn.lock index 61c3f609..00d50396 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1984,10 +1984,10 @@ resolved "https://registry.yarnpkg.com/@heroicons/react/-/react-1.0.6.tgz#35dd26987228b39ef2316db3b1245c42eb19e324" integrity sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ== -"@hookform/resolvers@^2.9.3": - version "2.9.3" - resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-2.9.3.tgz#13f6934cfe705e24fac094da377e0621adcfc424" - integrity sha512-Eqc/qgjq0VX/TU0a5D2O+yR/kAKflnjaVlYFC1wI2qBm/sgjKTXxv27ijLwHUoHPIF+MUkB/VuQqHJ5DcmbCww== +"@hookform/resolvers@^2.9.5": + version "2.9.5" + resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-2.9.5.tgz#adfa2d240a9315f4ab6ff4c63621d22d1b574c07" + integrity sha512-4XABrKdE4GpX6v2RZ+Ij1Wrl9qPEl5ZvVhFxROY+SZhP/6TU8gPw0LO4ZS9/GgIbTx3Pw1U8HmcXVAoGOq+7iA== "@humanwhocodes/config-array@^0.9.2": version "0.9.5" @@ -4445,10 +4445,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@18.x", "@types/node@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== +"@types/node@*", "@types/node@18.x", "@types/node@^18.0.3": + version "18.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" + integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": version "16.11.41" @@ -17170,10 +17170,10 @@ ts-loader@^9.3.0: micromatch "^4.0.0" semver "^7.3.4" -ts-node@^10.8.1: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== +ts-node@^10.8.2: + version "10.8.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" + integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" From 65e78556c22734cfcf30fe5e89fe66349f81b697 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:14:14 +0000 Subject: [PATCH 44/60] :arrow_up: Bump postcss-loader from 7.0.0 to 7.0.1 Bumps [postcss-loader](https://github.com/webpack-contrib/postcss-loader) from 7.0.0 to 7.0.1. - [Release notes](https://github.com/webpack-contrib/postcss-loader/releases) - [Changelog](https://github.com/webpack-contrib/postcss-loader/blob/master/CHANGELOG.md) - [Commits](https://github.com/webpack-contrib/postcss-loader/compare/v7.0.0...v7.0.1) --- updated-dependencies: - dependency-name: postcss-loader dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 4 ++-- yarn.lock | 24 ++++++++++++------------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index b713a489..36038ba6 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -37,7 +37,7 @@ "@testing-library/user-event": "^14.2.1", "@types/jest": "^27.5.0", "@types/lodash": "^4.14.182", - "@types/node": "^18.0.0", + "@types/node": "^18.0.3", "@types/react": "^18.0.9", "@types/styled-components": "^5.1.24", "@types/webpack": "^5.28.0", @@ -45,7 +45,7 @@ "mini-css-extract-plugin": "^2.6.1", "postcss-cli": "^9.1.0", "postcss-import": "^14.1.0", - "postcss-loader": "^7.0.0", + "postcss-loader": "^7.0.1", "react": "^18.1.0", "react-scripts": "^5.0.1", "style-loader": "^3.3.1", diff --git a/yarn.lock b/yarn.lock index 61c3f609..f71bfc2f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4445,10 +4445,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@18.x", "@types/node@^18.0.0": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== +"@types/node@*", "@types/node@18.x", "@types/node@^18.0.3": + version "18.0.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" + integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== "@types/node@^14.0.10 || ^16.0.0", "@types/node@^14.14.20 || ^16.0.0": version "16.11.41" @@ -13892,10 +13892,10 @@ postcss-loader@^6.2.1: klona "^2.0.5" semver "^7.3.5" -postcss-loader@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.0.tgz#367d10eb1c5f1d93700e6b399683a6dc7c3af396" - integrity sha512-IDyttebFzTSY6DI24KuHUcBjbAev1i+RyICoPEWcAstZsj03r533uMXtDn506l6/wlsRYiS5XBdx7TpccCsyUg== +postcss-loader@^7.0.0, postcss-loader@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.1.tgz#4c883cc0a1b2bfe2074377b7a74c1cd805684395" + integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== dependencies: cosmiconfig "^7.0.0" klona "^2.0.5" @@ -17170,10 +17170,10 @@ ts-loader@^9.3.0: micromatch "^4.0.0" semver "^7.3.4" -ts-node@^10.8.1: - version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" - integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== +ts-node@^10.8.2: + version "10.8.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.2.tgz#3185b75228cef116bf82ffe8762594f54b2a23f2" + integrity sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" From d87e5062c2e43ba8cd5df1c71f107fc3522e4caf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:26:24 +0000 Subject: [PATCH 45/60] :arrow_up: Bump clsx from 1.2.0 to 1.2.1 Bumps [clsx](https://github.com/lukeed/clsx) from 1.2.0 to 1.2.1. - [Release notes](https://github.com/lukeed/clsx/releases) - [Commits](https://github.com/lukeed/clsx/compare/v1.2.0...v1.2.1) --- updated-dependencies: - dependency-name: clsx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- packages/website/package.json | 2 +- yarn.lock | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index a37d254d..ebaeb1a1 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -8,7 +8,7 @@ "@hookform/resolvers": "^2.9.3", "@quri/squiggle-lang": "^0.2.8", "@react-hook/size": "^2.1.2", - "clsx": "^1.1.1", + "clsx": "^1.2.1", "framer-motion": "^6.4.3", "lodash": "^4.17.21", "react": "^18.1.0", diff --git a/packages/website/package.json b/packages/website/package.json index 5369fa96..694f78a0 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -16,7 +16,7 @@ "@docusaurus/preset-classic": "2.0.0-beta.21", "@quri/squiggle-components": "^0.2.20", "base64-js": "^1.5.1", - "clsx": "^1.2.0", + "clsx": "^1.2.1", "hast-util-is-element": "2.1.2", "pako": "^2.0.4", "prism-react-renderer": "^1.3.5", diff --git a/yarn.lock b/yarn.lock index 37e30f10..415a6ce3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6825,10 +6825,10 @@ clone@~2.1.2: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -clsx@^1.1.1, clsx@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.0.tgz#b0e415ea7537dbac01b169c5cec1caeb11d86566" - integrity sha512-EPRP7XJsM1y0iCU3Z7C7jFKdQboXSeHgEfzQUTlz7m5NP3hDrlz48aUsmNGp4pC+JOW9WA3vIRqlYuo/bl4Drw== +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== co@^4.6.0: version "4.6.0" From 2e5ec355d64f51a4719dcffe70eec8d314baef03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:35:37 +0000 Subject: [PATCH 46/60] :arrow_up: Bump @docusaurus/preset-classic Bumps [@docusaurus/preset-classic](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic) from 2.0.0-beta.21 to 2.0.0-beta.22. - [Release notes](https://github.com/facebook/docusaurus/releases) - [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md) - [Commits](https://github.com/facebook/docusaurus/commits/v2.0.0-beta.22/packages/docusaurus-preset-classic) --- updated-dependencies: - dependency-name: "@docusaurus/preset-classic" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/website/package.json | 2 +- yarn.lock | 617 ++++++++++++---------------------- 2 files changed, 224 insertions(+), 395 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 08d6e9e1..60319e60 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@docusaurus/core": "2.0.0-beta.22", - "@docusaurus/preset-classic": "2.0.0-beta.21", + "@docusaurus/preset-classic": "2.0.0-beta.22", "@quri/squiggle-components": "^0.2.20", "base64-js": "^1.5.1", "clsx": "^1.2.1", diff --git a/yarn.lock b/yarn.lock index 1cd88edb..01ffa4ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,17 +2,24 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.6.3.tgz#76832fffb6405ac2c87bac5a040b8a31a1cdef80" - integrity sha512-dqQqRt01fX3YuVFrkceHsoCnzX0bLhrrg8itJI1NM68KjrPYQPYsE+kY8EZTCM4y8VDnhqJErR73xe/ZsV+qAA== +"@algolia/autocomplete-core@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1" + integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg== dependencies: - "@algolia/autocomplete-shared" "1.6.3" + "@algolia/autocomplete-shared" "1.7.1" -"@algolia/autocomplete-shared@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.6.3.tgz#52085ce89a755977841ed0a463aa31ce8f1dea97" - integrity sha512-UV46bnkTztyADFaETfzFC5ryIdGVb2zpAoYgu0tfcuYWjhg1KbLXveFffZIrGVoboqmAk1b+jMrl6iCja1i3lg== +"@algolia/autocomplete-preset-algolia@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8" + integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg== + dependencies: + "@algolia/autocomplete-shared" "1.7.1" + +"@algolia/autocomplete-shared@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" + integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== "@algolia/cache-browser-local-storage@4.13.1": version "4.13.1" @@ -186,7 +193,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.18.2", "@babel/core@^7.18.6", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.15.5", "@babel/core@^7.16.0", "@babel/core@^7.18.6", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.6.tgz#54a107a3c298aee3fe5e1947a6464b9b6faca03d" integrity sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ== @@ -216,7 +223,7 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.2", "@babel/generator@^7.18.6", "@babel/generator@^7.18.7", "@babel/generator@^7.7.2": +"@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.18.6", "@babel/generator@^7.18.7", "@babel/generator@^7.7.2": version "7.18.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.7.tgz#2aa78da3c05aadfc82dbac16c99552fc802284bd" integrity sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A== @@ -577,7 +584,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.18.3": +"@babel/parser@^7.1.0", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7": version "7.18.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.5.tgz#337062363436a893a2d22faa60be5bb37091c83c" integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== @@ -1320,7 +1327,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-runtime@^7.16.4", "@babel/plugin-transform-runtime@^7.18.2", "@babel/plugin-transform-runtime@^7.18.6": +"@babel/plugin-transform-runtime@^7.16.4", "@babel/plugin-transform-runtime@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz#77b14416015ea93367ca06979710f5000ff34ccb" integrity sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA== @@ -1414,7 +1421,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.12.11", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.6.tgz#953422e98a5f66bc56cd0b9074eaea127ec86ace" integrity sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw== @@ -1515,7 +1522,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.17.12", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.12.10", "@babel/preset-react@^7.12.5", "@babel/preset-react@^7.14.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1527,7 +1534,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@^7.12.7", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.17.12", "@babel/preset-typescript@^7.18.6": +"@babel/preset-typescript@^7.12.7", "@babel/preset-typescript@^7.15.0", "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== @@ -1547,7 +1554,7 @@ pirates "^4.0.5" source-map-support "^0.5.16" -"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.18.3", "@babel/runtime-corejs3@^7.18.6": +"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz#6f02c5536911f4b445946a2179554b95c8838635" integrity sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw== @@ -1555,7 +1562,7 @@ core-js-pure "^3.20.2" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== @@ -1744,98 +1751,21 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/css@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.0.tgz#6781cad43fc2e034d012ee44beddf8f93ba21f19" - integrity sha512-bh5IskwkkodbvC0FzSg1AxMykfDl95hebEKwxNoq4e5QaGzOXSBgW8+jnMFZ7JU4sTBiB04vZWoUSzNrPboLZA== +"@docsearch/css@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.1.tgz#e0976bf995e383f8ee8657306311b9cb95016330" + integrity sha512-utLgg7E1agqQeqCJn05DWC7XXMk4tMUUnL7MZupcknRu2OzGN13qwey2qA/0NAKkVBGugiWtON0+rlU0QIPojg== -"@docsearch/react@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.0.tgz#da943a64c01ee82b04e53b691806469272f943f7" - integrity sha512-bjB6ExnZzf++5B7Tfoi6UXgNwoUnNOfZ1NyvnvPhWgCMy5V/biAtLL4o7owmZSYdAKeFSvZ5Lxm0is4su/dBWg== +"@docsearch/react@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.1.tgz#3dffb5db8cf9eb95d6e732cf038264bfc10191ed" + integrity sha512-cfoql4qvtsVRqBMYxhlGNpvyy/KlCoPqjIsJSZYqYf9AplZncKjLBTcwBu6RXFMVCe30cIFljniI4OjqAU67pQ== dependencies: - "@algolia/autocomplete-core" "1.6.3" - "@docsearch/css" "3.1.0" + "@algolia/autocomplete-core" "1.7.1" + "@algolia/autocomplete-preset-algolia" "1.7.1" + "@docsearch/css" "3.1.1" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.21.tgz#50897317b22dbd94b1bf91bb30c2a0fddd15a806" - integrity sha512-qysDMVp1M5UozK3u/qOxsEZsHF7jeBvJDS+5ItMPYmNKvMbNKeYZGA0g6S7F9hRDwjIlEbvo7BaX0UMDcmTAWA== - dependencies: - "@babel/core" "^7.18.2" - "@babel/generator" "^7.18.2" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.18.2" - "@babel/preset-env" "^7.18.2" - "@babel/preset-react" "^7.17.12" - "@babel/preset-typescript" "^7.17.12" - "@babel/runtime" "^7.18.3" - "@babel/runtime-corejs3" "^7.18.3" - "@babel/traverse" "^7.18.2" - "@docusaurus/cssnano-preset" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" - "@slorber/static-site-generator-webpack-plugin" "^4.0.4" - "@svgr/webpack" "^6.2.1" - autoprefixer "^10.4.7" - babel-loader "^8.2.5" - babel-plugin-dynamic-import-node "^2.3.3" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - clean-css "^5.3.0" - cli-table3 "^0.6.2" - combine-promises "^1.1.0" - commander "^5.1.0" - copy-webpack-plugin "^11.0.0" - core-js "^3.22.7" - css-loader "^6.7.1" - css-minimizer-webpack-plugin "^4.0.0" - cssnano "^5.1.9" - del "^6.1.1" - detect-port "^1.3.0" - escape-html "^1.0.3" - eta "^1.12.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - html-minifier-terser "^6.1.0" - html-tags "^3.2.0" - html-webpack-plugin "^5.5.0" - import-fresh "^3.3.0" - leven "^3.1.0" - lodash "^4.17.21" - mini-css-extract-plugin "^2.6.0" - postcss "^8.4.14" - postcss-loader "^7.0.0" - prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@5.5.2" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.3" - react-router-config "^5.1.1" - react-router-dom "^5.3.3" - remark-admonitions "^1.2.1" - rtl-detect "^1.0.4" - semver "^7.3.7" - serve-handler "^6.1.3" - shelljs "^0.8.5" - terser-webpack-plugin "^5.3.1" - tslib "^2.4.0" - update-notifier "^5.1.0" - url-loader "^4.1.1" - wait-on "^6.0.1" - webpack "^5.72.1" - webpack-bundle-analyzer "^4.5.0" - webpack-dev-server "^4.9.0" - webpack-merge "^5.8.0" - webpackbar "^5.0.2" - "@docusaurus/core@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-beta.22.tgz#72430b817571e2d7354012523bcaefc99fe4e004" @@ -1913,16 +1843,6 @@ webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.21.tgz#38113877a5857c3f9d493522085d20909dcec474" - integrity sha512-fhTZrg1vc6zYYZIIMXpe1TnEVGEjqscBo0s1uomSwKjjtMgu7wkzc1KKJYY7BndsSA+fVVkZ+OmL/kAsmK7xxw== - dependencies: - cssnano-preset-advanced "^5.3.5" - postcss "^8.4.14" - postcss-sort-media-queries "^4.2.1" - tslib "^2.4.0" - "@docusaurus/cssnano-preset@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.22.tgz#dc3491a452fb66569261801c67e00a1bb8b7dce1" @@ -1933,14 +1853,6 @@ postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" -"@docusaurus/logger@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.21.tgz#f6ab4133917965349ae03fd9111a940b24d4fd12" - integrity sha512-HTFp8FsSMrAj7Uxl5p72U+P7rjYU/LRRBazEoJbs9RaqoKEdtZuhv8MYPOCh46K9TekaoquRYqag2o23Qt4ggA== - dependencies: - chalk "^4.1.2" - tslib "^2.4.0" - "@docusaurus/logger@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-beta.22.tgz#dd328d8cddd947c2211fd20ae91f5921b6c70f82" @@ -1949,28 +1861,6 @@ chalk "^4.1.2" tslib "^2.4.0" -"@docusaurus/mdx-loader@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.21.tgz#52af341e21f22be882d2155a7349bea10f5d77a3" - integrity sha512-AI+4obJnpOaBOAYV6df2ux5Y1YJCBS+MhXFf0yhED12sVLJi2vffZgdamYd/d/FwvWDw6QLs/VD2jebd7P50yQ== - dependencies: - "@babel/parser" "^7.18.3" - "@babel/traverse" "^7.18.2" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@mdx-js/mdx" "^1.6.22" - escape-html "^1.0.3" - file-loader "^6.2.0" - fs-extra "^10.1.0" - image-size "^1.0.1" - mdast-util-to-string "^2.0.0" - remark-emoji "^2.2.0" - stringify-object "^3.3.0" - tslib "^2.4.0" - unist-util-visit "^2.0.3" - url-loader "^4.1.1" - webpack "^5.72.1" - "@docusaurus/mdx-loader@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.22.tgz#7a015c161a4c40300fe99bde7dc0a6ada094d45f" @@ -1994,132 +1884,142 @@ url-loader "^4.1.1" webpack "^5.73.0" -"@docusaurus/module-type-aliases@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.21.tgz#345f1c1a99407775d1d3ffc1a90c2df93d50a9b8" - integrity sha512-gRkWICgQZiqSJgrwRKWjXm5gAB+9IcfYdUbCG0PRPP/G8sNs9zBIOY4uT4Z5ox2CWFEm44U3RTTxj7BiLVMBXw== +"@docusaurus/module-type-aliases@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.22.tgz#bae805e339364eb3d801e010b3098ceb04dd5ce4" + integrity sha512-h0IOYfFgZgV3MjLHefbS1Zf0zmiNOBCtvu9vXwoxbws7fzjqUl1HALS0HQ2SaHsVsQ4AeepYidHtkS2upw8+JQ== dependencies: - "@docusaurus/types" "2.0.0-beta.21" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.0.0-beta.22" + "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" "@types/react-router-dom" "*" react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-content-blog@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.21.tgz#86211deeea901ddcd77ca387778e121e93ee8d01" - integrity sha512-IP21yJViP3oBmgsWBU5LhrG1MZXV4mYCQSoCAboimESmy1Z11RCNP2tXaqizE3iTmXOwZZL+SNBk06ajKCEzWg== +"@docusaurus/plugin-content-blog@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.22.tgz#c08a685fe19db417318b1e18414e9fefa520a51d" + integrity sha512-igXqg3O7KKwYq+RleeK73dxVOM2ONnerykmy5Uaasfzxzi2z5erAzTTUSINa86Czo4CfwaSDwVAkc43z4Z8Hiw== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" - cheerio "^1.0.0-rc.11" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^10.1.0" lodash "^4.17.21" reading-time "^1.5.0" - remark-admonitions "^1.2.1" tslib "^2.4.0" unist-util-visit "^2.0.3" utility-types "^3.10.0" - webpack "^5.72.1" + webpack "^5.73.0" -"@docusaurus/plugin-content-docs@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.21.tgz#b3171fa9aed99e367b6eb7111187bd0e3dcf2949" - integrity sha512-aa4vrzJy4xRy81wNskyhE3wzRf3AgcESZ1nfKh8xgHUkT7fDTZ1UWlg50Jb3LBCQFFyQG2XQB9N6llskI/KUnw== +"@docusaurus/plugin-content-docs@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.22.tgz#ef8c60729f74c1604e178863a798890376a0dd63" + integrity sha512-Hfb0+coxJshheAQISamfGrU2T1CLhV6EAPcYx3ejCXsMTjAAtyFsK17t6qGOCGFg3J36gPrzBstBWwEvaVHCqw== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" + "@types/react-router-config" "^5.0.6" combine-promises "^1.1.0" fs-extra "^10.1.0" import-fresh "^3.3.0" js-yaml "^4.1.0" lodash "^4.17.21" - remark-admonitions "^1.2.1" tslib "^2.4.0" utility-types "^3.10.0" - webpack "^5.72.1" + webpack "^5.73.0" -"@docusaurus/plugin-content-pages@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.21.tgz#df6b4c5c4cde8a0ea491a30002e84941ca7bf0cf" - integrity sha512-DmXOXjqNI+7X5hISzCvt54QIK6XBugu2MOxjxzuqI7q92Lk/EVdraEj5mthlH8IaEH/VlpWYJ1O9TzLqX5vH2g== +"@docusaurus/plugin-content-pages@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.22.tgz#a9ed66a21f66019ada8d7cd5bb0bca06c2fe313c" + integrity sha512-v+oBM0IvRuU2D5HACaaHdxgW+XajFYgimRwV8jp1z6trjRInCO//VjYl+VEaqRHFZ1y7gwbInJxn4as1uGHcjw== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/mdx-loader" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" fs-extra "^10.1.0" - remark-admonitions "^1.2.1" tslib "^2.4.0" - webpack "^5.72.1" + webpack "^5.73.0" -"@docusaurus/plugin-debug@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.21.tgz#dfa212fd90fe2f54439aacdc8c143e8ce96b0d27" - integrity sha512-P54J4q4ecsyWW0Jy4zbimSIHna999AfbxpXGmF1IjyHrjoA3PtuakV1Ai51XrGEAaIq9q6qMQkEhbUd3CffGAw== +"@docusaurus/plugin-debug@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.22.tgz#a0ca40d5e50c216d57a774c6f7831c18ccb92423" + integrity sha512-uB7+eHGpJugDy/Rzxbs293FuOf66ck5Wx/Q1wcRA1AQQVSiqDfvj2ZBTHBNr+onympYdL7IPWqTnjf1tt40nBQ== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" fs-extra "^10.1.0" react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-analytics@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.21.tgz#5475c58fb23603badf41d84298569f6c46b4e6b2" - integrity sha512-+5MS0PeGaJRgPuNZlbd/WMdQSpOACaxEz7A81HAxm6kE+tIASTW3l8jgj1eWFy/PGPzaLnQrEjxI1McAfnYmQw== +"@docusaurus/plugin-google-analytics@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.22.tgz#f6bdf168e5cd0ef8b8e48568e604ec554e3e08fe" + integrity sha512-5rT1b3QTcelOzx7ZeyL0mKiYvUR2c78gLmh4wHpqRJXSgZAr7Fz8VSgDzu4xfvp8+MSWWeGhCTHXQok256U4Vg== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.21.tgz#a4a101089994a7103c1cc7cddb15170427b185d6" - integrity sha512-4zxKZOnf0rfh6myXLG7a6YZfQcxYDMBsWqANEjCX77H5gPdK+GHZuDrxK6sjFvRBv4liYCrNjo7HJ4DpPoT0zA== +"@docusaurus/plugin-google-gtag@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.22.tgz#4e3aac750f67c92275832c0d83281a5293184989" + integrity sha512-DkoFfHErs10YMQoXPmFn5MC9fj9URH9LbryjTPqDoIerAZjR7MZA5g/+OueYBcachpygPlWBu6Q3mhNX19VObA== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" tslib "^2.4.0" -"@docusaurus/plugin-sitemap@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.21.tgz#8bfa695eada2ec95c9376a884641237ffca5dd3d" - integrity sha512-/ynWbcXZXcYZ6sT2X6vAJbnfqcPxwdGEybd0rcRZi4gBHq6adMofYI25AqELmnbBDxt0If+vlAeUHFRG5ueP7Q== +"@docusaurus/plugin-sitemap@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.22.tgz#2066a94cf3a7518517f940001cedcc96319ea793" + integrity sha512-XGziHGR5ZeuNxBI3D3obRS2ufZvuWKrlFQpDCq1gWvZb5EgMePGNs1ZiXUIVNyW3jOSILbemvH6DAXuXSo1DlA== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" fs-extra "^10.1.0" sitemap "^7.1.1" tslib "^2.4.0" -"@docusaurus/preset-classic@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.21.tgz#1362d8650ebed22633db411caaba80075f7c86ce" - integrity sha512-KvBnIUu7y69pNTJ9UhX6SdNlK6prR//J3L4rhN897tb8xx04xHHILlPXko2Il+C3Xzgh3OCgyvkoz9K6YlFTDw== +"@docusaurus/preset-classic@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.22.tgz#f7c798398d805e8b06e8babb2d10e4b9206802c9" + integrity sha512-an4u7KnFLR6vyBQ7l3HCNL4mXdV5QNRleZv9G+kvVeUejxs0GMF1W2pRLyfU6bEnAD0W6bDH4bYdYgIAX4kGaw== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - "@docusaurus/plugin-debug" "2.0.0-beta.21" - "@docusaurus/plugin-google-analytics" "2.0.0-beta.21" - "@docusaurus/plugin-google-gtag" "2.0.0-beta.21" - "@docusaurus/plugin-sitemap" "2.0.0-beta.21" - "@docusaurus/theme-classic" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-search-algolia" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/plugin-debug" "2.0.0-beta.22" + "@docusaurus/plugin-google-analytics" "2.0.0-beta.22" + "@docusaurus/plugin-google-gtag" "2.0.0-beta.22" + "@docusaurus/plugin-sitemap" "2.0.0-beta.22" + "@docusaurus/theme-classic" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-search-algolia" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -2129,98 +2029,101 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.21.tgz#6df5b9ea2d389dafb6f59badeabb3eda060b5017" - integrity sha512-Ge0WNdTefD0VDQfaIMRRWa8tWMG9+8/OlBRd5MK88/TZfqdBq7b/gnCSaalQlvZwwkj6notkKhHx72+MKwWUJA== +"@docusaurus/theme-classic@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.22.tgz#20e0521b7eedbc0160829f2be08f812832ac766b" + integrity sha512-WkoN1XC4F3v1vCWnyAdIuNF27dMccehnglloCNj0dF6mop6PHMXREQ2f6wKhp5ZjMZ/LKTAKyGjBotxPsOElvA== dependencies: - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-translations" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-common" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-translations" "2.0.0-beta.22" + "@docusaurus/types" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-common" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" "@mdx-js/react" "^1.6.22" - clsx "^1.1.1" + clsx "^1.2.0" copy-text-to-clipboard "^3.0.1" - infima "0.2.0-alpha.39" + infima "0.2.0-alpha.41" lodash "^4.17.21" nprogress "^0.2.0" postcss "^8.4.14" - prism-react-renderer "^1.3.3" + prism-react-renderer "^1.3.5" prismjs "^1.28.0" react-router-dom "^5.3.3" rtlcss "^3.5.0" tslib "^2.4.0" + utility-types "^3.10.0" -"@docusaurus/theme-common@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.21.tgz#508478251982d01655ef505ccb2420db38623db8" - integrity sha512-fTKoTLRfjuFG6c3iwnVjIIOensxWMgdBKLfyE5iih3Lq7tQgkE7NyTGG9BKLrnTJ7cAD2UXdXM9xbB7tBf1qzg== +"@docusaurus/theme-common@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-beta.22.tgz#696ae7fb963bf40ad7ee017ca77f4a31719cfa02" + integrity sha512-BTH23SryhomEetWiJKdl5C9JgnglO17IbbabhZ6wbm0bLNYXmRxV1Bh7LhVmoJECdc1LeQHDOY45mCjVxI5LAg== dependencies: - "@docusaurus/module-type-aliases" "2.0.0-beta.21" - "@docusaurus/plugin-content-blog" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/plugin-content-pages" "2.0.0-beta.21" - clsx "^1.1.1" + "@docusaurus/mdx-loader" "2.0.0-beta.22" + "@docusaurus/module-type-aliases" "2.0.0-beta.22" + "@docusaurus/plugin-content-blog" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/plugin-content-pages" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.0" parse-numeric-range "^1.3.0" - prism-react-renderer "^1.3.3" + prism-react-renderer "^1.3.5" tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.21.tgz#2891f11372e2542e4e1426c3100b72c2d30d4d68" - integrity sha512-T1jKT8MVSSfnztSqeebUOpWHPoHKtwDXtKYE0xC99JWoZ+mMfv8AFhVSoSddn54jLJjV36mxg841eHQIySMCpQ== +"@docusaurus/theme-search-algolia@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.22.tgz#193641f11df1af2157e652b530897064f707838e" + integrity sha512-z9edT4jQxfZsBOVxDhPpxHR5N/tlgkpogds3/XBapU8b7Qp7mgp5qU3Ndz3BX3CIICDDaI2ayGn8xLL65XFGFw== dependencies: - "@docsearch/react" "^3.1.0" - "@docusaurus/core" "2.0.0-beta.21" - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/plugin-content-docs" "2.0.0-beta.21" - "@docusaurus/theme-common" "2.0.0-beta.21" - "@docusaurus/theme-translations" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - "@docusaurus/utils-validation" "2.0.0-beta.21" + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.0.0-beta.22" + "@docusaurus/logger" "2.0.0-beta.22" + "@docusaurus/plugin-content-docs" "2.0.0-beta.22" + "@docusaurus/theme-common" "2.0.0-beta.22" + "@docusaurus/theme-translations" "2.0.0-beta.22" + "@docusaurus/utils" "2.0.0-beta.22" + "@docusaurus/utils-validation" "2.0.0-beta.22" algoliasearch "^4.13.1" - algoliasearch-helper "^3.8.2" - clsx "^1.1.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.0" eta "^1.12.3" fs-extra "^10.1.0" lodash "^4.17.21" tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.21.tgz#5da60ffc58de256b96316c5e0fe2733c1e83f22c" - integrity sha512-dLVT9OIIBs6MpzMb1bAy+C0DPJK3e3DNctG+ES0EP45gzEqQxzs4IsghpT+QDaOsuhNnAlosgJpFWX3rqxF9xA== +"@docusaurus/theme-translations@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.22.tgz#89fa0d0bd8e59bf4a0a5749182153483410946e1" + integrity sha512-duMoS+BEDWk+qCFZay6+L0C2ZYJvUdny9NdH2JLjNfC1ifl4+pM3HHciJgldos7hH/JGfohDY57fl6NKf5pQLQ== dependencies: fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.21.tgz#36659c6c012663040dcd4cbc97b5d7a555dae229" - integrity sha512-/GH6Npmq81eQfMC/ikS00QSv9jNyO1RXEpNSx5GLA3sFX8Iib26g2YI2zqNplM8nyxzZ2jVBuvUoeODTIbTchQ== +"@docusaurus/types@2.0.0-beta.22": + version "2.0.0-beta.22" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-beta.22.tgz#8042ccdf32a915db0e4a2c0e6f98f6d43c6f7fa5" + integrity sha512-F5NQyPKIBXcX+bOK+RMce9K8NTs9Vx6v5pZ4+byLylnNvC4I52USRm+s1l6jMpvlsP4XHz1h2Tm1L3RBCBOwpg== dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" commander "^5.1.0" - history "^4.9.0" joi "^17.6.0" react-helmet-async "^1.3.0" utility-types "^3.10.0" - webpack "^5.72.1" + webpack "^5.73.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.21.tgz#81e86ed04ad62b75e9ba6a5e7689dc23d5f36a0a" - integrity sha512-5w+6KQuJb6pUR2M8xyVuTMvO5NFQm/p8TOTDFTx60wt3p0P1rRX00v6FYsD4PK6pgmuoKjt2+Ls8dtSXc4qFpQ== - dependencies: - tslib "^2.4.0" - "@docusaurus/utils-common@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-beta.22.tgz#c3c4365be9d2003917d24393f9ad9678fb6388a1" @@ -2228,17 +2131,6 @@ dependencies: tslib "^2.4.0" -"@docusaurus/utils-validation@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.21.tgz#10169661be5f8a233f4c12202ee5802ccb77400f" - integrity sha512-6NG1FHTRjv1MFzqW//292z7uCs77vntpWEbZBHk3n67aB1HoMn5SOwjLPtRDjbCgn6HCHFmdiJr6euCbjhYolg== - dependencies: - "@docusaurus/logger" "2.0.0-beta.21" - "@docusaurus/utils" "2.0.0-beta.21" - joi "^17.6.0" - js-yaml "^4.1.0" - tslib "^2.4.0" - "@docusaurus/utils-validation@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.22.tgz#517320e317dbc35ffe538eb586817929ebdb588c" @@ -2250,27 +2142,6 @@ js-yaml "^4.1.0" tslib "^2.4.0" -"@docusaurus/utils@2.0.0-beta.21": - version "2.0.0-beta.21" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.21.tgz#8fc4499c4cfedd29805025d930f8008cad255044" - integrity sha512-M/BrVCDmmUPZLxtiStBgzpQ4I5hqkggcpnQmEN+LbvbohjbtVnnnZQ0vptIziv1w8jry/woY+ePsyOO7O/yeLQ== - dependencies: - "@docusaurus/logger" "2.0.0-beta.21" - "@svgr/webpack" "^6.2.1" - file-loader "^6.2.0" - fs-extra "^10.1.0" - github-slugger "^1.4.0" - globby "^11.1.0" - gray-matter "^4.0.3" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.4.0" - url-loader "^4.1.1" - webpack "^5.72.1" - "@docusaurus/utils@2.0.0-beta.22": version "2.0.0-beta.22" resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-beta.22.tgz#4d66df9534419cc5cf2307581bab998541b8b7f2" @@ -2998,7 +2869,7 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@slorber/static-site-generator-webpack-plugin@^4.0.4", "@slorber/static-site-generator-webpack-plugin@^4.0.7": +"@slorber/static-site-generator-webpack-plugin@^4.0.7": version "4.0.7" resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== @@ -4892,7 +4763,7 @@ dependencies: "@types/react" "*" -"@types/react-router-config@*": +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": version "5.0.6" resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== @@ -5697,10 +5568,10 @@ ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: require-from-string "^2.0.2" uri-js "^4.2.2" -algoliasearch-helper@^3.8.2: - version "3.9.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.9.0.tgz#1e99d351ecdcff48449644157a8d250c7c592828" - integrity sha512-siWWl8QYJ3sh1yzJf9h/cHHpZC8wuPoPdVx5OtQ8X62ruUembTwvsLYoicrL7pF7fsYxdyvJfV9Yb2/nrVGrfg== +algoliasearch-helper@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.10.0.tgz#59a0f645dd3c7e55cf01faa568d1af50c49d36f6" + integrity sha512-4E4od8qWWDMVvQ3jaRX6Oks/k35ywD011wAA4LbYMMjOtaZV6VWaTjRr4iN2bdaXP2o1BP7SLFMBf3wvnHmd8Q== dependencies: "@algolia/events" "^4.0.1" @@ -6929,7 +6800,7 @@ case-sensitive-paths-webpack-plugin@^2.3.0, case-sensitive-paths-webpack-plugin@ resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -ccount@^1.0.0, ccount@^1.0.3: +ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== @@ -7022,7 +6893,7 @@ cheerio-select@^2.1.0: domhandler "^5.0.3" domutils "^3.0.1" -cheerio@^1.0.0-rc.1, cheerio@^1.0.0-rc.11: +cheerio@^1.0.0-rc.1: version "1.0.0-rc.11" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.11.tgz#1be84be1a126958366bcc57a11648cd9b30a60c2" integrity sha512-bQwNaDIBKID5ts/DsdhxrjqFXYfLw4ste+wMKqWA8DyKcS4qwsPP4Bk8ZNaTJjvpiX/qW3BT4sU7d6Bh5i+dag== @@ -7036,6 +6907,19 @@ cheerio@^1.0.0-rc.1, cheerio@^1.0.0-rc.11: parse5-htmlparser2-tree-adapter "^7.0.0" tslib "^2.4.0" +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -7195,7 +7079,7 @@ clone@~2.1.2: resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== -clsx@^1.1.1, clsx@^1.2.1: +clsx@^1.2.0, clsx@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== @@ -7534,7 +7418,7 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.0.4, core-js@^3.19.2, core-js@^3.22.7, core-js@^3.23.3, core-js@^3.6.5, core-js@^3.8.2: +core-js@^3.0.4, core-js@^3.19.2, core-js@^3.23.3, core-js@^3.6.5, core-js@^3.8.2: version "3.23.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.23.4.tgz#92d640faa7f48b90bbd5da239986602cfc402aa6" integrity sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ== @@ -7875,7 +7759,7 @@ cssesc@^3.0.0: resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-advanced@^5.3.5, cssnano-preset-advanced@^5.3.8: +cssnano-preset-advanced@^5.3.8: version "5.3.8" resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.8.tgz#027b1d05ef896d908178c483f0ec4190cb50ef9a" integrity sha512-xUlLLnEB1LjpEik+zgRNlk8Y/koBPPtONZjp7JKbXigeAmCrFvq9H0pXW5jJV45bQWAlmJ0sKy+IMr0XxLYQZg== @@ -7927,7 +7811,7 @@ cssnano-utils@^3.1.0: resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== -cssnano@^5.0.6, cssnano@^5.1.12, cssnano@^5.1.8, cssnano@^5.1.9: +cssnano@^5.0.6, cssnano@^5.1.12, cssnano@^5.1.8: version "5.1.12" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.12.tgz#bcd0b64d6be8692de79332c501daa7ece969816c" integrity sha512-TgvArbEZu0lk/dvg2ja+B7kYoD7BBCmn3+k58xD0qjrGHsFzXY/wKTo9M5egcUCabPol05e/PVoIu79s2JN4WQ== @@ -10303,17 +10187,6 @@ hast-to-hyperscript@^9.0.0: unist-util-is "^4.0.0" web-namespaces "^1.0.0" -hast-util-from-parse5@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz#3089dc0ee2ccf6ec8bc416919b51a54a589e097c" - integrity sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA== - dependencies: - ccount "^1.0.3" - hastscript "^5.0.0" - property-information "^5.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" - hast-util-from-parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" @@ -10380,16 +10253,6 @@ hast-util-to-text@^2.0.0: repeat-string "^1.0.0" unist-util-find-after "^3.0.0" -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hastscript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" @@ -10787,10 +10650,10 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -infima@0.2.0-alpha.39: - version "0.2.0-alpha.39" - resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.39.tgz#054b13ac44f3e9a42bc083988f1a1586add2f59c" - integrity sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw== +infima@0.2.0-alpha.41: + version "0.2.0-alpha.41" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.41.tgz#a9b5c7dd2119a151c542e8950a2f9333b204dae4" + integrity sha512-i2RzEkNhaVXMIp54PS3coINbMGzAAbdumBcA0GQGFYAu2p1Y44EKOrI2kYoHt9iac736swdB7z3muU46+DL8AA== inflight@^1.0.4: version "1.0.6" @@ -12820,7 +12683,7 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-css-extract-plugin@^2.4.5, mini-css-extract-plugin@^2.6.0, mini-css-extract-plugin@^2.6.1: +mini-css-extract-plugin@^2.4.5, mini-css-extract-plugin@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== @@ -13730,11 +13593,6 @@ parse5@6.0.1, parse5@^6.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - parse5@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" @@ -14751,7 +14609,7 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^1.3.3, prism-react-renderer@^1.3.5: +prism-react-renderer@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== @@ -15653,15 +15511,6 @@ rehype-katex@^5: unified "^9.0.0" unist-util-visit "^2.0.0" -rehype-parse@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" - integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.0" - rehype-parse@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-7.0.1.tgz#58900f6702b56767814afc2a9efa2d42b1c90c57" @@ -15682,15 +15531,6 @@ release-zalgo@^1.0.0: dependencies: es6-error "^4.0.1" -remark-admonitions@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" - integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== - dependencies: - rehype-parse "^6.0.2" - unified "^8.4.2" - unist-util-visit "^2.0.1" - remark-emoji@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" @@ -17280,7 +17120,7 @@ terser-webpack-plugin@^4.2.3: terser "^5.3.4" webpack-sources "^1.4.3" -terser-webpack-plugin@^5.0.3, terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.3: +terser-webpack-plugin@^5.0.3, terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5, terser-webpack-plugin@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== @@ -17787,17 +17627,6 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" -unified@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" - integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - unified@^9.0.0, unified@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" @@ -17897,7 +17726,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.3: +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -18687,7 +18516,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0, web-namespaces@^1.1.2: +web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== @@ -18784,7 +18613,7 @@ webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.0, webpack-dev-server@^4.9.3: +webpack-dev-server@^4.6.0, webpack-dev-server@^4.9.3: version "4.9.3" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== @@ -18920,7 +18749,7 @@ webpack@4: watchpack "^1.7.4" webpack-sources "^1.4.1" -"webpack@>=4.43.0 <6.0.0", webpack@^5, webpack@^5.64.4, webpack@^5.72.1, webpack@^5.73.0, webpack@^5.9.0: +"webpack@>=4.43.0 <6.0.0", webpack@^5, webpack@^5.64.4, webpack@^5.73.0, webpack@^5.9.0: version "5.73.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== From 7fd401245448b22ccc7d6bce1a4d98c4c7037aa9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:51:55 +0000 Subject: [PATCH 47/60] :arrow_up: Bump @typescript-eslint/eslint-plugin from 5.30.5 to 5.30.6 Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.30.5 to 5.30.6. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.30.6/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 72 +++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index a28711fe..f625868b 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -139,7 +139,7 @@ "@types/glob": "^7.2.0", "@types/node": "18.x", "@types/vscode": "^1.69.0", - "@typescript-eslint/eslint-plugin": "^5.30.5", + "@typescript-eslint/eslint-plugin": "^5.30.6", "@typescript-eslint/parser": "^5.30.5", "eslint": "^8.19.0", "glob": "^8.0.3", diff --git a/yarn.lock b/yarn.lock index 6c9de6db..b3ef9006 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5101,14 +5101,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.30.5", "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz#e9a0afd6eb3b1d663db91cf1e7bc7584d394503d" - integrity sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig== +"@typescript-eslint/eslint-plugin@^5.30.6", "@typescript-eslint/eslint-plugin@^5.5.0": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.6.tgz#9c6017b6c1d04894141b4a87816388967f64c359" + integrity sha512-J4zYMIhgrx4MgnZrSDD7sEnQp7FmhKNOaqaOpaoQ/SfdMfRB/0yvK74hTnvH+VQxndZynqs5/Hn4t+2/j9bADg== dependencies: - "@typescript-eslint/scope-manager" "5.30.5" - "@typescript-eslint/type-utils" "5.30.5" - "@typescript-eslint/utils" "5.30.5" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/type-utils" "5.30.6" + "@typescript-eslint/utils" "5.30.6" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -5149,12 +5149,20 @@ "@typescript-eslint/types" "5.30.5" "@typescript-eslint/visitor-keys" "5.30.5" -"@typescript-eslint/type-utils@5.30.5": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz#7a9656f360b4b1daea635c4621dab053d08bf8a9" - integrity sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw== +"@typescript-eslint/scope-manager@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz#ce1b49ff5ce47f55518d63dbe8fc9181ddbd1a33" + integrity sha512-Hkq5PhLgtVoW1obkqYH0i4iELctEKixkhWLPTYs55doGUKCASvkjOXOd/pisVeLdO24ZX9D6yymJ/twqpJiG3g== dependencies: - "@typescript-eslint/utils" "5.30.5" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/visitor-keys" "5.30.6" + +"@typescript-eslint/type-utils@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.6.tgz#a64aa9acbe609ab77f09f53434a6af2b9685f3af" + integrity sha512-GFVVzs2j0QPpM+NTDMXtNmJKlF842lkZKDSanIxf+ArJsGeZUIaeT4jGg+gAgHt7AcQSFwW7htzF/rbAh2jaVA== + dependencies: + "@typescript-eslint/utils" "5.30.6" debug "^4.3.4" tsutils "^3.21.0" @@ -5168,6 +5176,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== +"@typescript-eslint/types@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.6.tgz#86369d0a7af8c67024115ac1da3e8fb2d38907e1" + integrity sha512-HdnP8HioL1F7CwVmT4RaaMX57RrfqsOMclZc08wGMiDYJBsLGBM7JwXM4cZJmbWLzIR/pXg1kkrBBVpxTOwfUg== + "@typescript-eslint/typescript-estree@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" @@ -5194,6 +5207,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz#a84a0d6a486f9b54042da1de3d671a2c9f14484e" + integrity sha512-Z7TgPoeYUm06smfEfYF0RBkpF8csMyVnqQbLYiGgmUSTaSXTP57bt8f0UFXstbGxKIreTwQCujtaH0LY9w9B+A== + dependencies: + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/visitor-keys" "5.30.6" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" @@ -5206,15 +5232,15 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/utils@5.30.5", "@typescript-eslint/utils@^5.13.0": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.5.tgz#3999cbd06baad31b9e60d084f20714d1b2776765" - integrity sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA== +"@typescript-eslint/utils@5.30.6", "@typescript-eslint/utils@^5.13.0": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.6.tgz#1de2da14f678e7d187daa6f2e4cdb558ed0609dc" + integrity sha512-xFBLc/esUbLOJLk9jKv0E9gD/OH966M40aY9jJ8GiqpSkP2xOV908cokJqqhVd85WoIvHVHYXxSFE4cCSDzVvA== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.5" - "@typescript-eslint/types" "5.30.5" - "@typescript-eslint/typescript-estree" "5.30.5" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/typescript-estree" "5.30.6" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -5234,6 +5260,14 @@ "@typescript-eslint/types" "5.30.5" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.30.6": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz#94dd10bb481c8083378d24de1742a14b38a2678c" + integrity sha512-41OiCjdL2mCaSDi2SvYbzFLlqqlm5v1ZW9Ym55wXKL/Rx6OOB1IbuFGo71Fj6Xy90gJDFTlgOS+vbmtGHPTQQA== + dependencies: + "@typescript-eslint/types" "5.30.6" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From a9177e585c362632ab331cea4f2cf3b0be4be645 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 17:59:23 +0000 Subject: [PATCH 48/60] :arrow_up: Bump postcss-cli from 9.1.0 to 10.0.0 Bumps [postcss-cli](https://github.com/postcss/postcss-cli) from 9.1.0 to 10.0.0. - [Release notes](https://github.com/postcss/postcss-cli/releases) - [Changelog](https://github.com/postcss/postcss-cli/blob/master/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss-cli/compare/9.1.0...10.0.0) --- updated-dependencies: - dependency-name: postcss-cli dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- packages/components/package.json | 2 +- yarn.lock | 45 +++++++------------------------- 2 files changed, 11 insertions(+), 36 deletions(-) diff --git a/packages/components/package.json b/packages/components/package.json index c3499287..de30afb0 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -43,7 +43,7 @@ "@types/webpack": "^5.28.0", "cross-env": "^7.0.3", "mini-css-extract-plugin": "^2.6.1", - "postcss-cli": "^9.1.0", + "postcss-cli": "^10.0.0", "postcss-import": "^14.1.0", "postcss-loader": "^7.0.1", "react": "^18.1.0", diff --git a/yarn.lock b/yarn.lock index 54a270c4..c141e224 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5819,11 +5819,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-union@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975" - integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw== - array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -9236,7 +9231,7 @@ fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -9955,19 +9950,7 @@ globby@^11.0.1, globby@^11.0.2, globby@^11.0.4, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -globby@^12.0.0: - version "12.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-12.2.0.tgz#2ab8046b4fba4ff6eede835b29f678f90e3d3c22" - integrity sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA== - dependencies: - array-union "^3.0.1" - dir-glob "^3.0.1" - fast-glob "^3.2.7" - ignore "^5.1.9" - merge2 "^1.4.1" - slash "^4.0.0" - -globby@^13.1.1: +globby@^13.0.0, globby@^13.1.1: version "13.1.2" resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== @@ -10585,7 +10568,7 @@ ignore@^4.0.3: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.9, ignore@^5.2.0: +ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -13885,18 +13868,18 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-cli@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-9.1.0.tgz#1a86404cbe848e370127b4bdf5cd2be83bc45ebe" - integrity sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw== +postcss-cli@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.0.0.tgz#404e468d1ff39fb5ead3f707e2021be7cd3f8c9f" + integrity sha512-Wjy/00wBBEgQqnSToznxLWDnATznokFGXsHtF/3G8glRZpz5KYlfHcBW/VMJmWAeF2x49zjgy4izjM3/Wx1dKA== dependencies: chokidar "^3.3.0" dependency-graph "^0.11.0" fs-extra "^10.0.0" get-stdin "^9.0.0" - globby "^12.0.0" + globby "^13.0.0" picocolors "^1.0.0" - postcss-load-config "^3.0.0" + postcss-load-config "^4.0.0" postcss-reporter "^7.0.0" pretty-hrtime "^1.0.3" read-cache "^1.0.0" @@ -14084,15 +14067,7 @@ postcss-lab-function@^4.2.0: "@csstools/postcss-progressive-custom-properties" "^1.1.0" postcss-value-parser "^4.2.0" -postcss-load-config@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" - integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== - dependencies: - lilconfig "^2.0.5" - yaml "^1.10.2" - -postcss-load-config@^4.0.1: +postcss-load-config@^4.0.0, postcss-load-config@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== From 9a5c101d9d272b8f5b8ed61db02688c4adab0c67 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Jul 2022 18:07:30 +0000 Subject: [PATCH 49/60] :arrow_up: Bump @typescript-eslint/parser from 5.30.5 to 5.30.6 Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.30.5 to 5.30.6. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.30.6/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- packages/vscode-ext/package.json | 2 +- yarn.lock | 48 +++++--------------------------- 2 files changed, 8 insertions(+), 42 deletions(-) diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index f625868b..f0d27723 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -140,7 +140,7 @@ "@types/node": "18.x", "@types/vscode": "^1.69.0", "@typescript-eslint/eslint-plugin": "^5.30.6", - "@typescript-eslint/parser": "^5.30.5", + "@typescript-eslint/parser": "^5.30.6", "eslint": "^8.19.0", "glob": "^8.0.3", "js-yaml": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index b9375ed9..0b1e2d36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4994,14 +4994,14 @@ dependencies: "@typescript-eslint/utils" "5.29.0" -"@typescript-eslint/parser@^5.30.5", "@typescript-eslint/parser@^5.5.0": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.5.tgz#f667c34e4e4c299d98281246c9b1e68c03a92522" - integrity sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q== +"@typescript-eslint/parser@^5.30.6", "@typescript-eslint/parser@^5.5.0": + version "5.30.6" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.6.tgz#add440db038fa9d777e4ebdaf66da9e7fb7abe92" + integrity sha512-gfF9lZjT0p2ZSdxO70Xbw8w9sPPJGfAdjK7WikEjB3fcUI/yr9maUVEdqigBjKincUYNKOmf7QBMiTf719kbrA== dependencies: - "@typescript-eslint/scope-manager" "5.30.5" - "@typescript-eslint/types" "5.30.5" - "@typescript-eslint/typescript-estree" "5.30.5" + "@typescript-eslint/scope-manager" "5.30.6" + "@typescript-eslint/types" "5.30.6" + "@typescript-eslint/typescript-estree" "5.30.6" debug "^4.3.4" "@typescript-eslint/scope-manager@5.29.0": @@ -5012,14 +5012,6 @@ "@typescript-eslint/types" "5.29.0" "@typescript-eslint/visitor-keys" "5.29.0" -"@typescript-eslint/scope-manager@5.30.5": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz#7f90b9d6800552c856a5f3644f5e55dd1469d964" - integrity sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg== - dependencies: - "@typescript-eslint/types" "5.30.5" - "@typescript-eslint/visitor-keys" "5.30.5" - "@typescript-eslint/scope-manager@5.30.6": version "5.30.6" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.6.tgz#ce1b49ff5ce47f55518d63dbe8fc9181ddbd1a33" @@ -5042,11 +5034,6 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== -"@typescript-eslint/types@5.30.5": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.5.tgz#36a0c05a72af3623cdf9ee8b81ea743b7de75a98" - integrity sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw== - "@typescript-eslint/types@5.30.6": version "5.30.6" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.6.tgz#86369d0a7af8c67024115ac1da3e8fb2d38907e1" @@ -5065,19 +5052,6 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.30.5": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz#c520e4eba20551c4ec76af8d344a42eb6c9767bb" - integrity sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ== - dependencies: - "@typescript-eslint/types" "5.30.5" - "@typescript-eslint/visitor-keys" "5.30.5" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.30.6": version "5.30.6" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.6.tgz#a84a0d6a486f9b54042da1de3d671a2c9f14484e" @@ -5123,14 +5097,6 @@ "@typescript-eslint/types" "5.29.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.30.5": - version "5.30.5" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz#d4bb969202019d5d5d849a0aaedc7370cc044b14" - integrity sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA== - dependencies: - "@typescript-eslint/types" "5.30.5" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.30.6": version "5.30.6" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.6.tgz#94dd10bb481c8083378d24de1742a14b38a2678c" From 20114d9a845e658935613bd69414ce138c703106 Mon Sep 17 00:00:00 2001 From: Quinn Dougherty Date: Mon, 11 Jul 2022 14:23:58 -0400 Subject: [PATCH 50/60] Made new test call polymorphic constructor #ToFloat --- .../squiggle-lang/__tests__/Distributions/Symbolic_test.res | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res b/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res index ae4faec2..976ee09f 100644 --- a/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/Symbolic_test.res @@ -85,7 +85,7 @@ describe("(Symbolic) mean", () => { let betaDistribution = SymbolicDist.Beta.fromMeanAndStdev(mean, stdev) let meanValue = betaDistribution->E.R2.fmap(d => - run(FromDist(ToFloat(#Mean), d->DistributionTypes.Symbolic)) + run(FromDist(#ToFloat(#Mean), d->DistributionTypes.Symbolic)) ) switch meanValue { | Ok(value) => value->unpackFloat->expect->toBeCloseTo(mean) From af4423cc2e169399ce2e519bb85a2d132648137f Mon Sep 17 00:00:00 2001 From: Sam Nolan Date: Tue, 12 Jul 2022 12:50:20 +1000 Subject: [PATCH 51/60] v0.2.23 --- packages/components/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/components/package.json b/packages/components/package.json index de30afb0..765a0c0a 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@quri/squiggle-components", - "version": "0.2.20", + "version": "0.2.23", "license": "MIT", "dependencies": { "@headlessui/react": "^1.6.6", From 652394f53529dbf09d7a461656bb28c5b20f8263 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Tue, 12 Jul 2022 09:45:41 -0700 Subject: [PATCH 52/60] Prior can't be a point --- .../Distributions/DistributionOperation.res | 2 +- .../Distributions/DistributionOperation.resi | 4 +- .../Distributions/DistributionTypes.res | 2 +- .../rescript/Distributions/GenericDist.res | 37 +++++++------------ .../rescript/Distributions/GenericDist.resi | 4 +- .../PointSetDist/PointSetDist_Scoring.res | 2 +- .../ReducerInterface_GenericDistribution.res | 10 +---- 7 files changed, 23 insertions(+), 38 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 1b2fb0e9..9f8c7549 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -146,7 +146,7 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { } | #ToDist(Normalize) => dist->GenericDist.normalize->Dist | #ToScore(LogScore(answer, prior)) => - GenericDist.Score.logScore(~estimate=Score_Dist(dist), ~answer, ~prior) + GenericDist.Score.logScore(~estimate=dist, ~answer, ~prior) ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult | #ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index c39dab7f..d5ca7326 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -72,7 +72,7 @@ module Constructors: { ~env: env, genericDist, genericDist, - DistributionTypes.DistributionOperation.genericDistOrScalar, + genericDist, ) => result @genType let distEstimateScalarAnswer: (~env: env, genericDist, float) => result @@ -81,7 +81,7 @@ module Constructors: { ~env: env, genericDist, float, - DistributionTypes.DistributionOperation.genericDistOrScalar, + genericDist, ) => result } @genType diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res index b607b8e4..0c119ea4 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionTypes.res @@ -100,7 +100,7 @@ module DistributionOperation = { type genericDistOrScalar = Score_Dist(genericDist) | Score_Scalar(float) - type toScore = LogScore(genericDistOrScalar, option) + type toScore = LogScore(genericDistOrScalar, option) type fromFloat = [ | #ToFloat(toFloat) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 17adf244..db2a559a 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -133,13 +133,11 @@ let toPointSet = ( module Score = { type genericDistOrScalar = DistributionTypes.DistributionOperation.genericDistOrScalar - type pointSet_ScoreDistOrScalar = PSDist(PointSetTypes.pointSetDist) | PSScalar(float) - let argsMake = ( - ~esti: genericDistOrScalar, - ~answ: genericDistOrScalar, - ~prior: option, - ): result => { + let argsMake = (~esti: t, ~answ: genericDistOrScalar, ~prior: option): result< + PointSetDist_Scoring.scoreArgs, + error, + > => { let toPointSetFn = t => toPointSet( t, @@ -148,21 +146,20 @@ module Score = { ~xSelection=#ByWeight, (), ) - let prior': option> = switch prior { + let prior': option> = switch prior { | None => None - | Some(Score_Dist(d)) => toPointSetFn(d)->E.R.bind(x => x->PSDist->Ok)->Some - | Some(Score_Scalar(s)) => s->PSScalar->Ok->Some + | Some(d) => toPointSetFn(d)->Some } let twoDists = (~toPointSetFn, esti': t, answ': t): result< (PointSetTypes.pointSetDist, PointSetTypes.pointSetDist), error, > => E.R.merge(toPointSetFn(esti'), toPointSetFn(answ')) switch (esti, answ, prior') { - | (Score_Dist(esti'), Score_Dist(answ'), None) => + | (esti', Score_Dist(answ'), None) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => {estimate: esti'', answer: answ'', prior: None}->PointSetDist_Scoring.DistAnswer ) - | (Score_Dist(esti'), Score_Dist(answ'), Some(Ok(PSDist(prior'')))) => + | (esti', Score_Dist(answ'), Some(Ok(prior''))) => twoDists(~toPointSetFn, esti', answ')->E.R2.fmap(((esti'', answ'')) => { estimate: esti'', @@ -170,8 +167,7 @@ module Score = { prior: Some(prior''), }->PointSetDist_Scoring.DistAnswer ) - | (Score_Dist(_), _, Some(Ok(PSScalar(_)))) => DistributionTypes.Unreachable->Error - | (Score_Dist(esti'), Score_Scalar(answ'), None) => + | (esti', Score_Scalar(answ'), None) => toPointSetFn(esti')->E.R2.fmap(esti'' => { estimate: esti'', @@ -179,7 +175,7 @@ module Score = { prior: None, }->PointSetDist_Scoring.ScalarAnswer ) - | (Score_Dist(esti'), Score_Scalar(answ'), Some(Ok(PSDist(prior'')))) => + | (esti', Score_Scalar(answ'), Some(Ok(prior''))) => toPointSetFn(esti')->E.R2.fmap(esti'' => { estimate: esti'', @@ -187,19 +183,14 @@ module Score = { prior: Some(prior''), }->PointSetDist_Scoring.ScalarAnswer ) - | (Score_Scalar(_), Score_Dist(_), None) => NotYetImplemented->Error - | (Score_Scalar(_), Score_Dist(_), Some(Ok(PSScalar(_)))) => NotYetImplemented->Error - | (Score_Scalar(_), _, Some(Ok(PSDist(_)))) => DistributionTypes.Unreachable->Error - | (Score_Scalar(_), Score_Scalar(_), _) => NotYetImplemented->Error | (_, _, Some(Error(err))) => err->Error } } - let logScore = ( - ~estimate: genericDistOrScalar, - ~answer: genericDistOrScalar, - ~prior: option, - ): result => + let logScore = (~estimate: t, ~answer: genericDistOrScalar, ~prior: option): result< + float, + error, + > => argsMake(~esti=estimate, ~answ=answer, ~prior)->E.R.bind(x => x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) ) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi index 432ae847..d4f8933d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi @@ -26,9 +26,9 @@ let toFloatOperation: ( module Score: { let logScore: ( - ~estimate: DistributionTypes.DistributionOperation.genericDistOrScalar, + ~estimate: t, ~answer: DistributionTypes.DistributionOperation.genericDistOrScalar, - ~prior: option, + ~prior: option, ) => result } diff --git a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res index 5e8eb489..8e5d71a4 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res +++ b/packages/squiggle-lang/src/rescript/Distributions/PointSetDist/PointSetDist_Scoring.res @@ -19,7 +19,7 @@ module WithDistAnswer = { float, Operation.Error.t, > => - // We decided that negative infinity, not an error at answerElement = 0.0, is a desirable value. + // We decided that 0.0, not an error at answerElement = 0.0, is a desirable value. if answerElement == 0.0 { Ok(0.0) } else if estimateElement == 0.0 { diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index b73f84e0..e66fba9b 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -231,10 +231,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio DistributionOperation.run( FromDist( #ToScore( - LogScore( - DistributionTypes.DistributionOperation.Score_Dist(answer), - Some(DistributionTypes.DistributionOperation.Score_Dist(prior)), - ), + LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), Some(prior)), ), prediction, ), @@ -256,10 +253,7 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio DistributionOperation.run( FromDist( #ToScore( - LogScore( - DistributionTypes.DistributionOperation.Score_Scalar(answer), - DistributionTypes.DistributionOperation.Score_Dist(prior)->Some, - ), + LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), prior->Some), ), prediction, ), From 3d71d7bf4e5ad8cb174d604d8371cd2c3a2e856a Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 13 Jul 2022 08:56:22 -0700 Subject: [PATCH 53/60] Replaced some scoring functions with functionRegistry functions --- .../FunctionRegistry_Core.res | 3 + .../FunctionRegistry_Helpers.res | 16 ++++++ .../FunctionRegistry_Library.res | 57 ++++++++++++++++++- .../ReducerInterface_GenericDistribution.res | 48 ---------------- 4 files changed, 75 insertions(+), 49 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res index bbca7bc7..4eff7945 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res @@ -8,6 +8,7 @@ type rec frType = | FRTypeNumber | FRTypeNumeric | FRTypeDistOrNumber + | FRTypeDist | FRTypeLambda | FRTypeRecord(frTypeRecord) | FRTypeDict(frType) @@ -60,6 +61,7 @@ module FRType = { switch t { | FRTypeNumber => "number" | FRTypeNumeric => "numeric" + | FRTypeDist => "distribution" | FRTypeDistOrNumber => "distribution|number" | FRTypeRecord(r) => { let input = ((name, frType): frTypeRecordParam) => `${name}: ${toString(frType)}` @@ -98,6 +100,7 @@ module FRType = { | (FRTypeDistOrNumber, IEvDistribution(Symbolic(#Float(f)))) => Some(FRValueDistOrNumber(FRValueNumber(f))) | (FRTypeDistOrNumber, IEvDistribution(f)) => Some(FRValueDistOrNumber(FRValueDist(f))) + | (FRTypeDist, IEvDistribution(f)) => Some(FRValueDist(f)) | (FRTypeNumeric, IEvNumber(f)) => Some(FRValueNumber(f)) | (FRTypeNumeric, IEvDistribution(Symbolic(#Float(f)))) => Some(FRValueNumber(f)) | (FRTypeLambda, IEvLambda(f)) => Some(FRValueLambda(f)) diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res index 46ae18f9..a1d530b1 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res @@ -27,6 +27,12 @@ module Prepare = { | _ => Error(impossibleError) } + let threeArgs = (inputs: ts): result => + switch inputs { + | [FRValueRecord([(_, n1), (_, n2), (_, n3)])] => Ok([n1, n2, n3]) + | _ => Error(impossibleError) + } + let toArgs = (inputs: ts): result => switch inputs { | [FRValueRecord(args)] => args->E.A2.fmap(((_, b)) => b)->Ok @@ -57,6 +63,13 @@ module Prepare = { } } + let twoDist = (values: ts): result<(DistributionTypes.genericDist, DistributionTypes.genericDist), err> => { + switch values { + | [FRValueDist(a1), FRValueDist(a2)] => Ok(a1, a2) + | _ => Error(impossibleError) + } + } + let twoNumbers = (values: ts): result<(float, float), err> => { switch values { | [FRValueNumber(a1), FRValueNumber(a2)] => Ok(a1, a2) @@ -81,6 +94,9 @@ module Prepare = { module Record = { let twoDistOrNumber = (values: ts): result<(frValueDistOrNumber, frValueDistOrNumber), err> => values->ToValueArray.Record.twoArgs->E.R.bind(twoDistOrNumber) + + let twoDist = (values: ts): result<(DistributionTypes.genericDist, DistributionTypes.genericDist), err> => + values->ToValueArray.Record.twoArgs->E.R.bind(twoDist) } } diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res index a37b8dc4..9e8a2681 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res @@ -49,7 +49,7 @@ let inputsTodist = (inputs: array, makeDist) => { expressionValue } -let registry = [ +let registryStart = [ Function.make( ~name="toContinuousPointSet", ~definitions=[ @@ -510,3 +510,58 @@ to(5,10) (), ), ] + +let runScoring = (estimate, answer, prior) => { + GenericDist.Score.logScore(~estimate, ~answer, ~prior) + ->E.R2.fmap(FunctionRegistry_Helpers.Wrappers.evNumber) + ->E.R2.errMap(DistributionTypes.Error.toString) +} + +let scoreFunctions = [ + Function.make( + ~name="Score", + ~definitions=[ + FnDefinition.make( + ~name="logScore", + ~inputs=[ + FRTypeRecord([ + ("estimate", FRTypeDist), + ("answer", FRTypeDistOrNumber), + ("prior", FRTypeDist), + ]), + ], + ~run=(inputs, _) => { + switch FunctionRegistry_Helpers.Prepare.ToValueArray.Record.threeArgs(inputs) { + | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueDist(d)), FRValueDist(prior)]) => + runScoring(estimate, Score_Dist(d), Some(prior)) + | Ok([ + FRValueDist(estimate), + FRValueDistOrNumber(FRValueNumber(d)), + FRValueDist(prior), + ]) => + runScoring(estimate, Score_Scalar(d), Some(prior)) + | Error(e) => Error(e) + | _ => Error(FunctionRegistry_Helpers.impossibleError) + } + }, + ), + FnDefinition.make( + ~name="logScore", + ~inputs=[FRTypeRecord([("estimate", FRTypeDist), ("answer", FRTypeDistOrNumber)])], + ~run=(inputs, _) => { + switch FunctionRegistry_Helpers.Prepare.ToValueArray.Record.twoArgs(inputs) { + | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueDist(d))]) => + runScoring(estimate, Score_Dist(d), None) + | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueNumber(d))]) => + runScoring(estimate, Score_Scalar(d), None) + | Error(e) => Error(e) + | _ => Error(FunctionRegistry_Helpers.impossibleError) + } + }, + ), + ], + (), + ), +] + +let registry = E.A.append(registryStart, scoreFunctions) diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index e66fba9b..d17d5061 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -223,54 +223,6 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ~env, ), ) - | ( - "klDivergence", - [IEvDistribution(prediction), IEvDistribution(answer), IEvDistribution(prior)], - ) => - Some( - DistributionOperation.run( - FromDist( - #ToScore( - LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), Some(prior)), - ), - prediction, - ), - ~env, - ), - ) - | ( - "logScoreWithPointAnswer", - [IEvDistribution(prediction), IEvNumber(answer), IEvDistribution(prior)], - ) - | ( - "logScoreWithPointAnswer", - [ - IEvDistribution(prediction), - IEvDistribution(Symbolic(#Float(answer))), - IEvDistribution(prior), - ], - ) => - DistributionOperation.run( - FromDist( - #ToScore( - LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), prior->Some), - ), - prediction, - ), - ~env, - )->Some - | ("logScoreWithPointAnswer", [IEvDistribution(prediction), IEvNumber(answer)]) - | ( - "logScoreWithPointAnswer", - [IEvDistribution(prediction), IEvDistribution(Symbolic(#Float(answer)))], - ) => - DistributionOperation.run( - FromDist( - #ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Scalar(answer), None)), - prediction, - ), - ~env, - )->Some | ("isNormalized", [IEvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) | ("toPointSet", [IEvDistribution(dist)]) => Helpers.toDistFn(ToPointSet, dist, ~env) | ("scaleLog", [IEvDistribution(dist)]) => From 78e9e48626d466ff26c3a97183425fef5278ce45 Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 13 Jul 2022 09:37:39 -0700 Subject: [PATCH 54/60] Moved env to GenericDist, and used it --- .../DistributionOperation_test.res | 2 +- .../squiggle-lang/__tests__/TestHelpers.res | 2 +- .../Distributions/DistributionOperation.res | 11 +- .../Distributions/DistributionOperation.resi | 146 ++++++++++++------ .../rescript/Distributions/GenericDist.res | 23 ++- .../rescript/Distributions/GenericDist.resi | 4 + .../FunctionRegistry_Core.res | 6 +- .../FunctionRegistry_Helpers.res | 6 +- .../FunctionRegistry_Library.res | 25 ++- .../ReducerInterface_Date.res | 2 +- .../ReducerInterface_Duration.res | 2 +- ...ducerInterface_ExternalExpressionValue.res | 2 +- .../ReducerInterface_GenericDistribution.res | 28 ++-- .../ReducerInterface_Number.res | 2 +- .../src/rescript/TypescriptInterface.res | 2 +- 15 files changed, 162 insertions(+), 101 deletions(-) diff --git a/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res b/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res index 54ce40a8..5af6f8e0 100644 --- a/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res +++ b/packages/squiggle-lang/__tests__/Distributions/DistributionOperation_test.res @@ -1,7 +1,7 @@ open Jest open Expect -let env: DistributionOperation.env = { +let env: GenericDist.env = { sampleCount: 100, xyPointLength: 100, } diff --git a/packages/squiggle-lang/__tests__/TestHelpers.res b/packages/squiggle-lang/__tests__/TestHelpers.res index 71805c70..898bb3a9 100644 --- a/packages/squiggle-lang/__tests__/TestHelpers.res +++ b/packages/squiggle-lang/__tests__/TestHelpers.res @@ -29,7 +29,7 @@ let {toFloat, toDist, toString, toError, fmap} = module(DistributionOperation.Ou let fnImage = (theFn, inps) => Js.Array.map(theFn, inps) -let env: DistributionOperation.env = { +let env: GenericDist.env = { sampleCount: MagicNumbers.Environment.defaultSampleCount, xyPointLength: MagicNumbers.Environment.defaultXYPointLength, } diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 9f8c7549..6df75749 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -4,12 +4,9 @@ type error = DistributionTypes.error // TODO: It could be great to use a cache for some calculations (basically, do memoization). Also, better analytics/tracking could go a long way. -type env = { - sampleCount: int, - xyPointLength: int, -} +type env = GenericDist.env -let defaultEnv = { +let defaultEnv:env = { sampleCount: MagicNumbers.Environment.defaultSampleCount, xyPointLength: MagicNumbers.Environment.defaultXYPointLength, } @@ -93,7 +90,7 @@ module OutputLocal = { } } -let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { +let rec run = (~env:env, functionCallInfo: functionCallInfo): outputType => { let {sampleCount, xyPointLength} = env let reCall = (~env=env, ~functionCallInfo=functionCallInfo, ()) => { @@ -146,7 +143,7 @@ let rec run = (~env, functionCallInfo: functionCallInfo): outputType => { } | #ToDist(Normalize) => dist->GenericDist.normalize->Dist | #ToScore(LogScore(answer, prior)) => - GenericDist.Score.logScore(~estimate=dist, ~answer, ~prior) + GenericDist.Score.logScore(~estimate=dist, ~answer, ~prior, ~env) ->E.R2.fmap(s => Float(s)) ->OutputLocal.fromResult | #ToBool(IsNormalized) => dist->GenericDist.isNormalized->Bool diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi index d5ca7326..68da9534 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.resi @@ -1,11 +1,5 @@ @genType -type env = { - sampleCount: int, - xyPointLength: int, -} - -@genType -let defaultEnv: env +let defaultEnv: GenericDist.env open DistributionTypes @@ -19,14 +13,17 @@ type outputType = | GenDistError(error) @genType -let run: (~env: env, DistributionTypes.DistributionOperation.genericFunctionCallInfo) => outputType +let run: ( + ~env: GenericDist.env, + DistributionTypes.DistributionOperation.genericFunctionCallInfo, +) => outputType let runFromDist: ( - ~env: env, + ~env: GenericDist.env, ~functionCallInfo: DistributionTypes.DistributionOperation.fromDist, genericDist, ) => outputType let runFromFloat: ( - ~env: env, + ~env: GenericDist.env, ~functionCallInfo: DistributionTypes.DistributionOperation.fromFloat, float, ) => outputType @@ -42,90 +39,147 @@ module Output: { let toBool: t => option let toBoolR: t => result let toError: t => option - let fmap: (~env: env, t, DistributionTypes.DistributionOperation.singleParamaterFunction) => t + let fmap: ( + ~env: GenericDist.env, + t, + DistributionTypes.DistributionOperation.singleParamaterFunction, + ) => t } module Constructors: { @genType - let mean: (~env: env, genericDist) => result + let mean: (~env: GenericDist.env, genericDist) => result @genType - let stdev: (~env: env, genericDist) => result + let stdev: (~env: GenericDist.env, genericDist) => result @genType - let variance: (~env: env, genericDist) => result + let variance: (~env: GenericDist.env, genericDist) => result @genType - let sample: (~env: env, genericDist) => result + let sample: (~env: GenericDist.env, genericDist) => result @genType - let cdf: (~env: env, genericDist, float) => result + let cdf: (~env: GenericDist.env, genericDist, float) => result @genType - let inv: (~env: env, genericDist, float) => result + let inv: (~env: GenericDist.env, genericDist, float) => result @genType - let pdf: (~env: env, genericDist, float) => result + let pdf: (~env: GenericDist.env, genericDist, float) => result @genType - let normalize: (~env: env, genericDist) => result + let normalize: (~env: GenericDist.env, genericDist) => result @genType - let isNormalized: (~env: env, genericDist) => result + let isNormalized: (~env: GenericDist.env, genericDist) => result module LogScore: { @genType - let distEstimateDistAnswer: (~env: env, genericDist, genericDist) => result + let distEstimateDistAnswer: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType let distEstimateDistAnswerWithPrior: ( - ~env: env, + ~env: GenericDist.env, genericDist, genericDist, genericDist, ) => result @genType - let distEstimateScalarAnswer: (~env: env, genericDist, float) => result + let distEstimateScalarAnswer: ( + ~env: GenericDist.env, + genericDist, + float, + ) => result @genType let distEstimateScalarAnswerWithPrior: ( - ~env: env, + ~env: GenericDist.env, genericDist, float, genericDist, ) => result } @genType - let toPointSet: (~env: env, genericDist) => result + let toPointSet: (~env: GenericDist.env, genericDist) => result @genType - let toSampleSet: (~env: env, genericDist, int) => result + let toSampleSet: (~env: GenericDist.env, genericDist, int) => result @genType - let fromSamples: (~env: env, SampleSetDist.t) => result + let fromSamples: (~env: GenericDist.env, SampleSetDist.t) => result @genType - let truncate: (~env: env, genericDist, option, option) => result + let truncate: ( + ~env: GenericDist.env, + genericDist, + option, + option, + ) => result @genType - let inspect: (~env: env, genericDist) => result + let inspect: (~env: GenericDist.env, genericDist) => result @genType - let toString: (~env: env, genericDist) => result + let toString: (~env: GenericDist.env, genericDist) => result @genType - let toSparkline: (~env: env, genericDist, int) => result + let toSparkline: (~env: GenericDist.env, genericDist, int) => result @genType - let algebraicAdd: (~env: env, genericDist, genericDist) => result + let algebraicAdd: (~env: GenericDist.env, genericDist, genericDist) => result @genType - let algebraicMultiply: (~env: env, genericDist, genericDist) => result + let algebraicMultiply: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let algebraicDivide: (~env: env, genericDist, genericDist) => result + let algebraicDivide: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let algebraicSubtract: (~env: env, genericDist, genericDist) => result + let algebraicSubtract: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let algebraicLogarithm: (~env: env, genericDist, genericDist) => result + let algebraicLogarithm: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let algebraicPower: (~env: env, genericDist, genericDist) => result + let algebraicPower: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let scaleLogarithm: (~env: env, genericDist, float) => result + let scaleLogarithm: (~env: GenericDist.env, genericDist, float) => result @genType - let scaleMultiply: (~env: env, genericDist, float) => result + let scaleMultiply: (~env: GenericDist.env, genericDist, float) => result @genType - let scalePower: (~env: env, genericDist, float) => result + let scalePower: (~env: GenericDist.env, genericDist, float) => result @genType - let pointwiseAdd: (~env: env, genericDist, genericDist) => result + let pointwiseAdd: (~env: GenericDist.env, genericDist, genericDist) => result @genType - let pointwiseMultiply: (~env: env, genericDist, genericDist) => result + let pointwiseMultiply: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let pointwiseDivide: (~env: env, genericDist, genericDist) => result + let pointwiseDivide: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let pointwiseSubtract: (~env: env, genericDist, genericDist) => result + let pointwiseSubtract: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let pointwiseLogarithm: (~env: env, genericDist, genericDist) => result + let pointwiseLogarithm: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result @genType - let pointwisePower: (~env: env, genericDist, genericDist) => result + let pointwisePower: ( + ~env: GenericDist.env, + genericDist, + genericDist, + ) => result } diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index db2a559a..2d59831a 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -6,6 +6,11 @@ type toSampleSetFn = t => result type scaleMultiplyFn = (t, float) => result type pointwiseAddFn = (t, t) => result +type env = { + sampleCount: int, + xyPointLength: int, +} + let isPointSet = (t: t) => switch t { | PointSet(_) => true @@ -134,15 +139,15 @@ let toPointSet = ( module Score = { type genericDistOrScalar = DistributionTypes.DistributionOperation.genericDistOrScalar - let argsMake = (~esti: t, ~answ: genericDistOrScalar, ~prior: option): result< + let argsMake = (~esti: t, ~answ: genericDistOrScalar, ~prior: option, ~env: env): result< PointSetDist_Scoring.scoreArgs, error, > => { let toPointSetFn = t => toPointSet( t, - ~xyPointLength=MagicNumbers.Environment.defaultXYPointLength, - ~sampleCount=MagicNumbers.Environment.defaultSampleCount, + ~xyPointLength=env.xyPointLength, + ~sampleCount=env.sampleCount, ~xSelection=#ByWeight, (), ) @@ -187,11 +192,13 @@ module Score = { } } - let logScore = (~estimate: t, ~answer: genericDistOrScalar, ~prior: option): result< - float, - error, - > => - argsMake(~esti=estimate, ~answ=answer, ~prior)->E.R.bind(x => + let logScore = ( + ~estimate: t, + ~answer: genericDistOrScalar, + ~prior: option, + ~env: env, + ): result => + argsMake(~esti=estimate, ~answ=answer, ~prior, ~env)->E.R.bind(x => x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) ) } diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi index d4f8933d..24faabe0 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi @@ -5,6 +5,9 @@ type toSampleSetFn = t => result type scaleMultiplyFn = (t, float) => result type pointwiseAddFn = (t, t) => result +@genType +type env = {sampleCount: int, xyPointLength: int} + let sampleN: (t, int) => array let sample: t => float @@ -29,6 +32,7 @@ module Score: { ~estimate: t, ~answer: DistributionTypes.DistributionOperation.genericDistOrScalar, ~prior: option, + ~env: env ) => result } diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res index 4eff7945..c69075d9 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Core.res @@ -42,7 +42,7 @@ and frValueDistOrNumber = FRValueNumber(float) | FRValueDist(DistributionTypes.g type fnDefinition = { name: string, inputs: array, - run: (array, DistributionOperation.env) => result, + run: (array, GenericDist.env) => result, } type function = { @@ -322,7 +322,7 @@ module FnDefinition = { t.name ++ `(${inputs})` } - let run = (t: t, args: array, env: DistributionOperation.env) => { + let run = (t: t, args: array, env: GenericDist.env) => { let argValues = FRType.matchWithExpressionValueArray(t.inputs, args) switch argValues { | Some(values) => t.run(values, env) @@ -377,7 +377,7 @@ module Registry = { ~registry: registry, ~fnName: string, ~args: array, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ) => { let matchToDef = m => Matcher.Registry.matchToDef(registry, m) //Js.log(toSimple(registry)) diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res index a1d530b1..357725e1 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res @@ -144,7 +144,7 @@ module Prepare = { module Process = { module DistOrNumberToDist = { module Helpers = { - let toSampleSet = (r, env: DistributionOperation.env) => + let toSampleSet = (r, env: GenericDist.env) => GenericDist.toSampleSetDist(r, env.sampleCount) let mapFnResult = r => @@ -182,7 +182,7 @@ module Process = { let oneValue = ( ~fn: float => result, ~value: frValueDistOrNumber, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ): result => { switch value { | FRValueNumber(a1) => fn(a1) @@ -195,7 +195,7 @@ module Process = { let twoValues = ( ~fn: ((float, float)) => result, ~values: (frValueDistOrNumber, frValueDistOrNumber), - ~env: DistributionOperation.env, + ~env: GenericDist.env, ): result => { switch values { | (FRValueNumber(a1), FRValueNumber(a2)) => fn((a1, a2)) diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res index 9e8a2681..add5cfa3 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Library.res @@ -511,8 +511,8 @@ to(5,10) ), ] -let runScoring = (estimate, answer, prior) => { - GenericDist.Score.logScore(~estimate, ~answer, ~prior) +let runScoring = (estimate, answer, prior, env) => { + GenericDist.Score.logScore(~estimate, ~answer, ~prior, ~env) ->E.R2.fmap(FunctionRegistry_Helpers.Wrappers.evNumber) ->E.R2.errMap(DistributionTypes.Error.toString) } @@ -530,16 +530,16 @@ let scoreFunctions = [ ("prior", FRTypeDist), ]), ], - ~run=(inputs, _) => { + ~run=(inputs, env) => { switch FunctionRegistry_Helpers.Prepare.ToValueArray.Record.threeArgs(inputs) { | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueDist(d)), FRValueDist(prior)]) => - runScoring(estimate, Score_Dist(d), Some(prior)) + runScoring(estimate, Score_Dist(d), Some(prior), env) | Ok([ FRValueDist(estimate), FRValueDistOrNumber(FRValueNumber(d)), FRValueDist(prior), ]) => - runScoring(estimate, Score_Scalar(d), Some(prior)) + runScoring(estimate, Score_Scalar(d), Some(prior), env) | Error(e) => Error(e) | _ => Error(FunctionRegistry_Helpers.impossibleError) } @@ -548,17 +548,26 @@ let scoreFunctions = [ FnDefinition.make( ~name="logScore", ~inputs=[FRTypeRecord([("estimate", FRTypeDist), ("answer", FRTypeDistOrNumber)])], - ~run=(inputs, _) => { + ~run=(inputs, env) => { switch FunctionRegistry_Helpers.Prepare.ToValueArray.Record.twoArgs(inputs) { | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueDist(d))]) => - runScoring(estimate, Score_Dist(d), None) + runScoring(estimate, Score_Dist(d), None, env) | Ok([FRValueDist(estimate), FRValueDistOrNumber(FRValueNumber(d))]) => - runScoring(estimate, Score_Scalar(d), None) + runScoring(estimate, Score_Scalar(d), None, env) | Error(e) => Error(e) | _ => Error(FunctionRegistry_Helpers.impossibleError) } }, ), + FnDefinition.make(~name="klDivergence", ~inputs=[FRTypeDist, FRTypeDist], ~run=( + inputs, + env, + ) => { + switch inputs { + | [FRValueDist(estimate), FRValueDist(d)] => runScoring(estimate, Score_Dist(d), None, env) + | _ => Error(FunctionRegistry_Helpers.impossibleError) + } + }), ], (), ), diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Date.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Date.res index e84c26f4..3396d0f3 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Date.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Date.res @@ -1,7 +1,7 @@ module IEV = ReducerInterface_InternalExpressionValue type internalExpressionValue = IEV.t -let dispatch = (call: IEV.functionCall, _: DistributionOperation.env): option< +let dispatch = (call: IEV.functionCall, _: GenericDist.env): option< result, > => { switch call { diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Duration.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Duration.res index 838e4375..f9e06de4 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Duration.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Duration.res @@ -1,7 +1,7 @@ module IEV = ReducerInterface_InternalExpressionValue type internalExpressionValue = IEV.t -let dispatch = (call: IEV.functionCall, _: DistributionOperation.env): option< +let dispatch = (call: IEV.functionCall, _: GenericDist.env): option< result, > => { switch call { diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_ExternalExpressionValue.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_ExternalExpressionValue.res index 9bd356d4..b21ba3c6 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_ExternalExpressionValue.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_ExternalExpressionValue.res @@ -86,7 +86,7 @@ let toStringResult = x => } @genType -type environment = DistributionOperation.env +type environment = GenericDist.env @genType let defaultEnvironment: environment = DistributionOperation.defaultEnv diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res index d17d5061..a65edf2f 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_GenericDistribution.res @@ -32,7 +32,7 @@ module Helpers = { let toFloatFn = ( fnCall: DistributionTypes.DistributionOperation.toFloat, dist: DistributionTypes.genericDist, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ) => { FromDist(#ToFloat(fnCall), dist)->DistributionOperation.run(~env)->Some } @@ -40,7 +40,7 @@ module Helpers = { let toStringFn = ( fnCall: DistributionTypes.DistributionOperation.toString, dist: DistributionTypes.genericDist, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ) => { FromDist(#ToString(fnCall), dist)->DistributionOperation.run(~env)->Some } @@ -48,7 +48,7 @@ module Helpers = { let toBoolFn = ( fnCall: DistributionTypes.DistributionOperation.toBool, dist: DistributionTypes.genericDist, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ) => { FromDist(#ToBool(fnCall), dist)->DistributionOperation.run(~env)->Some } @@ -56,12 +56,12 @@ module Helpers = { let toDistFn = ( fnCall: DistributionTypes.DistributionOperation.toDist, dist, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ) => { FromDist(#ToDist(fnCall), dist)->DistributionOperation.run(~env)->Some } - let twoDiststoDistFn = (direction, arithmetic, dist1, dist2, ~env: DistributionOperation.env) => { + let twoDiststoDistFn = (direction, arithmetic, dist1, dist2, ~env: GenericDist.env) => { FromDist( #ToDistCombination(direction, arithmeticMap(arithmetic), #Dist(dist2)), dist1, @@ -97,7 +97,7 @@ module Helpers = { let mixtureWithGivenWeights = ( distributions: array, weights: array, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ): DistributionOperation.outputType => E.A.length(distributions) == E.A.length(weights) ? Mixture(Belt.Array.zip(distributions, weights))->DistributionOperation.run(~env) @@ -107,7 +107,7 @@ module Helpers = { let mixtureWithDefaultWeights = ( distributions: array, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ): DistributionOperation.outputType => { let length = E.A.length(distributions) let weights = Belt.Array.make(length, 1.0 /. Belt.Int.toFloat(length)) @@ -116,7 +116,7 @@ module Helpers = { let mixture = ( args: array, - ~env: DistributionOperation.env, + ~env: GenericDist.env, ): DistributionOperation.outputType => { let error = (err: string): DistributionOperation.outputType => err->DistributionTypes.ArgumentError->GenDistError @@ -173,7 +173,7 @@ module SymbolicConstructors = { } } -let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperation.env): option< +let dispatchToGenericOutput = (call: IEV.functionCall, env: GenericDist.env): option< DistributionOperation.outputType, > => { let (fnName, args) = call @@ -213,16 +213,6 @@ let dispatchToGenericOutput = (call: IEV.functionCall, env: DistributionOperatio ~env, )->Some | ("normalize", [IEvDistribution(dist)]) => Helpers.toDistFn(Normalize, dist, ~env) - | ("klDivergence", [IEvDistribution(prediction), IEvDistribution(answer)]) => - Some( - DistributionOperation.run( - FromDist( - #ToScore(LogScore(DistributionTypes.DistributionOperation.Score_Dist(answer), None)), - prediction, - ), - ~env, - ), - ) | ("isNormalized", [IEvDistribution(dist)]) => Helpers.toBoolFn(IsNormalized, dist, ~env) | ("toPointSet", [IEvDistribution(dist)]) => Helpers.toDistFn(ToPointSet, dist, ~env) | ("scaleLog", [IEvDistribution(dist)]) => diff --git a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Number.res b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Number.res index 900e6a2f..f22df39b 100644 --- a/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Number.res +++ b/packages/squiggle-lang/src/rescript/ReducerInterface/ReducerInterface_Number.res @@ -24,7 +24,7 @@ module ScientificUnit = { } } -let dispatch = (call: IEV.functionCall, _: DistributionOperation.env): option< +let dispatch = (call: IEV.functionCall, _: GenericDist.env): option< result, > => { switch call { diff --git a/packages/squiggle-lang/src/rescript/TypescriptInterface.res b/packages/squiggle-lang/src/rescript/TypescriptInterface.res index 3d2ce160..a1f5afe6 100644 --- a/packages/squiggle-lang/src/rescript/TypescriptInterface.res +++ b/packages/squiggle-lang/src/rescript/TypescriptInterface.res @@ -8,7 +8,7 @@ The below few seem to work fine. In the future there's definitely more work to d */ @genType -type samplingParams = DistributionOperation.env +type samplingParams = GenericDist.env @genType type genericDist = DistributionTypes.genericDist From d8b1e0d5ff07c54cc174192e1bf808384fc17a0d Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 13 Jul 2022 10:11:59 -0700 Subject: [PATCH 55/60] Formatted code --- .../Distributions/DistributionOperation.res | 4 ++-- .../src/rescript/Distributions/GenericDist.res | 10 ++++------ .../src/rescript/Distributions/GenericDist.resi | 2 +- .../FunctionRegistry/FunctionRegistry_Helpers.res | 14 +++++++++----- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res index 6df75749..319535c1 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res +++ b/packages/squiggle-lang/src/rescript/Distributions/DistributionOperation.res @@ -6,7 +6,7 @@ type error = DistributionTypes.error type env = GenericDist.env -let defaultEnv:env = { +let defaultEnv: env = { sampleCount: MagicNumbers.Environment.defaultSampleCount, xyPointLength: MagicNumbers.Environment.defaultXYPointLength, } @@ -90,7 +90,7 @@ module OutputLocal = { } } -let rec run = (~env:env, functionCallInfo: functionCallInfo): outputType => { +let rec run = (~env: env, functionCallInfo: functionCallInfo): outputType => { let {sampleCount, xyPointLength} = env let reCall = (~env=env, ~functionCallInfo=functionCallInfo, ()) => { diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res index 2d59831a..f536d54d 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.res @@ -192,12 +192,10 @@ module Score = { } } - let logScore = ( - ~estimate: t, - ~answer: genericDistOrScalar, - ~prior: option, - ~env: env, - ): result => + let logScore = (~estimate: t, ~answer: genericDistOrScalar, ~prior: option, ~env: env): result< + float, + error, + > => argsMake(~esti=estimate, ~answ=answer, ~prior, ~env)->E.R.bind(x => x->PointSetDist.logScore->E.R2.errMap(y => DistributionTypes.OperationError(y)) ) diff --git a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi index 24faabe0..fd04212a 100644 --- a/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi +++ b/packages/squiggle-lang/src/rescript/Distributions/GenericDist.resi @@ -32,7 +32,7 @@ module Score: { ~estimate: t, ~answer: DistributionTypes.DistributionOperation.genericDistOrScalar, ~prior: option, - ~env: env + ~env: env, ) => result } diff --git a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res index 357725e1..f42b7705 100644 --- a/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res +++ b/packages/squiggle-lang/src/rescript/FunctionRegistry/FunctionRegistry_Helpers.res @@ -63,7 +63,10 @@ module Prepare = { } } - let twoDist = (values: ts): result<(DistributionTypes.genericDist, DistributionTypes.genericDist), err> => { + let twoDist = (values: ts): result< + (DistributionTypes.genericDist, DistributionTypes.genericDist), + err, + > => { switch values { | [FRValueDist(a1), FRValueDist(a2)] => Ok(a1, a2) | _ => Error(impossibleError) @@ -95,8 +98,10 @@ module Prepare = { let twoDistOrNumber = (values: ts): result<(frValueDistOrNumber, frValueDistOrNumber), err> => values->ToValueArray.Record.twoArgs->E.R.bind(twoDistOrNumber) - let twoDist = (values: ts): result<(DistributionTypes.genericDist, DistributionTypes.genericDist), err> => - values->ToValueArray.Record.twoArgs->E.R.bind(twoDist) + let twoDist = (values: ts): result< + (DistributionTypes.genericDist, DistributionTypes.genericDist), + err, + > => values->ToValueArray.Record.twoArgs->E.R.bind(twoDist) } } @@ -144,8 +149,7 @@ module Prepare = { module Process = { module DistOrNumberToDist = { module Helpers = { - let toSampleSet = (r, env: GenericDist.env) => - GenericDist.toSampleSetDist(r, env.sampleCount) + let toSampleSet = (r, env: GenericDist.env) => GenericDist.toSampleSetDist(r, env.sampleCount) let mapFnResult = r => switch r { From a9d9ed9ae61640db1ac129199274144690b4d492 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Wed, 13 Jul 2022 13:29:32 -0400 Subject: [PATCH 56/60] tweak: Better documentation So that even newbies can understand. --- packages/vscode-ext/README.md | 21 +++++++++++++----- .../vscode-ext/images/vs-code-install.png | Bin 0 -> 191534 bytes .../vscode-ext/images/vs-code-settings.png | Bin 0 -> 78441 bytes 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 packages/vscode-ext/images/vs-code-install.png create mode 100644 packages/vscode-ext/images/vs-code-settings.png diff --git a/packages/vscode-ext/README.md b/packages/vscode-ext/README.md index 9d23c1e2..61861e5f 100644 --- a/packages/vscode-ext/README.md +++ b/packages/vscode-ext/README.md @@ -1,21 +1,32 @@ # Squiggle For VS Code -_[marketplace](https://marketplace.visualstudio.com/items?itemName=QURI.vscode-squiggle)_ +## About -This extension provides support for [Squiggle](https://www.squiggle-language.com/) in VS Code. +This extension provides support for [Squiggle](https://www.squiggle-language.com/) in VS Code. It can be found in the VS code _[marketplace](https://marketplace.visualstudio.com/items?itemName=QURI.vscode-squiggle)_ Features: - Preview `.squiggle` files in a preview pane - Syntax highlighting for `.squiggle` and `.squiggleU` files -# Configuration +## Installation -Some preview settings, e.g. whether to show the summary table or types of outputs, can be configurable on in the VS Code settings and persist between different preview sessions. +You can install this extension by going to the "extensions" tab, searching for "Squiggle", and then installing it. + +![](./images/vs-code-install.png) + +### Configuration + +Some preview settings, e.g. whether to show the summary table or types of outputs, can be configurable on in the VS Code settings and persist between different preview sessions. The VS Code settings can be accessed with the shortcut `Ctrl+,` with `Ctrl+Shift+P` + searching "Open Settings", or by accessing a file like `$HOME/.config/Code/User/settings.json` in Linux (see [here](https://stackoverflow.com/questions/65908987/how-can-i-open-visual-studio-codes-settings-json-file)) for other operating systems. + +![](./images/vs-code-settings.png) Check out the full list of Squiggle settings in the main VS Code settings. -# Build locally +## Usage + + +## Build locally We assume you ran `yarn` at the monorepo level for all dependencies. diff --git a/packages/vscode-ext/images/vs-code-install.png b/packages/vscode-ext/images/vs-code-install.png new file mode 100644 index 0000000000000000000000000000000000000000..e36b220ae46c0fd40599cafad2b1983fa6aa6cd8 GIT binary patch literal 191534 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

h8^07w$ccXS4cMeSW*Q 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ⓈiYLQ+se+2|FH=ib>>w`r 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Ž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 literal 0 HcmV?d00001 diff --git a/packages/vscode-ext/images/vs-code-settings.png b/packages/vscode-ext/images/vs-code-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..68568bd57852854563ed9ad1e1f1bbaa995fc67d GIT binary patch literal 78441 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%0DVc|dLRTu*Ft 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åIYfh0(*n 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 literal 0 HcmV?d00001 From abedb59a17bee17adaac461d5abf49dcb3536374 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Wed, 13 Jul 2022 13:37:17 -0400 Subject: [PATCH 57/60] tweak: Show what to click in the extension --- packages/vscode-ext/README.md | 3 +++ .../vscode-ext/images/extension-screenshot.png | Bin 0 -> 238188 bytes 2 files changed, 3 insertions(+) create mode 100644 packages/vscode-ext/images/extension-screenshot.png diff --git a/packages/vscode-ext/README.md b/packages/vscode-ext/README.md index 61861e5f..68b7d7bc 100644 --- a/packages/vscode-ext/README.md +++ b/packages/vscode-ext/README.md @@ -25,6 +25,9 @@ Check out the full list of Squiggle settings in the main VS Code settings. ## Usage +After loading a `.squiggle` file, an "Open Preview" button will appear. If you click it, the squiggle model will be shown, and updated as you edit and save you file. + +![](./images/extension-screenshot.png) ## Build locally diff --git a/packages/vscode-ext/images/extension-screenshot.png b/packages/vscode-ext/images/extension-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..f3cc33518aeb99e7d38313968656055c0881c796 GIT binary patch literal 238188 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%0A?@hY90x>T095L*H%rEt; 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%0AbbO1vam9r z`95r7E=5#oml|%d7j7tmDP#!7lW=anXN%`j>7tN#^r0sGCGO8j#?fn1LEET|)rNVy zrxA8&bq5X^_|Gf6rs9VB%!PO~j{02@O(z!AWHKaSf?Kag{ypf9tT0+8OLg#$*ek%j zaxQOeIWUSq`Wtl@#@Tf;E{lbTMBvcYPh!Zoin=NUx~i8{25p!&3Da0%Fam*No0?No z89n6wS-dvX_~+$*z!(lX2}N;f=$AO*q;Bl}W3(Ke6rkvF5($Bx(c;OETp5p6SUMc5 z=D=9e*OPXZF)V6IfS=O1gh5dEgJt371s&%o8S1~DgYoVUB(GVS=8||kU+;ad35p=c z_o6Lq8eY)xseZi9lBt;~^wqFC)k4+*$OKt0Xy7n$SqOd_5t)se%8MO|gJTIVx1?sc z7;IOZv)zXAHSe4lwVb}JIo}+Xr(4j88Ly+Z#Qiye23$IN32N;1Y%BndRuJ(aI=uClIPanbF*zZ2S?O?AU=o)5S!2&6$g3D zK)uwUCRQSLrI2)keRl2()-Pg`xK|onFY{hS`L1VmTa^Bvm#* zXA`~t0EK*&ZzHgC+?ci>vTq=T>xvw5C!J`-qm^4EpZgzQka5*U{emb(q2r92RS(w9 z|B79N9i1?Ee)c8Rh(4@didYO#>k*Zml?UrgUjgLNaIkBF@Y4mdP-R;`r=GxIQ zN1TwwxEhAah+p1TdjnU^^AZK6x)2r-;oGTsF)t1g*h~32QV=(%%kH%OD-AyKJE;;3 zDhu%SH*B83tYncN+wF_*HOcv79eI)qJuPg>aZW^~oi)to?@3wND5Yp=fq~(V#JEAF zZ>b5m(4)M!tuN!kXiR`;Gq(FMt}p$`k;xQF*pL?c4?q){%8_yGm{O1$We~*Agb?n^f6dKeD0%dUIa5xW_G-#a6jkMUZ^;89Kzq z>7~ZN@wAH{Otciuql6D!(hGNs^gRUUV`9Y}uY^%zo^buE?X{}@&kE(n?U(hFvqeN= zjSx*oyJ+OqC3hqou1{BE*24>^>IM7ZaRx?dIWNoACo?4Srcd1uJ@2YaMd0fcO3Gg+ zxX>Z%>q#0=#cA`ztyBy980^dWU!?V0uQJfz$-FVi+blEb1@>8mA|@+6MIF)@nLLg> zON(ut@d3$A$)z^r8a_iLBtjriiZ=8Ym`r)0ZbVhG7#({Jfl4SHwWiw=ukbKRKmH)FZxZgww3IAP}lg2+)>=@P>;z!YPbczmj8jeiOQC@n` zYFHD=9ERq0{VntiN1i?Ai{5r`Oq>_F-0q*eZ0m6cbqJqLeDPuN>%X)#NjD7&!hxJL zk703S`kLS{L~K=7&SE79baJ-<1P?BddkQtJ@jH}qJ@J}={sB$xc~17+|lb`sA}JjR%~1&Kv=u9?P&)IslBD{6OCJ-%}|8#)F=pnZ{) za5!prHxjH+8jV%k<$+WO_SzZcj6%WBGN+Y6_?Mm!W~0zZl06^n*8X!wVwI7jOb>m7 zLaiQ75{%uP)doHNMIc>#(%|#t&mNbj*M&Fwh8Yt!6%1vaVnwrmmZg9~Bkdq3YkT#F z>yduJU8mvX@yy#JX?v6Eo?QGI^Q(O^rj+w~6)BLO-+3Ga0(sruHA#G0zfpIoGVOjo zFy#KILRzIiLwnO)1D6xhX<=S^DCA|7TPoFH`T)N6#;WHF5_WgQv#;5i#FMrkX?|!c zo_RGQAquDObbR=I__6}iE(mLZGHkg~qakS?;$$fq<%%h-w?#H^BSa<&EaGwh^+VUL zr)H0ki!pf!yU8hCrYII0bz#5|S^o{FgPM_?V>^$%I~YujrV%l@(zZxu_l?L@sriGA zI-_l~K;W~)CR-dBUfb(#yk7iYonPx5QU|HN&3PSwDQz;$>IV+aiEOu7LhJIZdSwSZ zH77U1I|lTfkx&=Y@m?mO9AGBC4U4${qISi|ySYt7jOH>+m)L~Spv}gSlJ;6efNXKK zbbOUsqFAH-Tg$vihF!>iB#Vujci*k}Jw}3DpZwY3Pcf*!Wy^|`^~Qolr;Fl^&KM{w zE4!SWb%9`4H676lO^3wTUk{@c#gHrr1<%5(DIWK2*_txoeqPJD#q+;oYKwF=_700s zskG$%A96#$;A-+dzaz!oK_*|33`)Ns+{#|>v6_)|TMBOfvlRuc=IfcbN2$F>cmJz{ z8}bYlnxoNEzN7b_B7i$FXB39s{pI_UbM3JezQ1uGLK#?oo>YP-7zTUw4^xLlA+~4u zmX6nlkz+6Xt7c(3!SPs4EH8PT>v*7zN-*Ol1V1*L3P%!VpvDpE#US3rTP-*2!Vcvj zM#0(xgTc;jE;k5zMq+Cn94yRQGfnXVHA2CZll0ZQ)~T%|m59MI%;+D}TZx(PT}nj* z!AMGa(?DIxyMv*(QFGc(5cS1fv=^Yy%cDb4-A5m)vwnY|=h9=^mesAFTi62EKk1MqbcWH8ln`icE(M1ulhNrdk{@x(w_FL^d zS-xF7dgBsDzY&Oe>*mXEhD8Ldd_wJ@4^yl0--(D%>+&oF4;%^|Ce-nX!hex+HR#lc zDU^c{u@Q8klST>1q8KPtH}7g?wp&S<5%p{^xq1Do*e8)Hw;MK_^S(O>#>%{b8Z>CIoHSCk{^%bfW!WaJdze;~OojxnSFZ5&=)g zlZ}>FAnoSMy~~>RxBHpoGG3eZ2p@cwr^;AYX< z+OI}1KsTqCSvV#BcqKBZvN79w-Kc(Vw)jNp#ZnYOYDeKX5wjGR1QNxu>%3AGca4xK z_tTRaP4)gTXRh;PyCWsYS>HU%^5B`Y1xP&pz)L(xYw? zY*>;EXo?_q*O}Q>#eV^W+UFx##r0ucjC~wBr)cG1@aOG&vLWQn^vBC}$)ztho;nuk z0$h=lqCLosmui<$QRcRN99Q@(EJr`r$@bdrBL*s;t@$oicYW=;1e2mSr1r_(BTJVn zdWG{u1{t@y7U$OeWMS;MGITr9L|*?CA;w2JwfZW;>v#VxP35T9c~NYyRz+EuW0Cm}z){&Ji7(dS=Mi_cw^rWC)nD;(p!Txsy{W zxBVobN-|z={{4?8{dC_()6GQpX8>*4VbQyTX(RupT2nPu)uD8un#%RRM-dO*=fx)riM8<96X9{YJKk1p2t@z+urM)rR| zqxRDbeb|3q0$SHmUyT4t7ZAbc`&(t)M&BsMv}_hsnVUaH{&O#)X_((#6TS>b#9IUaunGQ^4_TX>PB{aFj``;p z#2;;f|CT6G=S{#rJp{o7%>w}>|2Z@P8OiEDum0B)zh1m`D;=|_(6FTInz0bPWaFK0 zdCgUH{bPz>r7Ki3wdfISQH4^zm+*+np^&Ch>5~5sp7jt$Fy1$ijs;x=rSyD%UqCnZ zig(VgXmghdS22uJdB(1Kj_Ox@Ezv(;-}3~Hx+%zOvypN&fD7VF|q{%g94xxWyQ_o6j5^$c|u8a1H!9#_^Jd1 zblD9)m?}mMs3hxkZ~iqVkOT)^BRHbI+Nh{Nd}!Xmy}oV7Lk$m)n+M&Y7)L|>Px{f( zIhy{S2^o*XqP!>`e8TM=^LMSI?^Px_9)0m>^0qh3lU+#S-zB{H@Jw{YS#T~THGhc9 zPY=uY9f+7tw{Hw7KT4yP*;z4$o|$0h2t}T zWa{-F3WHkznwOAHm6%h$4;jI#gy;43Qe{AMg-B4*E^Dw%f{Lb&h0=;hA`H_X+`$>I z>sW0eNJ4ie`FmDX&z24-t7{mjvsy7-Wr}Ou!yoR-ZTg0RBvn((PTJZ@J?^g z(uq~2&bSm73(Jd(6V8tkV>4jTR$LT}{$OQuaQbSR!Jkk%J@tN`1!xi>AW7hQeEQR( zyTe%G(V8J|MqAxF{wBR}k!d_>EMlts6XpAfm5e#@cpXC>6QvhktU`jXDRH4LTZItD z>_?ES#x#)A3W!S@&csz=mexNHdzA!=T>6$kZ*%oE^#6>Ll+3$Pw=gE_lp4Opm=7?N z46W!J@HWs=^{Z;Hlxn$r4V5wJV<@#jVogjnf1372(<&k_4L43)Lw9T=Bc=OBnDQ(c zs3WE0nk*oGY*6if({AGHC0-Y33BK-$W40r)%mn^v^8wu$NLJdmxJ3xoLAz5RtUKC^ zgA+RU2?|BW&4UqKR>1s#z&KI=1P_%o2OgSlB~^_%tK!TIathxSnvw)%AsxELnof&k zFc>Fi>8uI378Y9nLTg~iZmb?q z{qAVGPw*{F`9nl<-eH$1jeQ*5_g!uXJ5HzzaxSveUNIYkV``tS#vdRPbG5vvuQ5Ip z>KnF|E%j+iYr-{H<8vORvgyS8{8X?Ffed+ zibWwrFT*T(tDDX6(Z)Z6bR|@VXyqA@l^vTF5|Bw1+iQj(>}XgXbYqq=GR$$kW}K+g zu+2~vTLO+qXXO~t@$YXx_fK(N5I>)u99s<+Z2z49F@fQq$;jjW2NKB?Q9Nyo%yAu1 z-b=#JC}1E~CpsCqd(PmqVWyf+$tQm8sohhrCO?NsMny@R_z3!)$RU!a2=g$TDqR{N zoD+iu0U*A+gw(R*a6}~0gFu{-QsN+M8pS~l%=lgqD4ZyE8mGcN!^Ic&iW3s* ziSvw70rWu}8?o2Emc~Lt1wno)t#C?Q#`r*WN)kXkD1;s8elp~OlK;g5I3K0%wC%tD zg1^RaNoorsAljLVVx~lRc;tiqX6`%jW}d~Q_{4;GY0$fsPqwZaan35fyyP*U4tCJ0 zlM9DCKRzy)8X`%Ze+C@ja5f1|0wZ0{dEE^Na|^HNPUN7!Calmmp#1>uF@@SS3ukBX z1>fUP@CW5Tc%LFmtXo&iyw}(Hpn)zLQna*+79qxHV=F68(mn!wcP5Yz#=*g11BtM& z?sPl<9_OD&WPJHo5%$A=+dhYjiHd|n70VtY4)K6owS5j=fVpg2I!p!4{k3u1>%8wHqh+UQQ|#OBZrmF2Jo*GO5arZa1`h~YLUP%MEJBiD8q;*TgEMCkYRZmir%jX8 zyNxrJa`@L{deg1OB|uD@@hI~x{@J#(rzfyV05X5JM$gUp^_io)nR%H^W}Z$0$)_QT z7r4FLBsv|bHcgDDCQO2ne<}mmM@NiSruB- zQe_AE7)#|pi&{qp25VOJ$nB%hp#_1HK$3;63-<2Mz?HK%yZ?i*9tnKt&J_ z-RPk^r9*1H{a!RtM~KFH}A|l^X_r{gLCa#*Shvz z@mp)j8)wlF^T|uDYI9-AW8kl|Cy8b$pXSW5#*4hEJevXujzPNZVqse$xaiVo25MYx zZJQ_JW$!{)F#ZEz>o(xAK%o2iqRmL6BexuCcjX-$atUfTQ~#y5HoQ|}bLLPHwlFwt z`AW_4Un^I&`l-tN$<(aBpocknd_q;3O~enOT(%EhEcA70xN>wTBZ$s)90`=${|qHq z#2rwBvbi9Tj4q0z-teosL^{tmBn(VJ&3Yf@hlWQO8Sc`wvs+0saG1rZx(2SZxi- zrG0-)wg||9O_9xn3NcVLC1TPX#vj^=AYCdoQ6j8};0SL{WrEPoE20_x`} z+WmkS+w*Enkx}oaIehSL^|40dhz(&);TH&9>1^< zv7En{d8Z#008>0FZYa$x^$rRhve{F>@Lwjz6f{T*eG5KLw2?|M(7r9i7%y9%MRGUb z#|3n!yo23iDRsuSiHHc75Oifpga8Erw;@N^#O&!qp%ggD)(af)Bw$i|9p%ffft#C4&4J1=6fipt9%UGzPJ zEHQ;HZx`*yqPb4jI@4XHivNpB#L_VmS>uGQa&@*F112ciJj1^f6YE)lk)}0n0Dl4Z zGtcQ9X4rIpz0*zrWLUJ>pRLU#`1J#zGc2ukhi^XmzXmLnJb(Lh7n0SIM~pC>aP#fX zJW_$+iMZ9f@#bSx(`CV;4%P@3j_5_5lhU&4|IF}fmXPGNS1F{Z&TibT3=qgy25zRl zlNKf|)KA^tU_Pi0?M3UB#T3R`rTP7>J@dT3di-kK9#O=f4M;xdk5rl4)T;NiP17Nv zygFaluD93yuH}>eU&x8Ll8Q$x#0%P@!<1{xHirDK$$C=!prJjHa4Hom9f$;zF}yBq&$x2V1O~ZsJZl7HJgvx%s+IyzbbFLLsqf;$pHN#PV2n zc}m)yL2v(sfc#up9e!dYY|IoNAqP%d@`%#E*}x$_xoa@($4{;n$l4x3z!mYKR!`X0=pMoJA>CHy z4cIsg76x{1`|s|!N1_-*fg^e!;zW}P%slNTk^OA4-;#>aB{~E$%q~ps><3BYUEu`> zeBE*m4-3uWw#2<(Ic5HH9RUmAJbnI%rMy*7jtSC|5}p`^17P7}-n>^bx}q94uEH{^NgnPORqcZTU;Acfd`2C#fGN_~;ym5ytwuk&wYO~UQF zr`!7Fa#@mu8wqd^&or<4V4i$Bi~FU9O-(0HNh8K%X1C1FCVsc@Y@=R=L9}=IQr>)q7XgJ!hj0vTOZ<4T+vsMcJ-u$Z4k| z>noT`>c;%#>`m-^qdAhF07cNAMRCIJmBcQ|gx>mwT0cUNK+E&y&y&Wc7G~Pd(gxB$ z4AOU%2OhNiRgLev3G`s&{X#BE?jB-zY*$JDLA6}l*qmP_kr0I_{apA3{i@dH z7dqa}dUQDq*e2q^)zSt-Wr1ZqOty~?YRw!k1xccE$6U(ajSf$3X)Po4h< zQ;U#cbyd~E*Kd0dK;+L&P601cGUX^iAU=FzBEpc2mDo$)j7|x+u}7f@ z2d~2Aq~vlFjP^OVDS!nwmATLuwRwDGoitX0wH7wnjZjv=S)Np<32z}3NQyXCvC1(t%2H0dC!q%rQWw4UL3@F}_ zyUXxH%1>vr&FjbkYQlxZp}U(lGexraq=oPThQ{0DA>ZsK)rGbBUO_7uOeXL`$fdyt zI*c{;4y%t_lnf2z?FZG}qvJ0g%q>vjz^B=|T{Uq>zt&;$b}Vz8mYp z_jZ6U;ohNDnyIO&|2x&g_J|AJg(ev{78jjCn~o2KQ*G(MdVDEkpXAxhVRd9QBK*~a zovxy$sv;ri#h2c~aRtc%vH4*PcNFTsC``=_|s4 zZYpUkv0(tqH8)Q6B6W1S*v?JmOuHI+9t#&4@+Q99zc`!6y}Q5AN8}J>Rx@d(`6dIn z2L*VmcHSmN3GScQt?b#8gyo)QNtjlRheauA?o#D!#}R+UWZbzN{d?Pgu3YK%CIUZy z43ho9Vjx9xTA#QgmN#26Std{EH%%qGU$Og+vU9~S`$V{}%Ra5mMWdq>Pl1p3v`mU~ z)^`0g`~C)HA-O}?n-M%+qTOnPvS*FzQ0oRk^@35v9e@%RV8b63CahH6`0+}T>ikT5Y=r6q57xmJ+wH$aem283Pox^B zH+{qQj0UqDX2z;U<9WgcAa#I?0e9cNjV6Q)?DtUs!orQ8-g!D*#b|tx8ZD3Y9dP)p z(;hnk-|UioY;|$mm*A>iZc=5$fYJ0aol-JlF2R$ur3Bd5)&)P8%^5p*W`@oKzWa9Jn$8W)8vZ>04Kr!FnjoSfp^s6qw<)Ts}v>)n* ziCjY(P2E47KqmS`GmnjDd~a?n`lpYSsUlH9N3A=i3XT8qMJ3mtJKM_jbkrw#c$g>% z2-g}O6wyK!&TDTvbqF7qFLIh}OGJ`J6|9_fSX9jndJ7>&3TID}JwLZmBL{dL9jD#i znMtd9bPeU(Q{gPem_QRmPE}3>!h~+~@|yzZ>95vS6?$EW1NS-x2`|W zQYpw(Sf;}we+@qs#Tpeb?W;>b$Y0z~&zHLS$^9`1KB0<^UXk~Y8TE4$Bw+gy4?DYr z4JGjcS@wM_N7+9z5Ai(csrEODd;WvRxg#YP@8yz5t<4R>^{!YsK*Ni3_LXGGZHLDm zi8K}w^-Z!Dw;md+S^O8-N_USz=HIjTdp|y0s#zFa-rrdQxXv{{wWQ#5*`kf`0FTwd zm+kh7k(UIuwHyXs-8vDkiB{R0(kt8Nm*ON`p9D`Rdc#sCW6um;0CM@~$@!^~Dbz$9 z*Z3Z4Qc`%FYnA}c&7J)My7HY~Qyusr058s~NsYb{+ph??T6ni(2;YY{Ri>#bCd8)> z(unFpp})K%nsgnoKd%#x(D9da?oC80R=O)08a6bTq@Qk*g0m)dq8E*YlIG37(Qcf`9+CBgj8xETpgeerAZ^28V<6F+sN(6W>#^nnLA|xr zZ|pb7d?M~5!(ygPr4B%T1A!M;4o-)P#o_kn$c2ix1;apEvXvT8?q6%lUxpbb z-(Bw%V>z0A_|Q{pyAkE^pC8~te8b75>GB@OT{bp0qkARDlI?xECR%Mf&OLRmN!Ewm z$MUdTHs8+!|GE?6Lh+K=UU=$dZ>Pi(h<)&ZUf*Db^A@Kyi)U}s^O$A74OuBLBn3*F z{b?l#GzK66FsjAr*-Hq?Bu+%Q`@7Yw?$g>q?T|=b5&U`2{(F&)6d;~tL@$ohdn6?s zZP+TA%fZt4&j^6efejPqJ=z)9oEM~x0(k{gL88Cm6wJM8ryehTV{q@In|7>X!O-Og zm5u9=9$%QLZ=4|d!+O9q5{pUjKHREx3qK@9GK&B;(<1E}ww2&{639OR( zfhLnL{8txy^P@*BAkWtBSBMZ2w%tUd^x*|pUH$W$9_}g(0sq!!=l#@K->c_{|>1Ep8nj~mJUAzVVN?0&^^$D7DzDe zeP^~MdM%bV8_QJtU{%~2JU_S-F}btGZc!=n_jrIa6`w^-@H()+wRXyeMUar@j(k!i zJG(eLJDbN&NRNsQr3km96a$nO2no^!2h8+N6v)#4rx6m1gWjWs4te%_RPnW!Fbh$V z<}!7sNH9Hb^#YpXGhcYrr(dAj*g6@j}&S|7uU4&y4&Y8-c;v zCDD}^-HsU~09x|{j!uS6=Eow5IP;68`$kPi`t79unpavJ`#l;cl)-6bdNIf}5RyAf zwg8S6&p0|lVjf;sdHpRkl;6YZQt_eio}Xm!&vF6Hu{`rt3i)%lhoJd;yk1)y<@6DW zrrg=kH_w}A7D^r_?)V-q*p|i#fkMH*TS3+@^xWa)q0^4E=GB?Voq7wi3g5!Xx@|rW zkd5PaQ`YGH_z2n4kA2|2i6iYn7e#F0LFMaxt<$xMUS;RM9FYI)(J3nI|D*tTb`;^E zC5wxTE09~vV@vBU%o7owYBXHt8X93BG)R2q{{qF1g#udBpJ{(;F#sMtFEQAKNe3$~ z!IBTc%|WpFcMGYHJ4s69q#9;Cdx3pXY}v{vd-8me=?n7&n?%?%Kg}Y@vW(WScm#Fx zSuZm$$iX^_uCM=$30Knd`aON9wwClpBz1#_2b0KrOvQtxmehRJMknQ@^o3LuzvX=8 zL+5sOQ-l3cAI`>S24|X9GpB?RL-5j4{oiqZuAl_GrbBM_JR2=0%ov2&HHGZeildV& z^^z}4r_Ab4p|Tx&(g|k)aJ1(kO7{{i*wQ3YP9G|!pZtB%pU1z!xm*PX2Z4sCrasou zNKc=$1YNpZe+zoxbG;y(SWVnOd3dr)@q%Ot9R!Yx5Jbey15;sqQPDo-PxRKPJXbNx zwzH2JkT!Hh-mh}tv|m?E)XHX>Ngbcw`pK(XSze;6zwOVJ_EFZq>S;S%90l3urHH4f zZ^##~h(9NMguJ$&FYe{Dxtzba>rdoz(l~HCzPkPfq0rGmmrdp89n{Q66zNZ-#zZZI z&Q_^nqyNMN`~KzY%b9PO_@h2-(%XV#a~T#mPCvcqS5af@yn7!QRp{_JPo#9`U}%Q# zqHyBY?HE{ZZ<-i9?*rgXJ)=sZa%wjvIxK^jdC32g(`onhducTOk1c6%K9Y|60%$;zv{FNbAb z#Uf7rCGV#eV8~|{q9bu@UkJ^Wq;Bnv?wa|LOo}OZH+uA3r;C$$_EwS`-@F00Y;3om zi|j1v}DqN9LzMn zMndPmg^B9I!=xstffqJz+fiu%s9|Gy5C`>eO0lT>F@u;jyA0soBkaIKGQ`=EoZ zBOB=Kd|H@$S2c5}bp`e!#ZQO^Tz0{0_2%!~+`Yg)-dc3!jpm-^yWaZ{RI%J124L?9QjOcd1~7P_?_ z|BT#vU@yK8E{$Hp!$<8hoQk7UAL15trVZ%?gX@PGN74S$|1*v^oQp|GEe!&Q@!OY^ zZ|O@$z!Eq7>7X{@jiW0O#uf*wNHWG5wq z_L|lHZtN#B045nTD!v?T_J0wy`)*t*AuoAqD!XrabGE@2z_B}M97Xae_Mf`_?efXs z?PniKdHIWY4dm4l)*P<5dIJ}xzdtjq08WF5tui;)E7&IKA2TW(oP4u;*1wzyRNx@{ z?=U0=+W!eds`#HUq|yJ0Uy}Hr_@)1cj@ZmRUktsUSyp|-Bn!WOdFjR*Z#I{OId|4$ zSv0?egWG~A=}!9A>bAdM>HhYrJ*tyM>F+K-cRm8>_Q{*9Kn+J!Dt>s(BfD_Yi~bPh zl^P*Fs?Cz}utK=0L~*TV;XYyITea8tyS@7s6P0}D9RJEA64XzJV?WiQZn28is!` zcX2EK_boX|WL3j=o(%FG?DK+G_74u49QIT_Js&CvFZ_PSlb^lawvb!MuY(a&eCQyL zm&z>Vp78t2n{eEiquB3Hu5L?8N=id^?COGpgSWW$!}(uFmQZ}w9!;#bD&8MZ-}?Gp zWvmcL5bgOx{@>*}(PWjv`^r$*&28eX)={JSWgVnQBm6yR{2#VeJ+1J$RX#F2=|%aw z;GgBDCR8bNb8~=&0vSP2Lt{?H6%D)LL6{=OM>(0*3 z3J40iySw-H_8v^qTp70@t479=tl%oNlhe)D8d{f2e~h5lzT*E&XeS>@e)tM%cg%ox zn_9Q=JOwx2g|nLc5kOYwPP> zot=k2ZSLwY#X`G!djpz3^(FK1F)~``5cno1FN`Mh+X^aXlJyeB@S>Gwyv!)?a@e4X z`d8ZgY&b~_KV)HHAs$8Z0ttyE4R{;*O2wRsQV3q9pPIk6wLz5Pb`cXb)T`%aXHij6 z(GlUjn%|@WHPcyHSx4l5kIz$c9t(wHktO%1SP=Zr@UT_a_w}{4w3NM1Vc=Q>+oc#Qq*;-q<+>dn8%-Bfr{S(8(j1_)!7HqK+kH36|Ztv_AtJf}@pv+B9 zD#^>QY_BxyloGC;^`Wyyx4!}VFjys7jmh6ez3lO+cjWn+rYDfbI<7#&_fNj2U+-(M zqWjqpB;zAhcvx7Bgu%y;AH~H3T9@9W0Sl>AEu7qOcXPAjoXb&NXEq#o`t<4P#RVH1 z8w$_n`g+x;=Evaey}bsvt7CaUZh`D!cycN;riL~k8$L978D=~FH50(WNq-jEegv?z zhK7bDq}-t2-`^kiKB8Tx*8S#uilVluNvn7gMLO9}lq&N25&+&yN=h0UZlp{64jTBi z)TGxT=IT+!~2dnZm8jTYMcsm6MxgLvTCuSfrBKnGl)L-m5k zj>+0>%S-yendaDb9cNcpTlNHNwvgap0|soV?33fQ-n+ZI5MCfd+@I!zDpB^VB0fGo zIyzdE1QpR+Aa$s<)eFjwA6#5)DK9@d#1JZqj)Swcv$InNgaPO0eVX)24TyY(NVy?l$cuI*w{#| zSYV|;N+*zNwbm1fMW=3LY;4V=Q$2%+hX<$;07w65_|*gj1fX48cH4G!Jv}{Q5`Qg3 z0F9o8zesWBo|n0votZIZibX>3YW`$oX-Pz-=3r~EkaF zWVViuS`|jJ*49Tu*WV%|BdaYJ&X0~jh~D7PuJJaY`=Qg1T&FL8C<6z_z)S}F>IKDr zC8DAd+pUM|ALfhZ2Pt}b1ymr$4f28F;^NlT*JB{UNB1H>e~z6O>A;ytOG_*GZrF{N zkCW3S$MnD65qBn8({pW0%i`uw*lYm$69D~AA}30*oi563a-Z%h8-yNTBEp1HR$rVz@00E7VL*z*U^_#DnzVww+ zqqF~xu*ewW2G_4ss-vSLK^6`;^7u^ed$ZtV_ z4p>=L73ZCL7K(GOlCEYRBb2HHEmH0dI7v{R>SNPPK1KTXzW9V7$@}Z@LqYu2z`%zD z6jv(h=;$z=EUHbaoY`Zun0=0da&dHYb$`)hSq=kuDn1?$WXys)e(PzLT)umMb6~e& z-*Fotz2g0S`&LXEb@4@~#FT0Umz>sN^F&CTfeW29oWazLcdVb_PDox;kJDY?z6YK} z=BKTDub0k3*`BA?zAKGSV78tPyu{vxeVR76Vdi7DNyeV{(FL16vo(W=cv+TthwRP+ z9vdjVEv9q^celaTSsP4Whb|%sLi52+0-%7*A`kN!dv%+CD0fH_CjsZa)`P*v$CoNY zfsUv_ja*k-d*t+EXh^0|(Udh_qt(RJ6lQk*!}(-(Zq7H(a<*{GsIqVZQso zv1SKN?(vFPA6k;eNHT_*G^o~sYZtRz(Y-$HQeC_Byt~IY>1kiPYXDpOEPeMHy@Xl= z2Zsb5=qRUChhe8OsHe z*!R@nHh3zCTDf0=?ZK@gU1hHxm^CZH`LffU|tXKTA+#V+{B z4!9Nc^)sciUm_vtmBWBj4miCcZ71T_C0N`Y7~v_liJ6m5IgL=}&2niZ$j-11uiRK+ zb&|AoJCO_O4WrC1>RoA>{@>pd-P0g&)c5c8pD9r{j>otd8ca)96P{hE7AAJ1-Sn;w z(^IBRW_m;>x@TpXW^J6Y9Es1>yBh{#si=PJ`Ox6)1on&tb81K_kfTKRzehDKqH0tZ zf=F!mcjCThCT`KxY%!rLpmcBR&CXwKSjcZEP^~EOjAB6_*O;%Mx%ahwxC~e8XXc6J z{{au8DPwa#4?dQqSN(?wpN-FQ0$xw=IndM7lZA^xsx9VB%n1nUD=L3AAacMv6=nAa zW6?QBuRAV1Z}(k_O6rRpMTD?X1D47K0M4c;V%%bt0}TGZBQl5>r9j`+XAa(>z>iOdih2)_qT% z$qEJokIM2Jr#ZN53=yMA5Vn&)b1rsvx?hor!NoRSigywp^eDria$|;4N+(MC6KmaN z$e`+16Md(8>M=CZn4#?^ZOL5!?98c!#{{l_|l_%z0=dPgB;b29g7!s>ZPahsV^XPJ8h?k$tWa6DBv+{?7Y8JVC_A{-V$1P z6yaXJ%u_8MjfV*Gp)i8v2R(vfo56uPZxug38&6DolgJ+8TJnL-1Y!il%=mIea%vJC zP&f@jp`7#T5alGc_Vzh3SLXJt)@{uY_c>f2sT$&ikQ(CsN@hq0x8WEe>|{KQc+0=0 z&HmA3@GPy|s%W^9VTLf39+k! zNZWNSv*{vv1+5OP&!v>ZBU5Fd4PEnTRFoVn7IE$9MP16}98y$huBAC5#p4Nl$K$EY zg@UmR%uAJNb4%BQd{Y|b?9_s(K%L>a6e^BVKBZh+WF6iIhb3yqc*@?1_2>eE8uOZn z#QSzqFgT3<#cJq^+fpq^f92Im=JFB_6*-uLk(Qq-{J9XAp70F&R1%{-`xU`3(kmU3 zgSq&^A$)qPwhVEhsHm`6K1{y}1H*5A-35JvGa6H?Z(N|%0A1|-5jqPN5-1}5YH3_U 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 Date: Wed, 13 Jul 2022 13:39:07 -0400 Subject: [PATCH 58/60] tweak: Indicate that the configuration step is optional --- packages/vscode-ext/README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/vscode-ext/README.md b/packages/vscode-ext/README.md index 68b7d7bc..1c529ddd 100644 --- a/packages/vscode-ext/README.md +++ b/packages/vscode-ext/README.md @@ -15,7 +15,13 @@ You can install this extension by going to the "extensions" tab, searching for " ![](./images/vs-code-install.png) -### Configuration +## Usage + +After loading a `.squiggle` file, an "Open Preview" button will appear. If you click it, the squiggle model will be shown, and updated as you edit and save you file. + +![](./images/extension-screenshot.png) + +### Configuration (optional) Some preview settings, e.g. whether to show the summary table or types of outputs, can be configurable on in the VS Code settings and persist between different preview sessions. The VS Code settings can be accessed with the shortcut `Ctrl+,` with `Ctrl+Shift+P` + searching "Open Settings", or by accessing a file like `$HOME/.config/Code/User/settings.json` in Linux (see [here](https://stackoverflow.com/questions/65908987/how-can-i-open-visual-studio-codes-settings-json-file)) for other operating systems. @@ -23,12 +29,6 @@ Some preview settings, e.g. whether to show the summary table or types of output Check out the full list of Squiggle settings in the main VS Code settings. -## Usage - -After loading a `.squiggle` file, an "Open Preview" button will appear. If you click it, the squiggle model will be shown, and updated as you edit and save you file. - -![](./images/extension-screenshot.png) - ## Build locally We assume you ran `yarn` at the monorepo level for all dependencies. From c1a351a7043309950d8dc53d7a8c2febbe05da8a Mon Sep 17 00:00:00 2001 From: Ozzie Gooen Date: Wed, 13 Jul 2022 13:55:35 -0700 Subject: [PATCH 59/60] Minor UI refactors --- .../components/src/components/SquigglePlayground.tsx | 12 ++++++------ packages/components/src/components/ui/Toggle.tsx | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/components/src/components/SquigglePlayground.tsx b/packages/components/src/components/SquigglePlayground.tsx index 534be721..a8f5852a 100644 --- a/packages/components/src/components/SquigglePlayground.tsx +++ b/packages/components/src/components/SquigglePlayground.tsx @@ -215,31 +215,31 @@ const ViewSettings: React.FC<{ register: UseFormRegister }> = ({ name="minX" type="number" register={register} - label="The minimum of the charted distribution domain" + label="Min X Value" /> @@ -521,7 +521,7 @@ export const SquigglePlayground: FC = ({ ); const withEditor = ( -
+
{tabs}
{squiggleChart}
diff --git a/packages/components/src/components/ui/Toggle.tsx b/packages/components/src/components/ui/Toggle.tsx index 510b86cb..90e73e08 100644 --- a/packages/components/src/components/ui/Toggle.tsx +++ b/packages/components/src/components/ui/Toggle.tsx @@ -23,8 +23,8 @@ export const Toggle: React.FC = ({ layout transition={{ duration: 0.2 }} className={clsx( - "rounded-full py-1 bg-indigo-500 text-white text-xs font-semibold flex items-center space-x-1", - status ? "bg-indigo-500" : "bg-gray-400", + "rounded-md py-0.5 bg-slate-500 text-white text-xs font-semibold flex items-center space-x-1", + status ? "bg-slate-500" : "bg-gray-400", status ? "pl-1 pr-3" : "pl-3 pr-1", !status && "flex-row-reverse space-x-reverse" )} From 2f789e983a4387cd3757bda1e6d6f946b8c72212 Mon Sep 17 00:00:00 2001 From: Sam Nolan Date: Sat, 16 Jul 2022 13:29:18 +1000 Subject: [PATCH 60/60] Fix #837 --- packages/components/src/lib/distributionSpecBuilder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/components/src/lib/distributionSpecBuilder.ts b/packages/components/src/lib/distributionSpecBuilder.ts index 4286dbdb..7a5bcd2f 100644 --- a/packages/components/src/lib/distributionSpecBuilder.ts +++ b/packages/components/src/lib/distributionSpecBuilder.ts @@ -42,7 +42,7 @@ export let linearYScale: LinearScale = { name: "yscale", type: "linear", range: "height", - zero: false, + zero: true, domain: { fields: [ { @@ -84,7 +84,7 @@ export let expYScale: PowScale = { type: "pow", exponent: 0.1, range: "height", - zero: false, + zero: true, nice: false, domain: { fields: [