diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 000d73ec..9c9c86c3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,3 +9,5 @@ updates: directory: "/" # Location of package manifests schedule: interval: "daily" + commit-message: + prefix: "⬆️" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1160c2db..bd6e38d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -71,12 +71,16 @@ jobs: run: cd ../../ && yarn - name: Build rescript codebase run: yarn build - - name: Run tests - run: yarn test + - name: Run rescript tests + run: yarn test:rescript + - name: Run typescript tests + run: yarn test:ts - name: Run webpack run: yarn bundle - - name: Upload coverage report - run: yarn coverage:ci + - name: Upload rescript coverage report + run: yarn coverage:rescript:ci + - name: Upload typescript coverage report + run: yarn coverage:ts:ci components-lint: name: Components lint diff --git a/.gitignore b/.gitignore index f5cb3583..5b48f91c 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ yarn-error.log .DS_Store **/.sync.ffs_db .direnv +.log diff --git a/nixos.sh b/nixos.sh new file mode 100755 index 00000000..91aa754f --- /dev/null +++ b/nixos.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# This script is only relevant if you're rolling nixos. + +# Esy (a bisect_ppx dependency/build tool) is borked on nixos without using an FHS shell. https://github.com/esy/esy/issues/858 +# We need to patchelf rescript executables. https://github.com/NixOS/nixpkgs/issues/107375 +set -x + +fhsShellName="squiggle-development" +fhsShellDotNix="{pkgs ? import {} }: (pkgs.buildFHSUserEnv { name = \"${fhsShellName}\"; targetPkgs = pkgs: [pkgs.yarn]; runScript = \"yarn\"; }).env" +nix-shell - <<<"$fhsShellDotNix" + +theLd=$(patchelf --print-interpreter $(which mkdir)) +patchelf --set-interpreter $theLd ./node_modules/gentype/gentype.exe +patchelf --set-interpreter $theLd ./node_modules/rescript/linux/*.exe +patchelf --set-interpreter $theLd ./node_modules/bisect_ppx/ppx +patchelf --set-interpreter $theLd ./node_moduels/bisect_ppx/bisect-ppx-report +theSo=$(find /nix/store/*$fhsShellName*/lib64 -name libstdc++.so.6 | grep $fhsShellName | head -n 1) +patchelf --replace-needed libstdc++.so.6 $theSo ./node_modules/rescript/linux/ninja.exe diff --git a/packages/squiggle-lang/.gitignore b/packages/squiggle-lang/.gitignore index 8375bb3b..4db5c5f4 100644 --- a/packages/squiggle-lang/.gitignore +++ b/packages/squiggle-lang/.gitignore @@ -19,3 +19,5 @@ yarn-error.log dist *.coverage _coverage +coverage +.nyc_output/ diff --git a/packages/squiggle-lang/__tests__/JS__Test.ts b/packages/squiggle-lang/__tests__/TS/JS_test.ts similarity index 98% rename from packages/squiggle-lang/__tests__/JS__Test.ts rename to packages/squiggle-lang/__tests__/TS/JS_test.ts index 72f68ba4..8e6db265 100644 --- a/packages/squiggle-lang/__tests__/JS__Test.ts +++ b/packages/squiggle-lang/__tests__/TS/JS_test.ts @@ -4,7 +4,7 @@ import { resultMap, squiggleExpression, errorValueToString, -} from "../src/js/index"; +} from "../../src/js/index"; let testRun = (x: string): squiggleExpression => { let result = run(x, { sampleCount: 100, xyPointLength: 100 }); diff --git a/packages/squiggle-lang/__tests__/TS/Jstat_test.ts b/packages/squiggle-lang/__tests__/TS/Jstat_test.ts new file mode 100644 index 00000000..16cb5f6e --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/Jstat_test.ts @@ -0,0 +1,27 @@ +// import { errorValueToString } from "../../src/js/index"; +import * as fc from "fast-check"; +import { testRun } from "./TestHelpers"; + +describe("cumulative density function of a normal distribution", () => { + test("at 3 stdevs to the right of the mean is near 1", () => { + fc.assert( + fc.property(fc.float(), fc.float({ min: 1e-7 }), (mean, stdev) => { + let threeStdevsAboveMean = mean + 3 * stdev; + let squiggleString = `cdf(normal(${mean}, ${stdev}), ${threeStdevsAboveMean})`; + let squiggleResult = testRun(squiggleString); + expect(squiggleResult.value).toBeCloseTo(1); + }) + ); + }); + + test("at 3 stdevs to the left of the mean is near 0", () => { + fc.assert( + fc.property(fc.float(), fc.float({ min: 1e-7 }), (mean, stdev) => { + let threeStdevsBelowMean = mean - 3 * stdev; + let squiggleString = `cdf(normal(${mean}, ${stdev}), ${threeStdevsBelowMean})`; + let squiggleResult = testRun(squiggleString); + expect(squiggleResult.value).toBeCloseTo(0); + }) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/Parser_test.ts b/packages/squiggle-lang/__tests__/TS/Parser_test.ts new file mode 100644 index 00000000..0120ff30 --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/Parser_test.ts @@ -0,0 +1,52 @@ +import { + run, + squiggleExpression, + errorValue, + result, +} from "../../src/js/index"; +import { testRun } from "./TestHelpers"; +import * as fc from "fast-check"; + +describe("Squiggle's parser is whitespace insensitive", () => { + test("when assigning a distribution to a name and calling that name", () => { + // intersperse varying amounts of whitespace in a squiggle string + let squiggleString = ( + a: string, + b: string, + c: string, + d: string, + e: string, + f: string, + g: string, + h: string + ): string => { + return `theDist${a}=${b}beta(${c}4${d},${e}5e1)${f};${g}theDist${h}`; + }; + let squiggleOutput = testRun( + squiggleString("", "", "", "", "", "", "", "") + ); + + // Add "\n" to this when multiline is introduced. + let whitespaceGen = () => { + return fc.constantFrom("", " ", "\t", " ", " ", " ", " "); + }; + + fc.assert( + fc.property( + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + whitespaceGen(), + (a, b, c, d, e, f, g, h) => { + expect(testRun(squiggleString(a, b, c, d, e, f, g, h))).toEqual( + squiggleOutput + ); + } + ) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/PointSet_test.ts b/packages/squiggle-lang/__tests__/TS/PointSet_test.ts new file mode 100644 index 00000000..3e74f039 --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/PointSet_test.ts @@ -0,0 +1,37 @@ +// import { errorValueToString } from "../../src/js/index"; +import { testRun, expectErrorToBeBounded } from "./TestHelpers"; +import * as fc from "fast-check"; + +describe("Mean of mixture is weighted average of means", () => { + test.skip("mx(beta(a,b), lognormal(m,s), [x,y])", () => { + fc.assert( + fc.property( + fc.float({ min: 1e-1 }), // alpha + fc.float({ min: 1 }), // beta + fc.float(), // mu + fc.float({ min: 1e-1 }), // sigma + fc.float({ min: 1e-7 }), + fc.float({ min: 1e-7 }), + (a, b, m, s, x, y) => { + let squiggleString = `mean(mixture(beta(${a},${b}), lognormal(${m},${s}), [${x}, ${y}]))`; + let res = testRun(squiggleString); + let weightDenom = x + y; + let betaWeight = x / weightDenom; + let lognormalWeight = y / weightDenom; + let betaMean = 1 / (1 + b / a); + let lognormalMean = m + s ** 2 / 2; + if (res.tag == "number") { + expectErrorToBeBounded( + res.value, + betaWeight * betaMean + lognormalWeight * lognormalMean, + 1, + 2 + ); + } else { + expect(res.value).toEqual("some error message"); + } + } + ) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts new file mode 100644 index 00000000..c4599f7c --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/SampleSet_test.ts @@ -0,0 +1,218 @@ +import { Distribution } from "../../src/js/index"; +import { expectErrorToBeBounded, failDefault } from "./TestHelpers"; +import * as fc from "fast-check"; + +// Beware: float64Array makes it appear in an infinite loop. +let arrayGen = () => + fc.float32Array({ + minLength: 10, + maxLength: 10000, + noDefaultInfinity: true, + noNaN: true, + }); + +describe("cumulative density function", () => { + let n = 10000; + + // We should fix this. + test.skip("'s codomain is bounded above", () => { + fc.assert( + fc.property(arrayGen(), fc.float(), (xs_, x) => { + let xs = Array.from(xs_); + // Should compute with squiggle strings once interpreter has `sample` + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(x).value; + let epsilon = 5e-7; + expect(cdfValue).toBeLessThanOrEqual(1 + epsilon); + }) + ); + }); + + test("'s codomain is bounded below", () => { + fc.assert( + fc.property(arrayGen(), fc.float(), (xs_, x) => { + let xs = Array.from(xs_); + // Should compute with squiggle strings once interpreter has `sample` + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(x).value; + expect(cdfValue).toBeGreaterThanOrEqual(0); + }) + ); + }); + + test("at the highest number in the sample is close to 1", () => { + fc.assert( + fc.property(arrayGen(), (xs_) => { + let xs = Array.from(xs_); + let max = Math.max(...xs); + // Should compute with squiggle strings once interpreter has `sample` + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(max).value; + let min = Math.min(...xs); + let epsilon = 5e-3; + if (max - min < epsilon) { + expect(cdfValue).toBeLessThan(1 - epsilon); + } else { + expect(dist.cdf(max).value).toBeGreaterThan(1 - epsilon); + } + }) + ); + }); + + // I may simply be mistaken about the math here. + test.skip("at the lowest number in the distribution is within epsilon of 0", () => { + fc.assert( + fc.property(arrayGen(), (xs_) => { + let xs = Array.from(xs_); + let min = Math.min(...xs); + // Should compute with squiggle strings once interpreter has `sample` + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(min).value; + let max = Math.max(...xs); + let epsilon = 5e-3; + if (max - min < epsilon) { + expect(cdfValue).toBeGreaterThan(4 * epsilon); + } else { + expect(cdfValue).toBeLessThan(4 * epsilon); + } + }) + ); + }); + + // I believe this is true, but due to bugs can't get the test to pass. + test.skip("is <= 1 everywhere with equality when x is higher than the max", () => { + fc.assert( + fc.property(arrayGen(), fc.float(), (xs_, x) => { + let xs = Array.from(xs_); + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(x).value; + let max = Math.max(...xs); + if (x > max) { + let epsilon = (x - max) / x; + expect(cdfValue).toBeGreaterThan(1 * (1 - epsilon)); + } else if (typeof cdfValue == "number") { + expect(Math.round(1e5 * cdfValue) / 1e5).toBeLessThanOrEqual(1); + } else { + failDefault(); + } + }) + ); + }); + + test("is non-negative everywhere with zero when x is lower than the min", () => { + fc.assert( + fc.property(arrayGen(), fc.float(), (xs_, x) => { + let xs = Array.from(xs_); + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let cdfValue = dist.cdf(x).value; + if (x < Math.min(...xs)) { + expect(cdfValue).toEqual(0); + } else { + expect(cdfValue).toBeGreaterThan(0); + } + }) + ); + }); +}); + +// I no longer believe this is true. +describe("probability density function", () => { + let n = 1000; + + test.skip("assigns to the max at most the weight of the mean", () => { + fc.assert( + fc.property(arrayGen(), (xs_) => { + let xs = Array.from(xs_); + let max = Math.max(...xs); + let mean = xs.reduce((a, b) => a + b, 0.0) / xs.length; + // Should be from squiggleString once interpreter exposes sampleset + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: n, xyPointLength: 100 } + ); + let pdfValueMean = dist.pdf(mean).value; + let pdfValueMax = dist.pdf(max).value; + if (typeof pdfValueMean == "number" && typeof pdfValueMax == "number") { + expect(pdfValueMax).toBeLessThanOrEqual(pdfValueMean); + } else { + expect(pdfValueMax).toEqual(pdfValueMean); + } + }) + ); + }); +}); + +// // This should be true, but I can't get it to work. +describe("mean is mean", () => { + test.skip("when sampling twice as widely as the input", () => { + fc.assert( + fc.property( + fc.float64Array({ minLength: 10, maxLength: 100000 }), + (xs_) => { + let xs = Array.from(xs_); + let n = xs.length; + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: 2 * n, xyPointLength: 4 * n } + ); + let mean = dist.mean(); + if (typeof mean.value == "number") { + expectErrorToBeBounded( + mean.value, + xs.reduce((a, b) => a + b, 0.0) / n, + 5e-1, + 1 + ); + } else { + failDefault(); + } + } + ) + ); + }); + + test.skip("when sampling half as widely as the input", () => { + fc.assert( + fc.property( + fc.float64Array({ minLength: 10, maxLength: 100000 }), + (xs_) => { + let xs = Array.from(xs_); + let n = xs.length; + let dist = new Distribution( + { tag: "SampleSet", value: xs }, + { sampleCount: Math.floor(n / 2), xyPointLength: 4 * n } + ); + let mean = dist.mean(); + if (typeof mean.value == "number") { + expectErrorToBeBounded( + mean.value, + xs.reduce((a, b) => a + b, 0.0) / n, + 5e-1, + 1 + ); + } else { + failDefault(); + } + } + ) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/Scalars_test.ts b/packages/squiggle-lang/__tests__/TS/Scalars_test.ts new file mode 100644 index 00000000..261b74d1 --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/Scalars_test.ts @@ -0,0 +1,33 @@ +// import { errorValueToString } from "../../src/js/index"; +import { testRun } from "./TestHelpers"; +import * as fc from "fast-check"; + +describe("Scalar manipulation is well-modeled by javascript math", () => { + test("in the case of natural logarithms", () => { + fc.assert( + fc.property(fc.float(), (x) => { + let squiggleString = `log(${x})`; + let squiggleResult = testRun(squiggleString); + if (x == 0) { + expect(squiggleResult.value).toEqual(-Infinity); + } else if (x < 0) { + expect(squiggleResult.value).toEqual( + "somemessage (confused why a test case hasn't pointed out to me that this message is bogus)" + ); + } else { + expect(squiggleResult.value).toEqual(Math.log(x)); + } + }) + ); + }); + + test("in the case of addition (with assignment)", () => { + fc.assert( + fc.property(fc.float(), fc.float(), fc.float(), (x, y, z) => { + let squiggleString = `x = ${x}; y = ${y}; z = ${z}; x + y + z`; + let squiggleResult = testRun(squiggleString); + expect(squiggleResult.value).toBeCloseTo(x + y + z); + }) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/Symbolic_test.ts b/packages/squiggle-lang/__tests__/TS/Symbolic_test.ts new file mode 100644 index 00000000..71d87642 --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/Symbolic_test.ts @@ -0,0 +1,22 @@ +import { errorValueToString } from "../../src/js/index"; +import { testRun } from "./TestHelpers"; +import * as fc from "fast-check"; + +describe("Symbolic mean", () => { + test("mean(triangular(x,y,z))", () => { + fc.assert( + fc.property(fc.float(), fc.float(), fc.float(), (x, y, z) => { + if (!(x < y && y < z)) { + try { + let squiggleResult = testRun(`mean(triangular(${x},${y},${z}))`); + expect(squiggleResult.value).toBeCloseTo((x + y + z) / 3); + } catch (err) { + expect((err as Error).message).toEqual( + "Expected squiggle expression to evaluate but got error: TODO: Triangular values must be increasing order." + ); + } + } + }) + ); + }); +}); diff --git a/packages/squiggle-lang/__tests__/TS/TestHelpers.ts b/packages/squiggle-lang/__tests__/TS/TestHelpers.ts new file mode 100644 index 00000000..3d4153ef --- /dev/null +++ b/packages/squiggle-lang/__tests__/TS/TestHelpers.ts @@ -0,0 +1,45 @@ +import { + run, + // Distribution, + squiggleExpression, + errorValueToString, + // errorValue, + // result, +} from "../../src/js/index"; + +export function testRun(x: string): squiggleExpression { + let squiggleResult = run(x, { sampleCount: 1000, xyPointLength: 100 }); + // return squiggleResult.value + if (squiggleResult.tag === "Ok") { + return squiggleResult.value; + } else { + throw new Error( + `Expected squiggle expression to evaluate but got error: ${errorValueToString( + squiggleResult.value + )}` + ); + } +} + +export function failDefault() { + expect("be reached").toBe("codepath should never"); +} + +/** + * This appears also in `TestHelpers.res`. According to https://www.math.net/percent-error, it computes + * absolute error when numerical stability concerns make me not want to compute relative error. + * */ +export function expectErrorToBeBounded( + received: number, + expected: number, + epsilon: number, + digits: number +) { + let distance = Math.abs(received - expected); + let expectedAbs = Math.abs(expected); + let normalizingDenom = Math.max(expectedAbs, 1); + let error = distance / normalizingDenom; + expect(Math.round(10 ** digits * error) / 10 ** digits).toBeLessThanOrEqual( + epsilon + ); +} diff --git a/packages/squiggle-lang/jest.config.js b/packages/squiggle-lang/jest.config.js index 3347de7c..71babb3c 100644 --- a/packages/squiggle-lang/jest.config.js +++ b/packages/squiggle-lang/jest.config.js @@ -9,5 +9,6 @@ module.exports = { ".*Fixtures.bs.js", "/node_modules/", ".*Helpers.bs.js", + ".*Helpers.ts", ], }; diff --git a/packages/squiggle-lang/lint.sh b/packages/squiggle-lang/lint.sh index 071823c9..2c1f53e5 100755 --- a/packages/squiggle-lang/lint.sh +++ b/packages/squiggle-lang/lint.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env 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 @@ -38,4 +38,4 @@ then exit 1 else echo "All files pass lint" -fi \ No newline at end of file +fi diff --git a/packages/squiggle-lang/package.json b/packages/squiggle-lang/package.json index 63b08dbf..c2168984 100644 --- a/packages/squiggle-lang/package.json +++ b/packages/squiggle-lang/package.json @@ -9,14 +9,20 @@ "clean": "rescript clean", "test:reducer": "jest --testPathPattern '.*__tests__/Reducer.*'", "test": "jest", + "test:ts": "jest __tests__/TS/", + "test:rescript": "jest --modulePathIgnorePatterns=__tests__/TS/*", + "test:reducer": "jest __tests__/Reducer*/", "test:watch": "jest --watchAll", - "test:quick": "jest --modulePathIgnorePatterns=__tests__/Distributions/Invariants/*", - "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", + "coverage:rescript": "rm -f *.coverage; yarn clean; BISECT_ENABLE=yes yarn build; yarn test:rescript; bisect-ppx-report html", + "coverage:ts": "nyc --reporter=lcov yarn test:ts", + "coverage:rescript:ci": "yarn clean; BISECT_ENABLE=yes yarn build; yarn test:rescript; bisect-ppx-report send-to Codecov", + "coverage:ts:ci": "yarn coverage:ts && codecov", "lint:rescript": "./lint.sh", "lint:prettier": "prettier --check .", "lint": "yarn lint:rescript && yarn lint:prettier", - "format": "rescript format -all && prettier --write .", + "format:rescript": "rescript format -all", + "format:prettier": "prettier --write .", + "format": "yarn format:rescript && yarn format:prettier", "all": "yarn build && yarn bundle && yarn test" }, "keywords": [ @@ -45,9 +51,13 @@ "reanalyze": "^2.19.0", "ts-jest": "^27.1.4", "ts-loader": "^9.2.8", + "fast-check": "2.24.0", "typescript": "^4.6.3", "webpack": "^5.72.0", - "webpack-cli": "^4.9.2" + "webpack-cli": "^4.9.2", + "nyc": "^15.1.0", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "codecov": "3.8.3" }, "source": "./src/js/index.ts", "main": "./dist/bundle.js", diff --git a/yarn.lock b/yarn.lock index 1bd0a6cc..41e59bc4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1978,6 +1978,13 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" +"@istanbuljs/nyc-config-typescript@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz#1f5235b28540a07219ae0dd42014912a0b19cf89" + integrity sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + "@istanbuljs/schema@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" @@ -4955,6 +4962,13 @@ app-root-dir@^1.0.2: resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + "aproba@^1.0.3 || ^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" @@ -4965,6 +4979,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + are-we-there-yet@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" @@ -4990,6 +5009,11 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +argv@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" + integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -5960,6 +5984,16 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -5991,7 +6025,7 @@ camelcase-css@2.0.1, camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -6280,6 +6314,15 @@ cli-table3@^0.6.1: optionalDependencies: "@colors/colors" "1.5.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -6329,6 +6372,17 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" +codecov@3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.8.3.tgz#9c3e364b8a700c597346ae98418d09880a3fdbe7" + integrity sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA== + dependencies: + argv "0.0.2" + ignore-walk "3.0.4" + js-yaml "3.14.1" + teeny-request "7.1.1" + urlgrey "1.0.0" + codejar@^3.2.3: version "3.6.0" resolved "https://registry.yarnpkg.com/codejar/-/codejar-3.6.0.tgz#be491d4db4d723da24f1bcd735ecad09e0f6c36d" @@ -7251,6 +7305,11 @@ debug@^3.0.0, debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + decimal.js@^10.2.1, decimal.js@^10.3.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" @@ -7300,6 +7359,13 @@ default-gateway@^6.0.3: dependencies: execa "^5.0.0" +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + defer-to-connect@^1.0.1: version "1.1.3" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" @@ -7928,6 +7994,11 @@ es5-shim@^4.5.13: resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.5.tgz#2124bb073b7cede2ed23b122a1fd87bb7b0bb724" integrity sha512-vfQ4UAai8szn0sAubCy97xnZ4sJVDD1gt/Grn736hg8D7540wemIb1YPrYZSTqlM2H69EQX1or4HU/tSwRTI3w== +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-shim@^0.35.5: version "0.35.6" resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" @@ -8417,6 +8488,13 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +fast-check@2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.24.0.tgz#39f85586862108a4de6394c5196ebcf8b76b6c8b" + integrity sha512-iNXbN90lbabaCUfnW5jyXYPwMJLFYl09eJDkXA9ZoidFlBK63gNRvcKxv+8D1OJ1kIYjwBef4bO/K3qesUeWLQ== + dependencies: + pure-rand "^5.0.1" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -8465,7 +8543,7 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-url-parser@1.1.3: +fast-url-parser@1.1.3, fast-url-parser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" integrity sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0= @@ -8622,7 +8700,7 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.3.1: +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== @@ -8789,6 +8867,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -8914,7 +8997,7 @@ gentype@^4.3.0: resolved "https://registry.yarnpkg.com/gentype/-/gentype-4.3.0.tgz#ebac3abcdde2ce2a8fc85611b11568a4cb349c8d" integrity sha512-lqkc1ZS/Iog4uslRD4De47OV54Hu61vEBsirMKxRlgHIRvm8u6RqsdKxJ7JdJdrzmtKgPNvq1He69SozzW+6dQ== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -9286,6 +9369,14 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hast-to-hyperscript@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" @@ -9617,7 +9708,7 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== -http-proxy-agent@^4.0.1: +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== @@ -9712,6 +9803,13 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + ignore@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -10309,11 +10407,28 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1, istanbul-lib-coverage@^3.0.1, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" @@ -10325,6 +10440,19 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: istanbul-lib-coverage "^3.2.0" semver "^6.3.0" +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + istanbul-lib-report@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" @@ -10878,7 +11006,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1: +js-yaml@3.14.1, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -11257,6 +11385,11 @@ lodash.flatten@^4.2.0: resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" @@ -11996,6 +12129,13 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + node-releases@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.3.tgz#225ee7488e4a5e636da8da52854844f9d716ca96" @@ -12091,6 +12231,39 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -12421,6 +12594,16 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -13422,6 +13605,13 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -13573,6 +13763,11 @@ pure-color@^1.2.0: resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= +pure-rand@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.1.tgz#97a287b4b4960b2a3448c0932bf28f2405cac51d" + integrity sha512-ksWccjmXOHU2gJBnH0cK1lSYdvSZ0zLoCMSz/nTGh6hDvCSgcRxDyIcOBD6KNxFz3xhMPm/T267Tbe2JRymKEQ== + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -14648,6 +14843,13 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + 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" @@ -14791,6 +14993,11 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -15544,6 +15751,18 @@ space-separated-tokens@^1.0.0: resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -15685,6 +15904,13 @@ stream-each@^1.1.0: end-of-stream "^1.1.0" stream-shift "^1.0.0" +stream-events@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== + dependencies: + stubs "^3.0.0" + stream-http@^2.7.2: version "2.8.3" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" @@ -15884,6 +16110,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +stubs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= + style-loader@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" @@ -16081,6 +16312,17 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" +teeny-request@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.1.1.tgz#2b0d156f4a8ad81de44303302ba8d7f1f05e20e6" + integrity sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg== + dependencies: + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + node-fetch "^2.6.1" + stream-events "^1.0.5" + uuid "^8.0.0" + telejson@^5.3.2, telejson@^5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/telejson/-/telejson-5.3.3.tgz#fa8ca84543e336576d8734123876a9f02bf41d2e" @@ -16488,7 +16730,7 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== @@ -16804,6 +17046,13 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +urlgrey@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-1.0.0.tgz#72d2f904482d0b602e3c7fa599343d699bbe1017" + integrity sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w== + dependencies: + fast-url-parser "^1.1.3" + use-composed-ref@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.2.1.tgz#9bdcb5ccd894289105da2325e1210079f56bf849" @@ -16883,12 +17132,12 @@ uuid-browser@^3.1.0: resolved "https://registry.yarnpkg.com/uuid-browser/-/uuid-browser-3.1.0.tgz#0f05a40aef74f9e5951e20efbf44b11871e56410" integrity sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA= -uuid@^3.3.2: +uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.2: +uuid@^8.0.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -17733,6 +17982,11 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -17966,6 +18220,15 @@ worker-rpc@^0.1.0: dependencies: microevent.ts "~0.1.1" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -18066,6 +18329,31 @@ yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.7: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.0.2: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"