diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 99f465dc..b7dcbd2d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -8,15 +8,23 @@ # IMPORTANT NOTE: in order to actually get pinged, commit access is required. # This also holds true for GitHub teams. -# This file -/.github/CODEOWNERS @quinn-dougherty - -# Any rescript code +# Rescript *.res @Hazelfire @OAGr @quinn-dougherty +*.resi @Hazelfire @OAGr @quinn-dougherty -# Any typescript code +# Typescript *.tsx @Hazelfire @OAGr +*.ts @Hazelfire @OAGr + +# Javascript +*.js @Hazelfire # Any opsy files +.github/* @quinn-dougherty *.json @quinn-dougherty @Hazelfire *.y*ml @quinn-dougherty +*.config.js @Hazelfire + +# Documentation +*.md @quinn-dougherty @OAGr @Hazelfire +*.mdx @quinn-dougherty @OAGr @Hazelfire diff --git a/.github/ISSUE_TEMPLATE/developer-bug.md b/.github/ISSUE_TEMPLATE/developer-bug.md index db88bcad..0c62e4ab 100644 --- a/.github/ISSUE_TEMPLATE/developer-bug.md +++ b/.github/ISSUE_TEMPLATE/developer-bug.md @@ -1,6 +1,6 @@ --- name: Developer friction when contributing to Squiggle -about: Did your yarn scripts fail? Did the CI diverge from a README? Have a testing-related task? Etc. +about: Have a testing-related task? Did your yarn scripts fail? Did the CI diverge from a README? Etc. labels: "ops & testing" --- diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yml similarity index 56% rename from .github/workflows/ci.yaml rename to .github/workflows/ci.yml index b45318d8..2926ee85 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yml @@ -1,11 +1,18 @@ name: Squiggle packages check on: - push: # Delete this line if there becomes a scarcity of build minutes. + push: + branches: + - master + - production + - staging + - develop pull_request: branches: - master + - production - staging + - develop jobs: pre_check: @@ -32,8 +39,29 @@ jobs: with: paths: '["packages/website/**"]' - lang-build-test: - name: Language build and test + lang-lint: + name: Language lint + runs-on: ubuntu-latest + needs: pre_check + if: ${{ needs.pre_check.outputs.should_skip_lang != 'true' }} + defaults: + run: + shell: bash + working-directory: packages/squiggle-lang + steps: + - uses: actions/checkout@v2 + - name: Install Dependencies + run: cd ../../ && yarn + - name: Check rescript lint + run: yarn lint:rescript + - name: Check javascript, typescript, and markdown lint + uses: creyD/prettier_action@v4.2 + with: + dry: true + prettier_options: --check . + + lang-build-test-bundle: + name: Language build, test, and bundle runs-on: ubuntu-latest needs: pre_check if: ${{ needs.pre_check.outputs.should_skip_lang != 'true' }} @@ -51,12 +79,31 @@ jobs: run: yarn test - name: Run webpack run: yarn bundle + - name: Upload coverage report + run: yarn coverage:ci - components-build-test: - name: Components build and test + components-lint: + name: Components lint runs-on: ubuntu-latest - needs: [pre_check] + needs: pre_check if: ${{ needs.pre_check.outputs.should_skip_components != 'true' }} + defaults: + run: + shell: bash + working-directory: packages/components + steps: + - uses: actions/checkout@v2 + - name: Check javascript, typescript, and markdown lint + uses: creyD/prettier_action@v4.2 + with: + dry: true + prettier_options: --check . + + components-bundle-build: + name: Components bundle and build + runs-on: ubuntu-latest + needs: pre_check + if: ${{ (needs.pre_check.outputs.should_skip_components != 'true') || (needs.pre_check.outputs.should_skip_lang != 'true') }} defaults: run: shell: bash @@ -72,11 +119,28 @@ jobs: - name: Build storybook run: yarn build + website-lint: + name: Website lint + runs-on: ubuntu-latest + needs: pre_check + if: ${{ needs.pre_check.outputs.should_skip_website != 'true' }} + defaults: + run: + shell: bash + working-directory: packages/website + steps: + - uses: actions/checkout@v2 + - name: Check javascript, typescript, and markdown lint + uses: creyD/prettier_action@v4.2 + with: + dry: true + prettier_options: --check . + website-build: name: Website build runs-on: ubuntu-latest needs: pre_check - if: ${{ needs.pre_check.outputs.should_skip_website != 'true' }} + if: ${{ (needs.pre_check.outputs.should_skip_website != 'true') || (needs.pre_check.outputs.should_skip_lang != 'true') || (needs.pre_check.outputs.should_skip_components != 'true') }} defaults: run: shell: bash diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 13446dab..83eb8152 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -15,12 +15,16 @@ on: push: branches: - master + - production - staging + - develop pull_request: # The branches below must be a subset of the branches above branches: - master + - production - staging + - develop schedule: - cron: "42 19 * * 0" diff --git a/README.md b/README.md index 94ea7d68..d1b85bb6 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,20 @@ # Squiggle -![Packages check](https://github.com/QURIresearch/squiggle/actions/workflows/ci.yaml/badge.svg) +[![Packages check](https://github.com/quantified-uncertainty/squiggle/actions/workflows/ci.yml/badge.svg)](https://github.com/quantified-uncertainty/squiggle/actions/workflows/ci.yml) [![npm version](https://badge.fury.io/js/@quri%2Fsquiggle-lang.svg)](https://www.npmjs.com/package/@quri/squiggle-lang) [![npm version](https://badge.fury.io/js/@quri%2Fsquiggle-components.svg)](https://www.npmjs.com/package/@quri/squiggle-components) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/quantified-uncertainty/squiggle/blob/develop/LICENSE) +[![codecov](https://codecov.io/gh/quantified-uncertainty/squiggle/branch/develop/graph/badge.svg?token=QRLBL5CQ7C)](https://codecov.io/gh/quantified-uncertainty/squiggle) This is an experimental DSL/language for making probabilistic estimates. The full story can be found [here](https://www.lesswrong.com/s/rDe8QE5NvXcZYzgZ3). ## Our deployments -- **website/docs prod**: https://squiggle-language.com -- **website/docs staging**: https://staging--squiggle-documentation.netlify.app/ -- **old playground**: https://playground.squiggle-language.com +- **website/docs prod**: https://squiggle-language.com [![Netlify Status](https://api.netlify.com/api/v1/badges/2139af5c-671d-473d-a9f6-66c96077d8a1/deploy-status)](https://app.netlify.com/sites/squiggle-documentation/deploys) +- **website/docs staging**: https://develop--squiggle-documentation.netlify.app/ +- **components storybook prod**: https://squiggle-components.netlify.app/ [![Netlify Status](https://api.netlify.com/api/v1/badges/b7f724aa-6b20-4d0e-bf86-3fcd1a3e9a70/deploy-status)](https://app.netlify.com/sites/squiggle-components/deploys) +- **components storybook staging**: https://develop--squiggle-components.netlify.app/ +- **legacy (2020) playground**: https://playground.squiggle-language.com ## Packages diff --git a/package.json b/package.json index 13655910..4ae0287b 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "scripts": { "nodeclean": "rm -r node_modules && rm -r packages/*/node_modules" }, + "devDependencies": { + "prettier": "^2.6.2" + }, "workspaces": [ "packages/*" ], diff --git a/packages/components/package.json b/packages/components/package.json index 717694f3..2cef6bee 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -4,7 +4,7 @@ "dependencies": { "@quri/squiggle-lang": "0.2.2", "@testing-library/jest-dom": "^5.16.4", - "@testing-library/react": "^13.0.0", + "@testing-library/react": "^13.0.1", "@testing-library/user-event": "^14.0.4", "@types/jest": "^27.4.0", "@types/lodash": "^4.14.181", @@ -31,8 +31,10 @@ "scripts": { "start": "cross-env REACT_APP_FAST_REFRESH=false && start-storybook -p 6006 -s public", "build": "tsc -b && build-storybook -s public", - "bundle": "tsc -b && webpack", - "all": "yarn bundle && yarn build" + "bundle": "webpack", + "all": "yarn bundle && yarn build", + "lint": "prettier --check .", + "format": "prettier --write ." }, "eslintConfig": { "extends": [ @@ -74,10 +76,7 @@ "@storybook/react": "^6.4.20", "@types/styled-components": "^5.1.24", "@types/webpack": "^4.41.32", - "css-loader": "^6.7.1", - "prettier": "^2.6.2", "react-codejar": "^1.1.2", - "speed-measure-webpack-plugin": "^1.5.0", "style-loader": "^3.3.1", "ts-loader": "^9.2.8", "webpack": "^5.72.0", diff --git a/packages/squiggle-lang/lint.sh b/packages/squiggle-lang/lint.sh new file mode 100755 index 00000000..071823c9 --- /dev/null +++ b/packages/squiggle-lang/lint.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Hat tip to @dfalling +# https://forum.rescript-lang.org/t/rescript-9-1-how-can-we-format-to-standard-out/1590/2?u=quinn-dougherty + +errors=false + +files=`ls src/rescript/**/**/*.res src/rescript/**/*.res src/rescript/*.res` +for file in $files +do + current=`cat $file` + linted=`echo "${current}" | rescript format -stdin .res` + diff=`diff <(echo $current) <(echo $linted)` + + if [ ${#diff} -gt 0 ] + then + echo "ERROR: $file doesn't pass lint" + errors=true + fi +done + +files=`ls src/rescript/**/**/*.resi src/rescript/**/*.resi` # src/rescript/*/resi +for file in $files +do + current=`cat $file` + linted=`echo "${current}" | rescript format -stdin .resi` + diff=`diff <(echo $current) <(echo $linted)` + if [ ${#diff} -gt 0 ] + then + echo "ERROR: $file doesn't pass lint" + errors=true + fi +done + + +if $errors +then + exit 1 +else + echo "All files pass lint" +fi \ No newline at end of file diff --git a/packages/squiggle-lang/package.json b/packages/squiggle-lang/package.json index a2c93a54..53afae8b 100644 --- a/packages/squiggle-lang/package.json +++ b/packages/squiggle-lang/package.json @@ -11,6 +11,11 @@ "test": "jest", "test:watch": "jest --watchAll", "coverage": "rm -f *.coverage; yarn clean; BISECT_ENABLE=yes yarn build; yarn test; bisect-ppx-report html", + "coverage:ci": "yarn clean; BISECT_ENABLE=yes yarn build; yarn test; bisect-ppx-report send-to Codecov", + "lint:rescript": "./lint.sh", + "lint:prettier": "prettier --check .", + "lint": "yarn lint:rescript && yarn lint:prettier", + "format": "rescript format -all && prettier --write .", "all": "yarn build && yarn bundle && yarn test" }, "keywords": [ diff --git a/packages/squiggle-lang/src/rescript/OldInterpreter/ASTTypes.res b/packages/squiggle-lang/src/rescript/OldInterpreter/ASTTypes.res index 17477f8f..873eeb86 100644 --- a/packages/squiggle-lang/src/rescript/OldInterpreter/ASTTypes.res +++ b/packages/squiggle-lang/src/rescript/OldInterpreter/ASTTypes.res @@ -213,19 +213,20 @@ module SamplingDistribution = { let i1 = renderIfIsNotSamplingDistribution(evaluationParams, t1) let i2 = renderIfIsNotSamplingDistribution(evaluationParams, t2) E.R.merge(i1, i2) |> E.R.bind(_, ((a, b)) => { - let samples = getCombinationSamples( - evaluationParams.samplingInputs.sampleCount, - algebraicOp, - a, - b, - ) |> E.O.toResult("Could not get samples") + let samples = + getCombinationSamples( + evaluationParams.samplingInputs.sampleCount, + algebraicOp, + a, + b, + ) |> E.O.toResult("Could not get samples") - let sampleSetDist = samples -> E.R.bind(SampleSetDist.make) + let sampleSetDist = samples->E.R.bind(SampleSetDist.make) - let pointSetDist = - sampleSetDist - -> E.R.bind(r => - SampleSetDist.toPointSetDist(~samplingInputs=evaluationParams.samplingInputs, ~samples=r)); + let pointSetDist = + sampleSetDist->E.R.bind(r => + SampleSetDist.toPointSetDist(~samplingInputs=evaluationParams.samplingInputs, ~samples=r) + ) pointSetDist |> E.R.fmap(r => #Normalize(#RenderedDist(r))) }) } diff --git a/packages/squiggle-lang/src/rescript/OldInterpreter/DistPlus.res b/packages/squiggle-lang/src/rescript/OldInterpreter/DistPlus.res index 2b1688b0..f3297703 100644 --- a/packages/squiggle-lang/src/rescript/OldInterpreter/DistPlus.res +++ b/packages/squiggle-lang/src/rescript/OldInterpreter/DistPlus.res @@ -1,116 +1,87 @@ -open PointSetTypes; +open PointSetTypes @genType -type t = PointSetTypes.distPlus; +type t = PointSetTypes.distPlus -let pointSetDistIntegral = pointSetDist => PointSetDist.T.Integral.get(pointSetDist); -let make = - ( - ~pointSetDist, - ~squiggleString, - (), - ) - : t => { - let integral = pointSetDistIntegral(pointSetDist); - {pointSetDist, integralCache: integral, squiggleString}; -}; +let pointSetDistIntegral = pointSetDist => PointSetDist.T.Integral.get(pointSetDist) +let make = (~pointSetDist, ~squiggleString, ()): t => { + let integral = pointSetDistIntegral(pointSetDist) + {pointSetDist: pointSetDist, integralCache: integral, squiggleString: squiggleString} +} -let update = - ( - ~pointSetDist=?, - ~integralCache=?, - ~squiggleString=?, - t: t, - ) => { +let update = (~pointSetDist=?, ~integralCache=?, ~squiggleString=?, t: t) => { pointSetDist: E.O.default(t.pointSetDist, pointSetDist), integralCache: E.O.default(t.integralCache, integralCache), squiggleString: E.O.default(t.squiggleString, squiggleString), -}; +} let updateShape = (pointSetDist, t) => { - let integralCache = pointSetDistIntegral(pointSetDist); - update(~pointSetDist, ~integralCache, t); -}; + let integralCache = pointSetDistIntegral(pointSetDist) + update(~pointSetDist, ~integralCache, t) +} -let toPointSetDist = ({pointSetDist, _}: t) => pointSetDist; +let toPointSetDist = ({pointSetDist, _}: t) => pointSetDist -let pointSetDistFn = (fn, {pointSetDist}: t) => fn(pointSetDist); +let pointSetDistFn = (fn, {pointSetDist}: t) => fn(pointSetDist) -module T = - Distributions.Dist({ - type t = PointSetTypes.distPlus; - type integral = PointSetTypes.distPlus; - let toPointSetDist = toPointSetDist; - let toContinuous = pointSetDistFn(PointSetDist.T.toContinuous); - let toDiscrete = pointSetDistFn(PointSetDist.T.toDiscrete); +module T = Distributions.Dist({ + type t = PointSetTypes.distPlus + type integral = PointSetTypes.distPlus + let toPointSetDist = toPointSetDist + let toContinuous = pointSetDistFn(PointSetDist.T.toContinuous) + let toDiscrete = pointSetDistFn(PointSetDist.T.toDiscrete) - let normalize = (t: t): t => { - let normalizedShape = t |> toPointSetDist |> PointSetDist.T.normalize; - t |> updateShape(normalizedShape); - }; + let normalize = (t: t): t => { + let normalizedShape = t |> toPointSetDist |> PointSetDist.T.normalize + t |> updateShape(normalizedShape) + } - let truncate = (leftCutoff, rightCutoff, t: t): t => { - let truncatedShape = - t - |> toPointSetDist - |> PointSetDist.T.truncate(leftCutoff, rightCutoff); + let truncate = (leftCutoff, rightCutoff, t: t): t => { + let truncatedShape = t |> toPointSetDist |> PointSetDist.T.truncate(leftCutoff, rightCutoff) - t |> updateShape(truncatedShape); - }; + t |> updateShape(truncatedShape) + } - let xToY = (f, t: t) => - t - |> toPointSetDist - |> PointSetDist.T.xToY(f); + let xToY = (f, t: t) => t |> toPointSetDist |> PointSetDist.T.xToY(f) - let minX = pointSetDistFn(PointSetDist.T.minX); - let maxX = pointSetDistFn(PointSetDist.T.maxX); - let toDiscreteProbabilityMassFraction = - pointSetDistFn(PointSetDist.T.toDiscreteProbabilityMassFraction); + let minX = pointSetDistFn(PointSetDist.T.minX) + let maxX = pointSetDistFn(PointSetDist.T.maxX) + let toDiscreteProbabilityMassFraction = pointSetDistFn( + PointSetDist.T.toDiscreteProbabilityMassFraction, + ) - // This bit is kind of awkward, could probably use rethinking. - let integral = (t: t) => - updateShape(Continuous(t.integralCache), t); + // This bit is kind of awkward, could probably use rethinking. + let integral = (t: t) => updateShape(Continuous(t.integralCache), t) - let updateIntegralCache = (integralCache: option, t) => - update(~integralCache=E.O.default(t.integralCache, integralCache), t); + let updateIntegralCache = (integralCache: option, t) => + update(~integralCache=E.O.default(t.integralCache, integralCache), t) - let downsample = (i, t): t => - updateShape(t |> toPointSetDist |> PointSetDist.T.downsample(i), t); - // todo: adjust for limit, maybe? - let mapY = - ( - ~integralSumCacheFn=previousIntegralSum => None, - ~integralCacheFn=previousIntegralCache => None, - ~fn, - {pointSetDist, _} as t: t, - ) - : t => - PointSetDist.T.mapY(~integralSumCacheFn, ~fn, pointSetDist) - |> updateShape(_, t); + let downsample = (i, t): t => updateShape(t |> toPointSetDist |> PointSetDist.T.downsample(i), t) + // todo: adjust for limit, maybe? + let mapY = ( + ~integralSumCacheFn=previousIntegralSum => None, + ~integralCacheFn=previousIntegralCache => None, + ~fn, + {pointSetDist, _} as t: t, + ): t => PointSetDist.T.mapY(~integralSumCacheFn, ~fn, pointSetDist) |> updateShape(_, t) - // get the total of everything - let integralEndY = (t: t) => { - PointSetDist.T.Integral.sum( - toPointSetDist(t), - ); - }; + // get the total of everything + let integralEndY = (t: t) => { + PointSetDist.T.Integral.sum(toPointSetDist(t)) + } - // TODO: Fix this below, obviously. Adjust for limits - let integralXtoY = (f, t: t) => { - PointSetDist.T.Integral.xToY( - f, - toPointSetDist(t), - ) - }; + // TODO: Fix this below, obviously. Adjust for limits + let integralXtoY = (f, t: t) => { + PointSetDist.T.Integral.xToY(f, toPointSetDist(t)) + } - // TODO: This part is broken when there is a limit, if this is supposed to be taken into account. - let integralYtoX = (f, t: t) => { - PointSetDist.T.Integral.yToX(f, toPointSetDist(t)); - }; + // TODO: This part is broken when there is a limit, if this is supposed to be taken into account. + let integralYtoX = (f, t: t) => { + PointSetDist.T.Integral.yToX(f, toPointSetDist(t)) + } - let mean = (t: t) => { - PointSetDist.T.mean(t.pointSetDist); - }; - let variance = (t: t) => PointSetDist.T.variance(t.pointSetDist); - }); + let mean = (t: t) => { + PointSetDist.T.mean(t.pointSetDist) + } + let variance = (t: t) => PointSetDist.T.variance(t.pointSetDist) +}) diff --git a/packages/squiggle-lang/src/rescript/OldParser/Parser.res b/packages/squiggle-lang/src/rescript/OldParser/Parser.res index 6f5fd9ef..8a5e4390 100644 --- a/packages/squiggle-lang/src/rescript/OldParser/Parser.res +++ b/packages/squiggle-lang/src/rescript/OldParser/Parser.res @@ -121,17 +121,14 @@ module MathAdtToDistDst = { | (_, _, Ok(mu), Ok(sigma)) => Ok(#FunctionCall("lognormal", [mu, sigma])) | _ => Error("Lognormal distribution needs either mean and stdev or mu and sigma") } - | _ => - parseArgs() |> E.R.fmap((args: array) => - #FunctionCall("lognormal", args) - ) + | _ => parseArgs() |> E.R.fmap((args: array) => #FunctionCall("lognormal", args)) } // Error("Dotwise exponentiation needs two operands") - let operationParser = ( - name: string, - args: result, string>, - ): result => { + let operationParser = (name: string, args: result, string>): result< + ASTTypes.node, + string, + > => { let toOkAlgebraic = r => Ok(#AlgebraicCombination(r)) let toOkPointwise = r => Ok(#PointwiseCombination(r)) let toOkTruncate = r => Ok(#Truncate(r)) @@ -169,10 +166,7 @@ module MathAdtToDistDst = { } let functionParser = ( - nodeParser: MathJsonToMathJsAdt.arg => Belt.Result.t< - ASTTypes.node, - string, - >, + nodeParser: MathJsonToMathJsAdt.arg => Belt.Result.t, name: string, args: array, ): result => { @@ -224,17 +218,11 @@ module MathAdtToDistDst = { ) Ok(hash) } - | name => - parseArgs() |> E.R.fmap((args: array) => - #FunctionCall(name, args) - ) + | name => parseArgs() |> E.R.fmap((args: array) => #FunctionCall(name, args)) } } - let rec nodeParser: MathJsonToMathJsAdt.arg => result< - ASTTypes.node, - string, - > = x => + let rec nodeParser: MathJsonToMathJsAdt.arg => result = x => switch x { | Value(f) => Ok(#SymbolicDist(#Float(f))) | Symbol(sym) => Ok(#Symbol(sym)) @@ -267,8 +255,7 @@ module MathAdtToDistDst = { blocks |> E.A.fmap(b => topLevel(b)) |> E.A.R.firstErrorOrOpen |> E.R.fmap(E.A.concatMany) } - let run = (r): result => - r |> MathAdtCleaner.run |> topLevel + let run = (r): result => r |> MathAdtCleaner.run |> topLevel } /* The MathJs parser doesn't support '.+' syntax, but we want it because it diff --git a/packages/squiggle-lang/src/rescript/ProgramEvaluator.res b/packages/squiggle-lang/src/rescript/ProgramEvaluator.res index b2317050..96a765d8 100644 --- a/packages/squiggle-lang/src/rescript/ProgramEvaluator.res +++ b/packages/squiggle-lang/src/rescript/ProgramEvaluator.res @@ -39,17 +39,16 @@ module Inputs = { type exportDistribution = [ | #DistPlus(DistPlus.t) | #Float(float) - | #Function((float) => Belt.Result.t) + | #Function(float => Belt.Result.t) ] type exportEnv = array<(string, ASTTypes.node)> type exportType = { - environment : exportEnv, - exports: array + environment: exportEnv, + exports: array, } - module Internals = { let addVariable = ( {samplingInputs, squiggleString, environment}: Inputs.inputs, @@ -58,9 +57,7 @@ module Internals = { ): Inputs.inputs => { samplingInputs: samplingInputs, squiggleString: squiggleString, - environment: ASTTypes.Environment.update(environment, str, _ => Some( - node, - )), + environment: ASTTypes.Environment.update(environment, str, _ => Some(node)), } type outputs = { @@ -76,8 +73,7 @@ module Internals = { pointSetDistLength: inputs.samplingInputs.pointDistLength |> E.O.default(10000), } - let runNode = (inputs, node) => - AST.toLeaf(makeInputs(inputs), inputs.environment, node) + let runNode = (inputs, node) => AST.toLeaf(makeInputs(inputs), inputs.environment, node) let renderIfNeeded = (inputs: Inputs.inputs, node: ASTTypes.node): result< ASTTypes.node, @@ -106,16 +102,14 @@ module Internals = { let outputToDistPlus = (inputs: Inputs.inputs, pointSetDist: PointSetTypes.pointSetDist) => DistPlus.make(~pointSetDist, ~squiggleString=Some(inputs.squiggleString), ()) - let rec returnDist = (functionInfo : (array, ASTTypes.node), - inputs : Inputs.inputs, - env : ASTTypes.environment) => { - (input : float) => { - let foo: Inputs.inputs = {...inputs, environment: env}; - evaluateFunction( - foo, - functionInfo, - [#SymbolicDist(#Float(input))], - ) |> E.R.bind(_, a => + let rec returnDist = ( + functionInfo: (array, ASTTypes.node), + inputs: Inputs.inputs, + env: ASTTypes.environment, + ) => { + (input: float) => { + let foo: Inputs.inputs = {...inputs, environment: env} + evaluateFunction(foo, functionInfo, [#SymbolicDist(#Float(input))]) |> E.R.bind(_, a => switch a { | #DistPlus(d) => Ok(DistPlus.T.normalize(d)) | n => @@ -126,11 +120,10 @@ module Internals = { } } // TODO: Consider using ExpressionTypes.ExpressionTree.getFloat or similar in this function - and coersionToExportedTypes = ( - inputs, - env: ASTTypes.environment, - ex: ASTTypes.node, - ): result => + and coersionToExportedTypes = (inputs, env: ASTTypes.environment, ex: ASTTypes.node): result< + exportDistribution, + string, + > => ex |> renderIfNeeded(inputs) |> E.R.bind(_, x => @@ -143,56 +136,45 @@ module Internals = { } ) - and evaluateFunction = ( - inputs: Inputs.inputs, - fn: (array, ASTTypes.node), - fnInputs, - ) => { - let output = AST.runFunction( - makeInputs(inputs), - inputs.environment, - fnInputs, - fn, - ) + and evaluateFunction = (inputs: Inputs.inputs, fn: (array, ASTTypes.node), fnInputs) => { + let output = AST.runFunction(makeInputs(inputs), inputs.environment, fnInputs, fn) output |> E.R.bind(_, coersionToExportedTypes(inputs, inputs.environment)) } let runProgram = (inputs: Inputs.inputs, p: ASTTypes.program) => { let ins = ref(inputs) p - |> E.A.fmap(x => - switch x { - | #Assignment(name, node) => - ins := addVariable(ins.contents, name, node) - None - | #Expression(node) => - Some(runNode(ins.contents, node)) - } - ) - |> E.A.O.concatSomes + |> E.A.fmap(x => + switch x { + | #Assignment(name, node) => + ins := addVariable(ins.contents, name, node) + None + | #Expression(node) => Some(runNode(ins.contents, node)) + } + ) + |> E.A.O.concatSomes + |> E.A.R.firstErrorOrOpen + |> E.R.bind(_, d => + d + |> E.A.fmap(x => coersionToExportedTypes(inputs, ins.contents.environment, x)) |> E.A.R.firstErrorOrOpen - |> E.R.bind(_, d => - d - |> E.A.fmap(x => coersionToExportedTypes(inputs, ins.contents.environment, x)) - |> E.A.R.firstErrorOrOpen - ) - |> E.R.fmap(ex => - { - environment: Belt.Map.String.toArray(ins.contents.environment), - exports: ex - } - ) + ) + |> E.R.fmap(ex => { + environment: Belt.Map.String.toArray(ins.contents.environment), + exports: ex, + }) } let inputsToLeaf = (inputs: Inputs.inputs) => Parser.fromString(inputs.squiggleString) |> E.R.bind(_, g => runProgram(inputs, g)) - } - @genType -let runAll : (string, Inputs.SamplingInputs.t, exportEnv) => result = - (squiggleString, samplingInputs, environment) => { +let runAll: (string, Inputs.SamplingInputs.t, exportEnv) => result = ( + squiggleString, + samplingInputs, + environment, +) => { let inputs = Inputs.make( ~samplingInputs, ~squiggleString, diff --git a/packages/website/docs/Playground.mdx b/packages/website/docs/Playground.mdx deleted file mode 100644 index 87231f4c..00000000 --- a/packages/website/docs/Playground.mdx +++ /dev/null @@ -1,7 +0,0 @@ ---- -sidebar_position: 2 ---- - -import { SquigglePlayground } from "../src/components/SquigglePlayground"; - - diff --git a/packages/website/docusaurus.config.js b/packages/website/docusaurus.config.js index 0862d27b..0b3d2d04 100644 --- a/packages/website/docusaurus.config.js +++ b/packages/website/docusaurus.config.js @@ -79,12 +79,7 @@ const config = { label: "Documentation", }, { to: "/blog", label: "Blog", position: "left" }, - { - type: "doc", - docId: "Playground", - label: "Playground", - position: "left", - }, + { to: "/playground", label: "Playground", position: "left" }, { href: "https://github.com/QURIresearch/squiggle", label: "GitHub", diff --git a/packages/website/package.json b/packages/website/package.json index 8744677b..e0b0132b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -6,7 +6,9 @@ "start": "docusaurus start", "build": "docusaurus build", "clean": "docusaurus clear", - "all": "yarn build" + "all": "yarn build", + "lint": "prettier --check .", + "format": "prettier --write ." }, "dependencies": { "@docusaurus/core": "2.0.0-beta.18", diff --git a/packages/website/sidebars.js b/packages/website/sidebars.js index 3e6fcb7d..4685c349 100644 --- a/packages/website/sidebars.js +++ b/packages/website/sidebars.js @@ -20,11 +20,6 @@ const sidebars = { id: "Introduction", label: "Introduction", }, - { - type: "doc", - id: "Playground", - label: "Playground", - }, { type: "category", label: "Features", diff --git a/packages/website/src/pages/playground.js b/packages/website/src/pages/playground.js new file mode 100644 index 00000000..5d3a6571 --- /dev/null +++ b/packages/website/src/pages/playground.js @@ -0,0 +1,20 @@ +import React from "react"; +import Layout from "@theme/Layout"; +import { SquigglePlayground } from "../components/SquigglePlayground"; + +export default function PlaygroundPage() { + return ( + +
+

Squiggle Playground

+ +
+
+ ); +} diff --git a/yarn.lock b/yarn.lock index bd8996a6..c7b42e3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1394,9 +1394,9 @@ postcss-value-parser "^4.2.0" "@ctrl/tinycolor@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.0.tgz#c3c5ae543c897caa9c2a68630bed355be5f9990f" - integrity sha512-JZButFdZ1+/xAfpguQHoabIXkcqRRKpMrWKBkpEZZyxfY9C1DpADFB8PEqGSTeFr135SaTRfKqGKx5xSCLI7ZQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" + integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== "@discoveryjs/json-ext@^0.5.0", "@discoveryjs/json-ext@^0.5.3": version "0.5.7" @@ -3629,19 +3629,19 @@ lodash "^4.17.15" redent "^3.0.0" -"@testing-library/react@^13.0.0": - version "13.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.0.0.tgz#8cdaf4667c6c2b082eb0513731551e9db784e8bc" - integrity sha512-p0lYA1M7uoEmk2LnCbZLGmHJHyH59sAaZVXChTXlyhV/PRW9LoIh4mdf7tiXsO8BoNG+vN8UnFJff1hbZeXv+w== +"@testing-library/react@^13.0.1": + version "13.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.0.1.tgz#00d223e182923d341a9610590561fb9dd1324110" + integrity sha512-zeHx3PohYYp+4bTJwrixQY8zSBZjWUGwYc7OhD1EpWTHS92RleApLoP72NdwaWxOrM1P1Uezt3XvGf6t2XSWPQ== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^8.5.0" - "@types/react-dom" "*" + "@types/react-dom" "^18.0.0" "@testing-library/user-event@^14.0.4": - version "14.0.4" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.0.4.tgz#5b430a9c27f25078bff4471661b755115d0db9d4" - integrity sha512-VBZe5lcUsmrQyOwIFvqOxLBoaTw1/Qy4Ek+VgmFYs719bs2SxUp42vbsb7ATlQDkHdj4OIQlucfpwxe5WoG1jA== + version "14.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.1.0.tgz#db479c06271b72a4d41cf595ec2ad7ff078c1d72" + integrity sha512-+CGfMXlVM+OwREHDEsfTGsXIMI+rjr3a7YBUSutq7soELht+8kQrM5k46xa/WLfHdtX/wqsDIleL6bi4i+xz0w== "@tootallnate/once@1": version "1.1.2" @@ -3985,7 +3985,7 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-dom@*", "@types/react-dom@^18.0.0": +"@types/react-dom@^18.0.0": version "18.0.0" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.0.tgz#b13f8d098e4b0c45df4f1ed123833143b0c71141" integrity sha512-49897Y0UiCGmxZqpC8Blrf6meL8QUla6eb+BBhn69dTXlmuOlzkfr7HHY/O8J25e1lTUMs+YYxSlVDAaGHCOLg== @@ -4025,10 +4025,10 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@17.0.43", "@types/react@^16.9.19", "@types/react@^18.0.1": - version "17.0.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.43.tgz#4adc142887dd4a2601ce730bc56c3436fdb07a55" - integrity sha512-8Q+LNpdxf057brvPu1lMtC5Vn7J119xrP1aq4qiaefNioQUYANF/CYeK4NsKorSZyUGJ66g0IM+4bbjwx45o2A== +"@types/react@*", "@types/react@^16.9.19", "@types/react@^18.0.1": + version "18.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.2.tgz#bc6a0572d434642ebe8b4ac0f121d18e2f2d8f7f" + integrity sha512-2poV9ReTwwV5ZNxkKyk7t6Vp/odeTfYI3vRjtDYWfUdEstx9mp26jzELfMBwV6gXg1irhHUnmZJH/dJW7xafcA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -4181,13 +4181,13 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz#950df411cec65f90d75d6320a03b2c98f6c3af7d" - integrity sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A== + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.19.0.tgz#9608a4b6d0427104bccf132f058cba629a6553c0" + integrity sha512-w59GpFqDYGnWFim9p6TGJz7a3qWeENJuAKCqjGSx+Hq/bwq3RZwXYqy98KIfN85yDqz9mq6QXiY5h0FjGQLyEg== dependencies: - "@typescript-eslint/scope-manager" "5.18.0" - "@typescript-eslint/type-utils" "5.18.0" - "@typescript-eslint/utils" "5.18.0" + "@typescript-eslint/scope-manager" "5.19.0" + "@typescript-eslint/type-utils" "5.19.0" + "@typescript-eslint/utils" "5.19.0" debug "^4.3.2" functional-red-black-tree "^1.0.1" ignore "^5.1.8" @@ -4196,75 +4196,75 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz#a6b5662e6b0452cb0e75a13662ce3b33cd1be59d" - integrity sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA== + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.19.0.tgz#b7c8f1e22624d4f3d1b3683438530f5636086cb7" + integrity sha512-F+X/TTzmb2UXbghY1LrNLNDjMcGZMhKzXuzvu0xD+YEB77EamLM7zMOLuz2kP5807IJRDLBoAFFPYa7HT62sYg== dependencies: - "@typescript-eslint/utils" "5.18.0" + "@typescript-eslint/utils" "5.19.0" "@typescript-eslint/parser@^5.5.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6" - integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ== + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.19.0.tgz#05e587c1492868929b931afa0cb5579b0f728e75" + integrity sha512-yhktJjMCJX8BSBczh1F/uY8wGRYrBeyn84kH6oyqdIJwTGKmzX5Qiq49LRQ0Jh0LXnWijEziSo6BRqny8nqLVQ== dependencies: - "@typescript-eslint/scope-manager" "5.18.0" - "@typescript-eslint/types" "5.18.0" - "@typescript-eslint/typescript-estree" "5.18.0" + "@typescript-eslint/scope-manager" "5.19.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/typescript-estree" "5.19.0" debug "^4.3.2" -"@typescript-eslint/scope-manager@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505" - integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ== +"@typescript-eslint/scope-manager@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.19.0.tgz#97e59b0bcbcb54dbcdfba96fc103b9020bbe9cb4" + integrity sha512-Fz+VrjLmwq5fbQn5W7cIJZ066HxLMKvDEmf4eu1tZ8O956aoX45jAuBB76miAECMTODyUxH61AQM7q4/GOMQ5g== dependencies: - "@typescript-eslint/types" "5.18.0" - "@typescript-eslint/visitor-keys" "5.18.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/visitor-keys" "5.19.0" -"@typescript-eslint/type-utils@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz#62dbfc8478abf36ba94a90ddf10be3cc8e471c74" - integrity sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA== +"@typescript-eslint/type-utils@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.19.0.tgz#80f2125b0dfe82494bbae1ea99f1c0186d420282" + integrity sha512-O6XQ4RI4rQcBGshTQAYBUIGsKqrKeuIOz9v8bckXZnSeXjn/1+BDZndHLe10UplQeJLXDNbaZYrAytKNQO2T4Q== dependencies: - "@typescript-eslint/utils" "5.18.0" + "@typescript-eslint/utils" "5.19.0" debug "^4.3.2" tsutils "^3.21.0" -"@typescript-eslint/types@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e" - integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw== +"@typescript-eslint/types@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.19.0.tgz#12d3d600d754259da771806ee8b2c842d3be8d12" + integrity sha512-zR1ithF4Iyq1wLwkDcT+qFnhs8L5VUtjgac212ftiOP/ZZUOCuuF2DeGiZZGQXGoHA50OreZqLH5NjDcDqn34w== -"@typescript-eslint/typescript-estree@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474" - integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ== +"@typescript-eslint/typescript-estree@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.19.0.tgz#fc987b8f62883f9ea6a5b488bdbcd20d33c0025f" + integrity sha512-dRPuD4ocXdaE1BM/dNR21elSEUPKaWgowCA0bqJ6YbYkvtrPVEvZ+zqcX5a8ECYn3q5iBSSUcBBD42ubaOp0Hw== dependencies: - "@typescript-eslint/types" "5.18.0" - "@typescript-eslint/visitor-keys" "5.18.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/visitor-keys" "5.19.0" debug "^4.3.2" globby "^11.0.4" is-glob "^4.0.3" semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/utils@5.18.0", "@typescript-eslint/utils@^5.13.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.18.0.tgz#27fc84cf95c1a96def0aae31684cb43a37e76855" - integrity sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA== +"@typescript-eslint/utils@5.19.0", "@typescript-eslint/utils@^5.13.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.19.0.tgz#fe87f1e3003d9973ec361ed10d36b4342f1ded1e" + integrity sha512-ZuEckdupXpXamKvFz/Ql8YnePh2ZWcwz7APICzJL985Rp5C2AYcHO62oJzIqNhAMtMK6XvrlBTZeNG8n7gS3lQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.18.0" - "@typescript-eslint/types" "5.18.0" - "@typescript-eslint/typescript-estree" "5.18.0" + "@typescript-eslint/scope-manager" "5.19.0" + "@typescript-eslint/types" "5.19.0" + "@typescript-eslint/typescript-estree" "5.19.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60" - integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg== +"@typescript-eslint/visitor-keys@5.19.0": + version "5.19.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.19.0.tgz#c84ebc7f6c744707a361ca5ec7f7f64cd85b8af6" + integrity sha512-Ym7zZoMDZcAKWsULi2s7UMLREdVQdScPQ/fKWMYefarCztWlHPFVJo8racf8R0Gc8FAEJ2eD4of8As1oFtnQlQ== dependencies: - "@typescript-eslint/types" "5.18.0" + "@typescript-eslint/types" "5.19.0" eslint-visitor-keys "^3.0.0" "@webassemblyjs/ast@1.11.1": @@ -5019,22 +5019,24 @@ array-unique@^0.3.2: integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13" - integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" + integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.19.0" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" - integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + version "1.3.0" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f" + integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.19.0" + es-abstract "^1.19.2" + es-shim-unscopables "^1.0.0" array.prototype.map@^1.0.4: version "1.0.4" @@ -5957,9 +5959,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001317: - version "1.0.30001327" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz#c1546d7d7bb66506f0ccdad6a7d07fc6d668c858" - integrity sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w== + version "1.0.30001328" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001328.tgz#0ed7a2ca65ec45872c613630201644237ba1e329" + integrity sha512-Ue55jHkR/s4r00FLNiX+hGMMuwml/QGqqzVeMQ5thUewznU2EdULFvI3JR7JJid6OrjJNfFvHY2G2dIjmRaDDQ== capture-exit@^2.0.0: version "2.0.0" @@ -7023,9 +7025,9 @@ cyclist@^1.0.1: integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= "d3-array@1 - 3", "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@^3.1.1: - version "3.1.5" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.1.5.tgz#ba8a09fc50aee6c02c3ca2a97c485b9ce68a8e34" - integrity sha512-Rs6syGyepVjAYXWvhiFiVWUM8l4B/0p33tvlS+eXCVOaFrbz1dU7t+T16SJx/frnaLMXmFmKoXg/5aUVXxmMKQ== + version "3.1.6" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.1.6.tgz#0342c835925826f49b4d16eb7027aec334ffc97d" + integrity sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA== dependencies: internmap "1 - 2" @@ -7665,9 +7667,9 @@ ejs@^3.1.6: jake "^10.6.1" electron-to-chromium@^1.4.84: - version "1.4.106" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz#e7a3bfa9d745dd9b9e597616cb17283cc349781a" - integrity sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg== + version "1.4.107" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.107.tgz#564257014ab14033b4403a309c813123c58a3fb9" + integrity sha512-Huen6taaVrUrSy8o7mGStByba8PfOWWluHNxSHGBrCgEdFVLtvdQDBr9LBCF9Uci8SYxh28QNNMO0oC17wbGAg== element-resize-detector@^1.2.2: version "1.2.4" @@ -7802,10 +7804,10 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" - integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2: + version "1.19.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.3.tgz#4dd9da55868192756c83c5c30c7878d04e77125d" + integrity sha512-4axXLNovnMYf0+csS5rVnS5hLmV1ek+ecx9MuCjByL1E5Nn54avf6CHQxIjgQIHBnfX9AMxTRIy0q+Yu5J/fXA== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" @@ -7818,7 +7820,7 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: is-callable "^1.2.4" is-negative-zero "^2.0.2" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + is-shared-array-buffer "^1.0.2" is-string "^1.0.7" is-weakref "^1.0.2" object-inspect "^1.12.0" @@ -7852,6 +7854,13 @@ es-module-lexer@^0.9.0: resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -8032,9 +8041,9 @@ eslint-plugin-react@^7.27.1: string.prototype.matchall "^4.0.6" eslint-plugin-testing-library@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.2.1.tgz#3f89cd28ade81329a11584e0bbea129bede01619" - integrity sha512-88qJv6uzYALtiYJDzhelP3ov0Px/GLgnu+UekjjDxL2nMyvgdTyboKqcDBsvFPmAeizlCoSWOjeBN4DxO0BxaA== + version "5.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.3.0.tgz#1f5a58827fefc240e1ec1bac706de4c24f5de7be" + integrity sha512-DpQmduNYNQamIz/rz2haCOlJVIVi8gZ8mpDCCX7IMWMK436HMpepXafHhdUZxdRoaAkziLSJosRg6bqGAFqT3w== dependencies: "@typescript-eslint/utils" "^5.13.0" @@ -10108,7 +10117,7 @@ is-set@^2.0.2: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== -is-shared-array-buffer@^1.0.1: +is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== @@ -11911,9 +11920,9 @@ node-libs-browser@^2.2.1: vm-browserify "^1.0.1" node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" + integrity sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw== normalize-package-data@^2.5.0: version "2.5.0" @@ -13778,9 +13787,9 @@ rc-pagination@~3.1.9: classnames "^2.2.1" rc-picker@~2.6.4: - version "2.6.5" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.6.5.tgz#a7cf8eb0723ec81e379c784c4b798b7fe076dd8c" - integrity sha512-4pcg0PgEz4YXBfdwMuHIKaRWaADm3k3g0NtoPIgeGM+VVeOBdUowTx0YSXnT8mQEXcE9lWXX+ZX3biAzQwDM1w== + version "2.6.6" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-2.6.6.tgz#2ac71924c748f66c01a179038469f5018f450cfb" + integrity sha512-fLyvTRF9Vaa6ftBF6VTWztYbuhNDh0+k9GOeJBD/TFrYleqWEmDs27/WHlCTE6R15/nQLryofvS31cNPSpD+OA== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" @@ -13833,9 +13842,9 @@ rc-select@~14.0.0-alpha.23, rc-select@~14.0.0-alpha.8, rc-select@~14.0.2: rc-virtual-list "^3.2.0" rc-slider@~10.0.0-alpha.4: - version "10.0.0-alpha.6" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.0.0-alpha.6.tgz#d1f0098a2044a0063c912d049a1309e3357404d6" - integrity sha512-4tMChJ3lzX0qlttcXqJ2xecQ+CmZYPXJGDOvPnIS5YWsiSl452vt377/l8A1ZnwjwKAAy2V6nrOXNdqPP2Tq7w== + version "10.0.0" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.0.0.tgz#8ffe1dd3c8799c9d1f81ac808976f18af3dca206" + integrity sha512-Bk54UIKWW4wyhHcL8ehAxt+wX+n69dscnHTX6Uv0FMxSke/TGrlkZz1LSIWblCpfE2zr/dwR2Ca8nZGk3U+Tbg== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" @@ -13926,9 +13935,9 @@ rc-tree@~5.4.3: rc-virtual-list "^3.4.2" rc-trigger@^5.0.0, rc-trigger@^5.0.4, rc-trigger@^5.1.2, rc-trigger@^5.2.10: - version "5.2.12" - resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.12.tgz#023728bf2e31a3bdd07bdca016e0991aae98e504" - integrity sha512-+rymZRe23f2imQwuelWqWSKj3tAnlDbjEU8yjKzW5zh8AlChJ/brda7Qg3FQ4f2jcAquL7phVOwq5BZp2PdhAg== + version "5.2.15" + resolved "https://registry.yarnpkg.com/rc-trigger/-/rc-trigger-5.2.15.tgz#f6bfed418e602513cc3e07853ddaf37e5c5339f4" + integrity sha512-VxZWqCObtUOzs9V9Be0dDA2JGchriDpvQaJpsCI2EQ4+KWHIvjFz6Ziina4uxK5drRsn0RnBi7nngmTl9j/F7Q== dependencies: "@babel/runtime" "^7.11.2" classnames "^2.2.6" @@ -13946,9 +13955,9 @@ rc-upload@~4.3.0: rc-util "^5.2.0" rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.12.0, rc-util@^5.14.0, rc-util@^5.15.0, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.19.2, rc-util@^5.19.3, rc-util@^5.2.0, rc-util@^5.2.1, rc-util@^5.3.0, rc-util@^5.4.0, rc-util@^5.5.0, rc-util@^5.6.1, rc-util@^5.7.0, rc-util@^5.8.0, rc-util@^5.9.4, rc-util@^5.9.8: - version "5.19.6" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.19.6.tgz#76d714fd116d22bc5fd7421939589e27c1dfad19" - integrity sha512-/xJ8UtpbuJj7+2ftxVQM6gUzLY+Towq4iB6sP6/2hhn6mwWNLij2I+1qOkLv75I1jqWKpS+gU8A2EmbfLtGxNg== + version "5.20.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.20.0.tgz#05915902313292cb3f0e8da9401a403be00c3f58" + integrity sha512-sHm129TjpUiJZuHCgX5moead5yag4ukIIZuwkK1SSlFMUceEx64sZNgJZJN7YQ9NJyDpabfJ8310fkcCXeyTog== dependencies: "@babel/runtime" "^7.12.5" react-is "^16.12.0" @@ -14105,9 +14114,9 @@ react-fast-compare@^3.0.1, react-fast-compare@^3.2.0: integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== react-helmet-async@*, react-helmet-async@^1.0.7, react-helmet-async@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.2.3.tgz#57326a69304ea3293036eafb49475e9ba454cb37" - integrity sha512-mCk2silF53Tq/YaYdkl2sB+/tDoPnaxN7dFS/6ZLJb/rhUY2EWGI5Xj2b4jHppScMqY45MbgPSwTxDchKpZ5Kw== + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== dependencies: "@babel/runtime" "^7.12.5" invariant "^2.2.4" @@ -15477,13 +15486,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -speed-measure-webpack-plugin@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.5.0.tgz#caf2c5bee24ab66c1c7c30e8daa7910497f7681a" - integrity sha512-Re0wX5CtM6gW7bZA64ONOfEPEhwbiSF/vz6e2GvadjuaPrQcHTQdRGsD8+BE7iUOysXH8tIenkPCQBEcspXsNg== - dependencies: - chalk "^4.1.0" - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -17075,9 +17077,9 @@ vega-transforms@~4.10.0: vega-util "^1.16.1" vega-typings@~0.22.0: - version "0.22.2" - resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.22.2.tgz#c5f5037680778664f5246c19a56e4cfffeb0d90b" - integrity sha512-op4bNiyS150V7gnuIdjwFYB1belYB8qnapqLQQ+ZBJQ+r7a+IbvXphEUf8AkBlOoGPN1ITNdhlIsq9WWiuxu8Q== + version "0.22.3" + resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.22.3.tgz#f6c73b5ffcdb152539cfcc5ad240a413af579ba7" + integrity sha512-PREcya3nXT9Tk7xU0IhEpOLVTlqizNtKXV55NhI6ApBjJtqVYbJL7IBh2ckKxGBy3YeUQ37BQZl56UqqiYVWBw== dependencies: vega-event-selector "^3.0.0" vega-expression "^5.0.0"