diff --git a/.github/workflows/ppx-pr.yaml b/.github/workflows/ppx-pr.yaml index f1edd0b..261c202 100644 --- a/.github/workflows/ppx-pr.yaml +++ b/.github/workflows/ppx-pr.yaml @@ -8,14 +8,21 @@ jobs: name: PR Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Install Esy - run: yarn global add esy - - name: Install Dependencies - run: yarn - - name: Build PPX - run: yarn build-ppx - - name: Build Library - run: yarn build-lib - - name: Run tests - run: yarn test + - uses: actions/checkout@v2 + - name: Install OPAM and OCaml + uses: avsm/setup-ocaml@v1 + with: + ocaml-version: 4.12.1 # replace with your desired version + - name: Install OCaml Dependencies and build + run: | + cd ppx_src + opam install dune + eval $(opam env) + opam install -y . --deps-only + dune build + - name: Install Yarn Dependencies + run: yarn + - name: Build Library + run: yarn build-lib + - name: Run tests + run: yarn test diff --git a/.github/workflows/ppx-push.yaml b/.github/workflows/ppx-push.yaml index 7c8478b..f52552a 100644 --- a/.github/workflows/ppx-push.yaml +++ b/.github/workflows/ppx-push.yaml @@ -23,10 +23,17 @@ jobs: - uses: actions/checkout@v2 with: ref: ${{ github.ref }} - - name: Install esy - run: yarn global add esy - - name: Run Build - run: yarn build-ppx + - name: Install OPAM and OCaml + uses: avsm/setup-ocaml@v1 + with: + ocaml-version: 4.12.1 # replace with your desired version + - name: Install OCaml Dependencies and build + run: | + cd ppx_src + opam install dune + eval $(opam env) + opam install -y . --deps-only + dune build - name: Upload Build Mac / Linux if: ${{ matrix.os != 'windows-latest' }} uses: actions/upload-artifact@v2 diff --git a/.gitignore b/.gitignore index 2a4b193..41f2fe9 100644 --- a/.gitignore +++ b/.gitignore @@ -19,8 +19,6 @@ _build/ setup.data setup.log - - #Node # Logs logs @@ -76,5 +74,5 @@ package-links.json # dune *.install -_esy/ +_opam *.exe diff --git a/.vscode/settings.json b/.vscode/settings.json index a57a484..9842246 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,6 @@ { "ocaml.sandbox": { - "kind": "esy", - "root": "${workspaceFolder:decco}" + "kind": "opam", + "switch": "${workspaceFolder:decco}" } -} \ No newline at end of file +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19cc5d3..3fce377 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,7 @@ When contributing to this repository, please first discuss the change you wish t - git clone https://github.com/reasonml-labs/decco - cd decco - yarn install +- See the steps below to get ocaml set up - yarn build-ppx - # Make your changes, commits, etc - Open the PR @@ -30,23 +31,33 @@ In order to see what are the scripts available on the repository, run `yarn run` You would need to have [opam](https://opam.ocaml.org) installed. - cd ppx_src; -- opam switch create . 4.06.0 --deps-only # If it's the first time you create a switch from 4.06, it can take a while. +- opam switch create . 4.12.1 --deps-only # If it's the first time you create a switch it can take a while. - eval $(opam env) -- opam install -y ocaml-lsp-server dune ocaml ppx_tools_versioned reason # Install ppx's dependencies inside the switch +- opam install -y . --deps-only - Profit, this should make your editor a little more smart ### Testing -Unit testing is done in BuckleScript and bs-jest, lives under `test/__tests__`. +Unit testing is done in ReScript and rescript-jest, lives under `test/__tests__`. -A trick to see the output of the ppx is running bsc directly on the terminal: +## Iterating -``` -npx bsc -bs-package-name decco -bs-package-output commonjs:lib/js/test/__tests__ -I test/__tests__ -I test -I src -I ./node_modules/@glennsl/bs-jest/lib/ocaml -ppx ./ppx -w +A-9-40-42 -dsource -bs-super-errors FILE_I_WANT_TO_COMPILE -``` +Working on PPXs can be a real pain because you don't get to easily see the product of your work. There are some tools to help though. -For example: +### Preview PPX -``` -npx bsc -bs-package-name decco -bs-package-output commonjs:lib/js/test/__tests__ -I test/__tests__ -I test -I src -I ./node_modules/@glennsl/bs-jest/lib/ocaml -ppx ./ppx -w +A-9-40-42 -dsource -bs-super-errors test/__tests__/test.re -``` +See the output of your PPX as ReScript code by running `yarn run preview-ppx ` + +**Gotcha**: This PPX'd output isn't ReScript syntax generated by the PPX. The PPX runs on the AST, which is OCaml. What you see here is the result of the transformed AST rendered back into ReScript by the compiler's formatting tool + +If you want to see what's really going on under the hood, read more: + +### Inspect the Parsetree (AST) + +See a text representation of the tree you're really operating on, and the real results of your PPX by running `yarn run print-parse-tree-with-ppx` + +You'll probably get compiler errors, because that's calling a private API of bsc that isn't including dependencies. But your goal here is really just to inspect the tree. + +## Figure out what to write + +I suggest that when you're trying to get something written, you write the ReScript syntax for what you're trying to achieve, inspect its AST using the command above, and then use the same command on your PPX to see what you're actually getting. diff --git a/README.md b/README.md index 1e1565f..1cc45bf 100644 --- a/README.md +++ b/README.md @@ -2,32 +2,28 @@ ## Project Status -Decco is not being actively maintained, but PRs will be accepted and appreciated. +Decco is lazily maintained by it users, but it's not being actively developed, since its feature set is complete enough for general production use. If you find a major bug that you need fixed, it'll probably be your job to fix it. 💪 ## What is it? -A Bucklescript PPX which generates JSON serializers and deserializers for user-defined types. +A Rescript PPX which generates JSON serializers and deserializers for user-defined types. Example: -```reason +```rescript /* Define types */ -[@decco] type variant('a) = A | B(int) | C(int, 'a); +@decco type variant<'a> = A | B(int) | C(int, 'a); -/* - * Rescript@9+ users do not use [brackets] for the ppx: - * @decco type variant('a) = A | B(int) | C(int, 'a) - */ - -type dict = Js.Dict.t(string); -[@decco] type mytype = { +type dict = Js.Dict.t; +@decco +type mytype = { s: string, i: int, - o: option(int), - complex: array(option(list(variant(string)))), - [@decco.default 1.0] f: float, - [@decco.key "other_key"] otherKey: string, - magic: [@decco.codec Decco.Codecs.magic] dict, + o: option, + complex: array>>>, + @decco.default(1.0) f: float, + @decco.key("other_key") otherKey: string, + magic: @decco.codec(Decco.Codecs.magic) dict, }; /* Use _encode to encode */ @@ -35,10 +31,10 @@ let encoded = mytype_encode({ s: "hello", i: 12, o: None, - complex: [| Some([ C(25, "bullseye") ]) |], + complex: [Some(list{ C(25, "bullseye") })], f: 13., otherKey: "other", - magic: Js.Dict.fromArray([|("key","value")|]), + magic: Js.Dict.fromArray([("key","value")]), }); Js.log(Js.Json.stringifyWithSpace(encoded, 2)); @@ -54,17 +50,19 @@ Js.log(Js.Json.stringifyWithSpace(encoded, 2)); /* Use _decode to decode */ let { s, i, o, complex, f, otherKey, magic } = - mytype_decode(encoded) - |> Belt.Result.getExn; + mytype_decode(encoded)->Belt.Result.getExn; ``` ## How do I install it? + 1. Install package + ``` npm i decco ``` -2. Update your `bsconfig.json` +2. Update your `rescript.json` (or bsconfig.json if you haven't changed its name) + ```json { ..., @@ -76,62 +74,74 @@ npm i decco Adding `decco/ppx` to `ppx-flags` will enable the PPX. Adding decco to `bs-dependencies` is required because the code generated by the PPX references the `Decco` module. -**Note:** If you need to use decco with BuckleScript 5, install `@ryb73/decco` version ^0.1.0 by [following the old ReadMe here](https://github.com/reasonml-labs/decco/blob/0452fc42fa4cd4230d394c718e7f62a0384ce045/README.md). +## Compatibility + +Decco 2.0.0 and above work with ReScript 11 in uncurried mode. If you need to use Decco with an older version of ReScript, install decco version `1.6.0` + +If you need to use decco with BuckleScript 5, install `@ryb73/decco` version ^0.1.0 by [following the old ReadMe here](https://github.com/reasonml-labs/decco/blob/0452fc42fa4cd4230d394c718e7f62a0384ce045/README.md). ## How do I use it? -See [`test.re`](test/__tests__/test.re) for some examples. +See the test folder in this repo for some examples. ## Reference + ### Attributes -#### [@decco] + +#### @decco + Applies to: type declarations, type signatures Indicates that an encoder and decoder should be generated for the given type. -#### [@decco.encode] +#### @decco.encode + Applies to: type declarations, type signatures Indicates than an encoder (but no decoder) should be generated for the given type. -#### [@decco.decode] +#### @decco.decode + Applies to: type declarations, type signatures Indicates than an decoder (but no encoder) should be generated for the given type. -#### [@decco.codec] +#### @decco.codec + Applies to: type expressions -Specifies custom encoders and decoders for the type. Note that both an encoder and decoder must be specified, even if the type expression is within a type for which [@decco.encode] or [@decco.decode] was specified. +Specifies custom encoders and decoders for the type. Note that both an encoder and decoder must be specified, even if the type expression is within a type for which @decco.encode or @decco.decode was specified. -```reason -[@decco] type t = [@decco.codec (fancyEncoder, fancyDecoder)] fancyType; +```rescript +@decco type t = @decco.codec((fancyEncoder, fancyDecoder)) fancyType; ``` -#### [@decco.key] +#### @decco.key + Applies to: record fields -By default, Reason record fields map to JS object fields of the same name. Use [@decco.key] to specify a custom JS field name. Useful if the JS field name is invalid as a Reason record field name. +By default, ReScript record fields map to JS object fields of the same name. Use @decco.key to specify a custom JS field name. Useful if the JS field name is invalid as a ReScript record field name. -```reason -[@decco] +```rescript +@decco type record = { - [@decco.key "other_key"] otherKey: string, + @decco.key("other_key") otherKey: string, }; ``` -#### [@decco.default] +#### @decco.default + Applies to: record fields Default: `Js.Json.null` When decoding a record, the default value will be used for keys that are missing from the JSON object being decoded. -```reason -[@decco] type record = { - [@decco.default "def"] s: string, +```rescript +@decco type record = { + @decco.default("def") s: string, }; -let {s} = Js.Json.parseExn("{}") |> record_decode |> Belt.Result.getExn; +let {s} = Js.Json.parseExn("{}")->record_decode->Belt.Result.getExn; Js.log(s); /* def */ ``` diff --git a/bin/preview-ppx-watch.sh b/bin/preview-ppx-watch.sh new file mode 100755 index 0000000..275a37b --- /dev/null +++ b/bin/preview-ppx-watch.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +file_path=$1 + +if [ -z "$file_path" ]; then + echo "Please provide a file path as an argument to see what the PPX will do to it." + exit 1 +fi + +if ! command -v watch &>/dev/null; then + echo "watch command not found. Please install it using Homebrew:" + echo "brew install watch" + exit 1 +fi + +/opt/homebrew/bin/watch -n 1 -c -d "./node_modules/rescript/bsc -ppx ./ppx -bs-no-builtin-ppx -reprint-source $file_path" diff --git a/bin/preview-ppx.sh b/bin/preview-ppx.sh new file mode 100755 index 0000000..663cb84 --- /dev/null +++ b/bin/preview-ppx.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +file_path=$1 + +if [ -z "$file_path" ]; then + echo "Please provide a file path as an argument to see what the PPX will do to it." + exit 1 +fi + +./node_modules/rescript/bsc -ppx ./ppx -bs-no-builtin-ppx -reprint-source $file_path diff --git a/bsconfig.json b/bsconfig.json deleted file mode 100644 index 590b7c0..0000000 --- a/bsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name" : "decco", - "bs-dev-dependencies": [ "@glennsl/bs-jest" ], - "sources" : [ - { - "dir": "src", - "public": ["Decco"] - }, - { - "dir": "test", - "type": "dev", - "subdirs": true - } - ], - "refmt": 3, - "ppx-flags": [ - "./ppx" - ], - "warnings": { - "number": "+A-9-40-42" - }, - "bsc-flags": [ "-bs-super-errors" ] -} diff --git a/package.json b/package.json index 1f5c316..be0b50a 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,23 @@ { "name": "decco", - "version": "1.6.0", + "version": "2.0.0", "description": "Bucklescript PPX which generates JSON (de)serializers for user-defined types", "main": "index.js", "scripts": { "postinstall": "node postinstall.js", - "test": "jest lib/js/test", - "build-lib": "bsb -clean-world -make-world", - "watch": "bsb -clean-world -make-world -w", - "clean": "rm -rf lib && bsb -clean-world && rm -rf ppx_src/_esy", - "build-ppx": "cd ppx_src && esy", - "watch-ppx": "cd ppx_src && esy dune build -w" + "test": "jest", + "build-lib": "rescript build", + "watch": "rescript build -w", + "clean": "rm -rf lib && rescript clean && rm -rf ppx_src/_build", + "build-ppx": "cd ppx_src && dune build", + "watch-ppx": "cd ppx_src && dune build -w", + "preview-ppx": "./bin/preview-ppx.sh", + "preview-ppx-watch": "./bin/preview-ppx-watch.sh", + "print-parse-tree": "./node_modules/rescript/bsc -dparsetree", + "print-parse-tree-with-ppx": "./node_modules/rescript/bsc -dparsetree -ppx ./ppx" }, "files": [ - "/bsconfig.json", + "/rescript.json", "/postinstall.js", "/src", "/ppx", @@ -30,12 +34,11 @@ }, "_": [], "peerDependencies": { - "bs-platform": "6 || 7 || 8 || 9" + "rescript": "11" }, "devDependencies": { - "@glennsl/bs-jest": "0.6.0", - "bs-platform": "9", - "esy": "^0.6.10", - "jest": "^25.1.0" + "@glennsl/rescript-jest": "^0.11.0", + "jest": "^27.3.1", + "rescript": "^11.1.0" } } diff --git a/ppx b/ppx index 143adb6..b29d835 100755 --- a/ppx +++ b/ppx @@ -3,9 +3,9 @@ # Get the directory of the script to work from. DIR=$(dirname "$0") -if [ -f $DIR/ppx_src/_esy/default/build/default/bin/bin.exe ]; then +if [ -f $DIR/ppx_src/_build/default/bin/bin.exe ]; then # Use the dev build - $DIR/ppx_src/_esy/default/build/default/bin/bin.exe $@ + $DIR/ppx_src/_build/default/bin/bin.exe $@ elif [ "$(uname)" = "Darwin" ]; then # Run the Mac PPX $DIR/ppx-osx.exe $@ diff --git a/ppx_src/.ocamlformat b/ppx_src/.ocamlformat new file mode 100644 index 0000000..e425c43 --- /dev/null +++ b/ppx_src/.ocamlformat @@ -0,0 +1,11 @@ +profile = default +version = 0.26.2 + +field-space = tight-decl +break-cases = toplevel +module-item-spacing = preserve +cases-exp-indent = 2 +space-around-arrays = false +space-around-lists = false +space-around-records = false +space-around-variants = false \ No newline at end of file diff --git a/ppx_src/bin/bin.ml b/ppx_src/bin/bin.ml new file mode 100644 index 0000000..dd2e01f --- /dev/null +++ b/ppx_src/bin/bin.ml @@ -0,0 +1 @@ +let () = Ppxlib.Driver.run_as_ppx_rewriter () \ No newline at end of file diff --git a/ppx_src/bin/bin.re b/ppx_src/bin/bin.re deleted file mode 100644 index cbfbef8..0000000 --- a/ppx_src/bin/bin.re +++ /dev/null @@ -1,3 +0,0 @@ - -let () = - Ppxlib.Driver.run_as_ppx_rewriter() diff --git a/ppx_src/dune-project b/ppx_src/dune-project index 6aae99a..45acd3f 100644 --- a/ppx_src/dune-project +++ b/ppx_src/dune-project @@ -1 +1 @@ -(lang dune 1.9) +(lang dune 2.7) diff --git a/ppx_src/esy.lock/.gitattributes b/ppx_src/esy.lock/.gitattributes deleted file mode 100644 index e0b4e26..0000000 --- a/ppx_src/esy.lock/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ - -# Set eol to LF so files aren't converted to CRLF-eol on Windows. -* text eol=lf linguist-generated diff --git a/ppx_src/esy.lock/.gitignore b/ppx_src/esy.lock/.gitignore deleted file mode 100644 index a221be2..0000000 --- a/ppx_src/esy.lock/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -# Reset any possible .gitignore, we want all esy.lock to be un-ignored. -!* diff --git a/ppx_src/esy.lock/index.json b/ppx_src/esy.lock/index.json deleted file mode 100644 index 83321ee..0000000 --- a/ppx_src/esy.lock/index.json +++ /dev/null @@ -1,1098 +0,0 @@ -{ - "checksum": "a484a15d53f4224409808c11f076951b", - "root": "ppx_decco@link-dev:./package.json", - "node": { - "ppx_decco@link-dev:./package.json": { - "id": "ppx_decco@link-dev:./package.json", - "name": "ppx_decco", - "version": "link-dev:./package.json", - "source": { - "type": "link-dev", - "path": ".", - "manifest": "package.json" - }, - "overrides": [], - "dependencies": [], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/reason@opam:3.8.1@189445c6", - "@opam/ppxlib@opam:0.26.0@cc81525b", - "@opam/ocaml-lsp-server@opam:1.12.2@7e7be5b8", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "ocaml@4.14.0@d41d8cd9": { - "id": "ocaml@4.14.0@d41d8cd9", - "name": "ocaml", - "version": "4.14.0", - "source": { - "type": "install", - "source": [ - "archive:https://registry.npmjs.org/ocaml/-/ocaml-4.14.0.tgz#sha1:619afaeabcc8732cc1f4014a7251403927f44021" - ] - }, - "overrides": [], - "dependencies": [], - "devDependencies": [] - }, - "@opam/yojson@opam:2.0.0@ce9e86eb": { - "id": "@opam/yojson@opam:2.0.0@ce9e86eb", - "name": "@opam/yojson", - "version": "opam:2.0.0", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/ab/ab5d863f7f951a8f7fb4a708399ca2da2cf139a5e0af7818145c20295420cb1a#sha256:ab5d863f7f951a8f7fb4a708399ca2da2cf139a5e0af7818145c20295420cb1a", - "archive:https://github.com/ocaml-community/yojson/releases/download/2.0.0/yojson-2.0.0.tbz#sha256:ab5d863f7f951a8f7fb4a708399ca2da2cf139a5e0af7818145c20295420cb1a" - ], - "opam": { - "name": "yojson", - "version": "2.0.0", - "path": "esy.lock/opam/yojson.2.0.0" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.3.1@37a83374", "@opam/cppo@opam:1.6.9@db929a12", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/xdg@opam:3.3.1@369ff25b": { - "id": "@opam/xdg@opam:3.3.1@369ff25b", - "name": "@opam/xdg", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "xdg", - "version": "3.3.1", - "path": "esy.lock/opam/xdg.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/uutf@opam:1.0.3@47c95a18": { - "id": "@opam/uutf@opam:1.0.3@47c95a18", - "name": "@opam/uutf", - "version": "opam:1.0.3", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha512/50/50cc4486021da46fb08156e9daec0d57b4ca469b07309c508d5a9a41e9dbcf1f32dec2ed7be027326544453dcaf9c2534919395fd826dc7768efc6cc4bfcc9f8#sha512:50cc4486021da46fb08156e9daec0d57b4ca469b07309c508d5a9a41e9dbcf1f32dec2ed7be027326544453dcaf9c2534919395fd826dc7768efc6cc4bfcc9f8", - "archive:https://erratique.ch/software/uutf/releases/uutf-1.0.3.tbz#sha512:50cc4486021da46fb08156e9daec0d57b4ca469b07309c508d5a9a41e9dbcf1f32dec2ed7be027326544453dcaf9c2534919395fd826dc7768efc6cc4bfcc9f8" - ], - "opam": { - "name": "uutf", - "version": "1.0.3", - "path": "esy.lock/opam/uutf.1.0.3" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/topkg@opam:1.0.5@0aa59f51", - "@opam/ocamlfind@opam:1.9.5@c4562efc", - "@opam/ocamlbuild@opam:0.14.1@ead10f40", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ "ocaml@4.14.0@d41d8cd9" ] - }, - "@opam/topkg@opam:1.0.5@0aa59f51": { - "id": "@opam/topkg@opam:1.0.5@0aa59f51", - "name": "@opam/topkg", - "version": "opam:1.0.5", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha512/94/9450e9139209aacd8ddb4ba18e4225770837e526a52a56d94fd5c9c4c9941e83e0e7102e2292b440104f4c338fabab47cdd6bb51d69b41cc92cc7a551e6fefab#sha512:9450e9139209aacd8ddb4ba18e4225770837e526a52a56d94fd5c9c4c9941e83e0e7102e2292b440104f4c338fabab47cdd6bb51d69b41cc92cc7a551e6fefab", - "archive:https://erratique.ch/software/topkg/releases/topkg-1.0.5.tbz#sha512:9450e9139209aacd8ddb4ba18e4225770837e526a52a56d94fd5c9c4c9941e83e0e7102e2292b440104f4c338fabab47cdd6bb51d69b41cc92cc7a551e6fefab" - ], - "opam": { - "name": "topkg", - "version": "1.0.5", - "path": "esy.lock/opam/topkg.1.0.5" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/ocamlfind@opam:1.9.5@c4562efc", - "@opam/ocamlbuild@opam:0.14.1@ead10f40", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/ocamlbuild@opam:0.14.1@ead10f40" - ] - }, - "@opam/stdune@opam:3.3.1@345c3456": { - "id": "@opam/stdune@opam:3.3.1@345c3456", - "name": "@opam/stdune", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "stdune", - "version": "3.3.1", - "path": "esy.lock/opam/stdune.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7", - "@opam/base-unix@opam:base@87d0b2eb", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7", - "@opam/base-unix@opam:base@87d0b2eb" - ] - }, - "@opam/stdlib-shims@opam:0.3.0@72c7bc98": { - "id": "@opam/stdlib-shims@opam:0.3.0@72c7bc98", - "name": "@opam/stdlib-shims", - "version": "opam:0.3.0", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/ba/babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a", - "archive:https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz#sha256:babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a" - ], - "opam": { - "name": "stdlib-shims", - "version": "0.3.0", - "path": "esy.lock/opam/stdlib-shims.0.3.0" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/spawn@opam:v0.15.1@85e9d6f1": { - "id": "@opam/spawn@opam:v0.15.1@85e9d6f1", - "name": "@opam/spawn", - "version": "opam:v0.15.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/9a/9afdee314fab6c3fcd689ab6eb5608d6b78078e6dede3953a47debde06c19d50#sha256:9afdee314fab6c3fcd689ab6eb5608d6b78078e6dede3953a47debde06c19d50", - "archive:https://github.com/janestreet/spawn/archive/v0.15.1.tar.gz#sha256:9afdee314fab6c3fcd689ab6eb5608d6b78078e6dede3953a47debde06c19d50" - ], - "opam": { - "name": "spawn", - "version": "v0.15.1", - "path": "esy.lock/opam/spawn.v0.15.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/sexplib0@opam:v0.15.1@51111c0c": { - "id": "@opam/sexplib0@opam:v0.15.1@51111c0c", - "name": "@opam/sexplib0", - "version": "opam:v0.15.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/ab/ab8fd6273f35a792cad48cbb3024a7f9#md5:ab8fd6273f35a792cad48cbb3024a7f9", - "archive:https://github.com/janestreet/sexplib0/archive/refs/tags/v0.15.1.tar.gz#md5:ab8fd6273f35a792cad48cbb3024a7f9" - ], - "opam": { - "name": "sexplib0", - "version": "v0.15.1", - "path": "esy.lock/opam/sexplib0.v0.15.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/seq@opam:base@d8d7de1d": { - "id": "@opam/seq@opam:base@d8d7de1d", - "name": "@opam/seq", - "version": "opam:base", - "source": { - "type": "install", - "source": [ "no-source:" ], - "opam": { - "name": "seq", - "version": "base", - "path": "esy.lock/opam/seq.base" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ "ocaml@4.14.0@d41d8cd9" ] - }, - "@opam/result@opam:1.5@1c6a6533": { - "id": "@opam/result@opam:1.5@1c6a6533", - "name": "@opam/result", - "version": "opam:1.5", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/1b/1b82dec78849680b49ae9a8a365b831b#md5:1b82dec78849680b49ae9a8a365b831b", - "archive:https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz#md5:1b82dec78849680b49ae9a8a365b831b" - ], - "opam": { - "name": "result", - "version": "1.5", - "path": "esy.lock/opam/result.1.5" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/reason@opam:3.8.1@189445c6": { - "id": "@opam/reason@opam:3.8.1@189445c6", - "name": "@opam/reason", - "version": "opam:3.8.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/bf/bfcdbb09f62b4c108f26e6dc380431613e4de4b065df8f14364efe4acea8e414#sha256:bfcdbb09f62b4c108f26e6dc380431613e4de4b065df8f14364efe4acea8e414", - "archive:https://github.com/reasonml/reason/releases/download/3.8.1/reason-3.8.1.tbz#sha256:bfcdbb09f62b4c108f26e6dc380431613e4de4b065df8f14364efe4acea8e414" - ], - "opam": { - "name": "reason", - "version": "3.8.1", - "path": "esy.lock/opam/reason.3.8.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/result@opam:1.5@1c6a6533", - "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/ocamlfind@opam:1.9.5@c4562efc", - "@opam/merlin-extend@opam:0.6.1@7d979feb", - "@opam/menhir@opam:20220210@ff87a93b", - "@opam/fix@opam:20220121@17b9a1a4", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/result@opam:1.5@1c6a6533", - "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/merlin-extend@opam:0.6.1@7d979feb", - "@opam/menhir@opam:20220210@ff87a93b", - "@opam/fix@opam:20220121@17b9a1a4", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/re@opam:1.10.4@c4910ba6": { - "id": "@opam/re@opam:1.10.4@c4910ba6", - "name": "@opam/re", - "version": "opam:1.10.4", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/83/83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c#sha256:83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c", - "archive:https://github.com/ocaml/ocaml-re/releases/download/1.10.4/re-1.10.4.tbz#sha256:83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c" - ], - "opam": { - "name": "re", - "version": "1.10.4", - "path": "esy.lock/opam/re.1.10.4" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.3.1@37a83374", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/seq@opam:base@d8d7de1d", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/ppxlib@opam:0.26.0@cc81525b": { - "id": "@opam/ppxlib@opam:0.26.0@cc81525b", - "name": "@opam/ppxlib", - "version": "opam:0.26.0", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/63/63117b67ea5863935455fe921f88fe333c0530f0483f730313303a93af817efd#sha256:63117b67ea5863935455fe921f88fe333c0530f0483f730313303a93af817efd", - "archive:https://github.com/ocaml-ppx/ppxlib/releases/download/0.26.0/ppxlib-0.26.0.tbz#sha256:63117b67ea5863935455fe921f88fe333c0530f0483f730313303a93af817efd" - ], - "opam": { - "name": "ppxlib", - "version": "0.26.0", - "path": "esy.lock/opam/ppxlib.0.26.0" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@72c7bc98", - "@opam/sexplib0@opam:v0.15.1@51111c0c", - "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", - "@opam/dune@opam:3.3.1@37a83374", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/stdlib-shims@opam:0.3.0@72c7bc98", - "@opam/sexplib0@opam:v0.15.1@51111c0c", - "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/ppx_yojson_conv_lib@opam:v0.15.0@773058a7": { - "id": "@opam/ppx_yojson_conv_lib@opam:v0.15.0@773058a7", - "name": "@opam/ppx_yojson_conv_lib", - "version": "opam:v0.15.0", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/f9/f9d2c5eff4566ec1f1f379b186ed22c8ddd6be0909a160bc5a9ac7abc6a6b684#sha256:f9d2c5eff4566ec1f1f379b186ed22c8ddd6be0909a160bc5a9ac7abc6a6b684", - "archive:https://ocaml.janestreet.com/ocaml-core/v0.15/files/ppx_yojson_conv_lib-v0.15.0.tar.gz#sha256:f9d2c5eff4566ec1f1f379b186ed22c8ddd6be0909a160bc5a9ac7abc6a6b684" - ], - "opam": { - "name": "ppx_yojson_conv_lib", - "version": "v0.15.0", - "path": "esy.lock/opam/ppx_yojson_conv_lib.v0.15.0" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/yojson@opam:2.0.0@ce9e86eb", - "@opam/dune@opam:3.3.1@37a83374", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/yojson@opam:2.0.0@ce9e86eb", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/ppx_derivers@opam:1.2.1@e2cbad12": { - "id": "@opam/ppx_derivers@opam:1.2.1@e2cbad12", - "name": "@opam/ppx_derivers", - "version": "opam:1.2.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/5d/5dc2bf130c1db3c731fe0fffc5648b41#md5:5dc2bf130c1db3c731fe0fffc5648b41", - "archive:https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz#md5:5dc2bf130c1db3c731fe0fffc5648b41" - ], - "opam": { - "name": "ppx_derivers", - "version": "1.2.1", - "path": "esy.lock/opam/ppx_derivers.1.2.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/pp@opam:1.1.2@89ad03b5": { - "id": "@opam/pp@opam:1.1.2@89ad03b5", - "name": "@opam/pp", - "version": "opam:1.1.2", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/e4/e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56#sha256:e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56", - "archive:https://github.com/ocaml-dune/pp/releases/download/1.1.2/pp-1.1.2.tbz#sha256:e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56" - ], - "opam": { - "name": "pp", - "version": "1.1.2", - "path": "esy.lock/opam/pp.1.1.2" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/ordering@opam:3.3.1@f93bff61": { - "id": "@opam/ordering@opam:3.3.1@f93bff61", - "name": "@opam/ordering", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "ordering", - "version": "3.3.1", - "path": "esy.lock/opam/ordering.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/omd@opam:1.3.1@a0702cc6": { - "id": "@opam/omd@opam:1.3.1@a0702cc6", - "name": "@opam/omd", - "version": "opam:1.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/84/845fc38e86ec0e85721130f2dd044d00#md5:845fc38e86ec0e85721130f2dd044d00", - "archive:https://github.com/Chris00/omd/releases/download/1.3.1/omd-1.3.1.tar.gz#md5:845fc38e86ec0e85721130f2dd044d00" - ], - "opam": { - "name": "omd", - "version": "1.3.1", - "path": "esy.lock/opam/omd.1.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/ocamlfind@opam:1.9.5@c4562efc", - "@opam/ocamlbuild@opam:0.14.1@ead10f40", - "@opam/base-bytes@opam:base@19d0c2ff", - "@opam/base-bigarray@opam:base@b03491b0", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/base-bytes@opam:base@19d0c2ff", - "@opam/base-bigarray@opam:base@b03491b0" - ] - }, - "@opam/octavius@opam:1.2.2@2205cc65": { - "id": "@opam/octavius@opam:1.2.2@2205cc65", - "name": "@opam/octavius", - "version": "opam:1.2.2", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/72/72f9e1d996e6c5089fc513cc9218607b#md5:72f9e1d996e6c5089fc513cc9218607b", - "archive:https://github.com/ocaml-doc/octavius/archive/v1.2.2.tar.gz#md5:72f9e1d996e6c5089fc513cc9218607b" - ], - "opam": { - "name": "octavius", - "version": "1.2.2", - "path": "esy.lock/opam/octavius.1.2.2" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/ocamlformat-rpc-lib@opam:0.22.4@a64a22f6": { - "id": "@opam/ocamlformat-rpc-lib@opam:0.22.4@a64a22f6", - "name": "@opam/ocamlformat-rpc-lib", - "version": "opam:0.22.4", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/eb/eb54de2b81ac7cc2e68d81a7dc80b391a81b737fcfa3ef969ea91bdad6c9c060#sha256:eb54de2b81ac7cc2e68d81a7dc80b391a81b737fcfa3ef969ea91bdad6c9c060", - "archive:https://github.com/ocaml-ppx/ocamlformat/releases/download/0.22.4/ocamlformat-0.22.4.tbz#sha256:eb54de2b81ac7cc2e68d81a7dc80b391a81b737fcfa3ef969ea91bdad6c9c060" - ], - "opam": { - "name": "ocamlformat-rpc-lib", - "version": "0.22.4", - "path": "esy.lock/opam/ocamlformat-rpc-lib.0.22.4" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7" - ] - }, - "@opam/ocamlfind@opam:1.9.5@c4562efc": { - "id": "@opam/ocamlfind@opam:1.9.5@c4562efc", - "name": "@opam/ocamlfind", - "version": "opam:1.9.5", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/8b/8b893525ce36cb3d4d4952483bcc7cf4#md5:8b893525ce36cb3d4d4952483bcc7cf4", - "archive:http://download.camlcity.org/download/findlib-1.9.5.tar.gz#md5:8b893525ce36cb3d4d4952483bcc7cf4" - ], - "opam": { - "name": "ocamlfind", - "version": "1.9.5", - "path": "esy.lock/opam/ocamlfind.1.9.5" - } - }, - "overrides": [ - { - "opamoverride": - "esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override" - } - ], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ "ocaml@4.14.0@d41d8cd9" ] - }, - "@opam/ocamlbuild@opam:0.14.1@ead10f40": { - "id": "@opam/ocamlbuild@opam:0.14.1@ead10f40", - "name": "@opam/ocamlbuild", - "version": "opam:0.14.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/70/7027e507ed85f290923ad198f3d2cd1c#md5:7027e507ed85f290923ad198f3d2cd1c", - "archive:https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.1.tar.gz#md5:7027e507ed85f290923ad198f3d2cd1c" - ], - "opam": { - "name": "ocamlbuild", - "version": "0.14.1", - "path": "esy.lock/opam/ocamlbuild.0.14.1" - } - }, - "overrides": [ - { - "opamoverride": - "esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override" - } - ], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ "ocaml@4.14.0@d41d8cd9" ] - }, - "@opam/ocaml-lsp-server@opam:1.12.2@7e7be5b8": { - "id": "@opam/ocaml-lsp-server@opam:1.12.2@7e7be5b8", - "name": "@opam/ocaml-lsp-server", - "version": "opam:1.12.2", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/cf/cf25c8587c848aa913a5e5cc6417e95901be58623c049116e733d8473597dd39#sha256:cf25c8587c848aa913a5e5cc6417e95901be58623c049116e733d8473597dd39", - "archive:https://github.com/ocaml/ocaml-lsp/releases/download/1.12.2/lsp-1.12.2.tbz#sha256:cf25c8587c848aa913a5e5cc6417e95901be58623c049116e733d8473597dd39" - ], - "opam": { - "name": "ocaml-lsp-server", - "version": "1.12.2", - "path": "esy.lock/opam/ocaml-lsp-server.1.12.2" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/yojson@opam:2.0.0@ce9e86eb", - "@opam/xdg@opam:3.3.1@369ff25b", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/stdune@opam:3.3.1@345c3456", - "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/ppx_yojson_conv_lib@opam:v0.15.0@773058a7", - "@opam/pp@opam:1.1.2@89ad03b5", "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/omd@opam:1.3.1@a0702cc6", - "@opam/octavius@opam:1.2.2@2205cc65", - "@opam/ocamlformat-rpc-lib@opam:0.22.4@a64a22f6", - "@opam/fiber@opam:3.3.1@1f343083", "@opam/dyn@opam:3.3.1@f7e40101", - "@opam/dune-rpc@opam:3.3.1@faae4af5", - "@opam/dune-build-info@opam:3.3.1@b50cec61", - "@opam/dune@opam:3.3.1@37a83374", "@opam/csexp@opam:1.5.1@8a8fb3a7", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/yojson@opam:2.0.0@ce9e86eb", - "@opam/xdg@opam:3.3.1@369ff25b", "@opam/uutf@opam:1.0.3@47c95a18", - "@opam/stdune@opam:3.3.1@345c3456", - "@opam/spawn@opam:v0.15.1@85e9d6f1", "@opam/re@opam:1.10.4@c4910ba6", - "@opam/ppx_yojson_conv_lib@opam:v0.15.0@773058a7", - "@opam/pp@opam:1.1.2@89ad03b5", "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/omd@opam:1.3.1@a0702cc6", - "@opam/octavius@opam:1.2.2@2205cc65", - "@opam/ocamlformat-rpc-lib@opam:0.22.4@a64a22f6", - "@opam/fiber@opam:3.3.1@1f343083", "@opam/dyn@opam:3.3.1@f7e40101", - "@opam/dune-rpc@opam:3.3.1@faae4af5", - "@opam/dune-build-info@opam:3.3.1@b50cec61", - "@opam/dune@opam:3.3.1@37a83374", "@opam/csexp@opam:1.5.1@8a8fb3a7" - ] - }, - "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882": { - "id": "@opam/ocaml-compiler-libs@opam:v0.12.4@41979882", - "name": "@opam/ocaml-compiler-libs", - "version": "opam:v0.12.4", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/4e/4ec9c9ec35cc45c18c7a143761154ef1d7663036a29297f80381f47981a07760#sha256:4ec9c9ec35cc45c18c7a143761154ef1d7663036a29297f80381f47981a07760", - "archive:https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.4/ocaml-compiler-libs-v0.12.4.tbz#sha256:4ec9c9ec35cc45c18c7a143761154ef1d7663036a29297f80381f47981a07760" - ], - "opam": { - "name": "ocaml-compiler-libs", - "version": "v0.12.4", - "path": "esy.lock/opam/ocaml-compiler-libs.v0.12.4" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/merlin-extend@opam:0.6.1@7d979feb": { - "id": "@opam/merlin-extend@opam:0.6.1@7d979feb", - "name": "@opam/merlin-extend", - "version": "opam:0.6.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/5e/5ec84b355ddb2d129a5948b132bfacc93adcbde2158c7de695f7bfc3650bead7#sha256:5ec84b355ddb2d129a5948b132bfacc93adcbde2158c7de695f7bfc3650bead7", - "archive:https://github.com/let-def/merlin-extend/releases/download/v0.6.1/merlin-extend-0.6.1.tbz#sha256:5ec84b355ddb2d129a5948b132bfacc93adcbde2158c7de695f7bfc3650bead7" - ], - "opam": { - "name": "merlin-extend", - "version": "0.6.1", - "path": "esy.lock/opam/merlin-extend.0.6.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@opam/cppo@opam:1.6.9@db929a12", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/menhirSdk@opam:20220210@b8921e41": { - "id": "@opam/menhirSdk@opam:20220210@b8921e41", - "name": "@opam/menhirSdk", - "version": "opam:20220210", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/e3/e3cef220f676c4b1c16cbccb174cefe3#md5:e3cef220f676c4b1c16cbccb174cefe3", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz#md5:e3cef220f676c4b1c16cbccb174cefe3" - ], - "opam": { - "name": "menhirSdk", - "version": "20220210", - "path": "esy.lock/opam/menhirSdk.20220210" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/menhirLib@opam:20220210@e6562f4f": { - "id": "@opam/menhirLib@opam:20220210@e6562f4f", - "name": "@opam/menhirLib", - "version": "opam:20220210", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/e3/e3cef220f676c4b1c16cbccb174cefe3#md5:e3cef220f676c4b1c16cbccb174cefe3", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz#md5:e3cef220f676c4b1c16cbccb174cefe3" - ], - "opam": { - "name": "menhirLib", - "version": "20220210", - "path": "esy.lock/opam/menhirLib.20220210" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/menhir@opam:20220210@ff87a93b": { - "id": "@opam/menhir@opam:20220210@ff87a93b", - "name": "@opam/menhir", - "version": "opam:20220210", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/e3/e3cef220f676c4b1c16cbccb174cefe3#md5:e3cef220f676c4b1c16cbccb174cefe3", - "archive:https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz#md5:e3cef220f676c4b1c16cbccb174cefe3" - ], - "opam": { - "name": "menhir", - "version": "20220210", - "path": "esy.lock/opam/menhir.20220210" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/menhirSdk@opam:20220210@b8921e41", - "@opam/menhirLib@opam:20220210@e6562f4f", - "@opam/dune@opam:3.3.1@37a83374", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/menhirSdk@opam:20220210@b8921e41", - "@opam/menhirLib@opam:20220210@e6562f4f", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/fix@opam:20220121@17b9a1a4": { - "id": "@opam/fix@opam:20220121@17b9a1a4", - "name": "@opam/fix", - "version": "opam:20220121", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/48/48d8a5bdff23cf7fbf9288877df2b6aa#md5:48d8a5bdff23cf7fbf9288877df2b6aa", - "archive:https://gitlab.inria.fr/fpottier/fix/-/archive/20220121/archive.tar.gz#md5:48d8a5bdff23cf7fbf9288877df2b6aa" - ], - "opam": { - "name": "fix", - "version": "20220121", - "path": "esy.lock/opam/fix.20220121" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/fiber@opam:3.3.1@1f343083": { - "id": "@opam/fiber@opam:3.3.1@1f343083", - "name": "@opam/fiber", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "fiber", - "version": "3.3.1", - "path": "esy.lock/opam/fiber.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/stdune@opam:3.3.1@345c3456", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/stdune@opam:3.3.1@345c3456", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/dyn@opam:3.3.1@f7e40101": { - "id": "@opam/dyn@opam:3.3.1@f7e40101", - "name": "@opam/dyn", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "dyn", - "version": "3.3.1", - "path": "esy.lock/opam/dyn.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dune@opam:3.3.1@37a83374", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/pp@opam:1.1.2@89ad03b5", - "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/dune-rpc@opam:3.3.1@faae4af5": { - "id": "@opam/dune-rpc@opam:3.3.1@faae4af5", - "name": "@opam/dune-rpc", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "dune-rpc", - "version": "3.3.1", - "path": "esy.lock/opam/dune-rpc.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "@opam/xdg@opam:3.3.1@369ff25b", "@opam/stdune@opam:3.3.1@345c3456", - "@opam/pp@opam:1.1.2@89ad03b5", "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7", "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "@opam/xdg@opam:3.3.1@369ff25b", "@opam/stdune@opam:3.3.1@345c3456", - "@opam/pp@opam:1.1.2@89ad03b5", "@opam/ordering@opam:3.3.1@f93bff61", - "@opam/dyn@opam:3.3.1@f7e40101", "@opam/dune@opam:3.3.1@37a83374", - "@opam/csexp@opam:1.5.1@8a8fb3a7" - ] - }, - "@opam/dune-build-info@opam:3.3.1@b50cec61": { - "id": "@opam/dune-build-info@opam:3.3.1@b50cec61", - "name": "@opam/dune-build-info", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "dune-build-info", - "version": "3.3.1", - "path": "esy.lock/opam/dune-build-info.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/dune@opam:3.3.1@37a83374": { - "id": "@opam/dune@opam:3.3.1@37a83374", - "name": "@opam/dune", - "version": "opam:3.3.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/84/840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1", - "archive:https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz#sha256:840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - ], - "opam": { - "name": "dune", - "version": "3.3.1", - "path": "esy.lock/opam/dune.3.3.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb", - "@opam/base-threads@opam:base@36803084", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/base-unix@opam:base@87d0b2eb", - "@opam/base-threads@opam:base@36803084" - ] - }, - "@opam/csexp@opam:1.5.1@8a8fb3a7": { - "id": "@opam/csexp@opam:1.5.1@8a8fb3a7", - "name": "@opam/csexp", - "version": "opam:1.5.1", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/sha256/d6/d605e4065fa90a58800440ef2f33a2d931398bf2c22061a8acb7df845c0aac02#sha256:d605e4065fa90a58800440ef2f33a2d931398bf2c22061a8acb7df845c0aac02", - "archive:https://github.com/ocaml-dune/csexp/releases/download/1.5.1/csexp-1.5.1.tbz#sha256:d605e4065fa90a58800440ef2f33a2d931398bf2c22061a8acb7df845c0aac02" - ], - "opam": { - "name": "csexp", - "version": "1.5.1", - "path": "esy.lock/opam/csexp.1.5.1" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374" - ] - }, - "@opam/cppo@opam:1.6.9@db929a12": { - "id": "@opam/cppo@opam:1.6.9@db929a12", - "name": "@opam/cppo", - "version": "opam:1.6.9", - "source": { - "type": "install", - "source": [ - "archive:https://opam.ocaml.org/cache/md5/d2/d23ffe85ac7dc8f0afd1ddf622770d09#md5:d23ffe85ac7dc8f0afd1ddf622770d09", - "archive:https://github.com/ocaml-community/cppo/archive/v1.6.9.tar.gz#md5:d23ffe85ac7dc8f0afd1ddf622770d09" - ], - "opam": { - "name": "cppo", - "version": "1.6.9", - "path": "esy.lock/opam/cppo.1.6.9" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@opam/base-unix@opam:base@87d0b2eb", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/dune@opam:3.3.1@37a83374", - "@opam/base-unix@opam:base@87d0b2eb" - ] - }, - "@opam/base-unix@opam:base@87d0b2eb": { - "id": "@opam/base-unix@opam:base@87d0b2eb", - "name": "@opam/base-unix", - "version": "opam:base", - "source": { - "type": "install", - "source": [ "no-source:" ], - "opam": { - "name": "base-unix", - "version": "base", - "path": "esy.lock/opam/base-unix.base" - } - }, - "overrides": [], - "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], - "devDependencies": [] - }, - "@opam/base-threads@opam:base@36803084": { - "id": "@opam/base-threads@opam:base@36803084", - "name": "@opam/base-threads", - "version": "opam:base", - "source": { - "type": "install", - "source": [ "no-source:" ], - "opam": { - "name": "base-threads", - "version": "base", - "path": "esy.lock/opam/base-threads.base" - } - }, - "overrides": [], - "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], - "devDependencies": [] - }, - "@opam/base-bytes@opam:base@19d0c2ff": { - "id": "@opam/base-bytes@opam:base@19d0c2ff", - "name": "@opam/base-bytes", - "version": "opam:base", - "source": { - "type": "install", - "source": [ "no-source:" ], - "opam": { - "name": "base-bytes", - "version": "base", - "path": "esy.lock/opam/base-bytes.base" - } - }, - "overrides": [], - "dependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/ocamlfind@opam:1.9.5@c4562efc", - "@esy-ocaml/substs@0.0.1@d41d8cd9" - ], - "devDependencies": [ - "ocaml@4.14.0@d41d8cd9", "@opam/ocamlfind@opam:1.9.5@c4562efc" - ] - }, - "@opam/base-bigarray@opam:base@b03491b0": { - "id": "@opam/base-bigarray@opam:base@b03491b0", - "name": "@opam/base-bigarray", - "version": "opam:base", - "source": { - "type": "install", - "source": [ "no-source:" ], - "opam": { - "name": "base-bigarray", - "version": "base", - "path": "esy.lock/opam/base-bigarray.base" - } - }, - "overrides": [], - "dependencies": [ "@esy-ocaml/substs@0.0.1@d41d8cd9" ], - "devDependencies": [] - }, - "@esy-ocaml/substs@0.0.1@d41d8cd9": { - "id": "@esy-ocaml/substs@0.0.1@d41d8cd9", - "name": "@esy-ocaml/substs", - "version": "0.0.1", - "source": { - "type": "install", - "source": [ - "archive:https://registry.npmjs.org/@esy-ocaml/substs/-/substs-0.0.1.tgz#sha1:59ebdbbaedcda123fc7ed8fb2b302b7d819e9a46" - ] - }, - "overrides": [], - "dependencies": [], - "devDependencies": [] - } - } -} \ No newline at end of file diff --git a/ppx_src/esy.lock/opam/base-bigarray.base/opam b/ppx_src/esy.lock/opam/base-bigarray.base/opam deleted file mode 100644 index 39e9af2..0000000 --- a/ppx_src/esy.lock/opam/base-bigarray.base/opam +++ /dev/null @@ -1,6 +0,0 @@ -opam-version: "2.0" -maintainer: "https://github.com/ocaml/opam-repository/issues" -description: """ -Bigarray library distributed with the OCaml compiler -""" - diff --git a/ppx_src/esy.lock/opam/base-bytes.base/opam b/ppx_src/esy.lock/opam/base-bytes.base/opam deleted file mode 100644 index f1cae50..0000000 --- a/ppx_src/esy.lock/opam/base-bytes.base/opam +++ /dev/null @@ -1,9 +0,0 @@ -opam-version: "2.0" -maintainer: " " -authors: " " -homepage: " " -depends: [ - "ocaml" {>= "4.02.0"} - "ocamlfind" {>= "1.5.3"} -] -synopsis: "Bytes library distributed with the OCaml compiler" diff --git a/ppx_src/esy.lock/opam/base-threads.base/opam b/ppx_src/esy.lock/opam/base-threads.base/opam deleted file mode 100644 index 914ff50..0000000 --- a/ppx_src/esy.lock/opam/base-threads.base/opam +++ /dev/null @@ -1,6 +0,0 @@ -opam-version: "2.0" -maintainer: "https://github.com/ocaml/opam-repository/issues" -description: """ -Threads library distributed with the OCaml compiler -""" - diff --git a/ppx_src/esy.lock/opam/base-unix.base/opam b/ppx_src/esy.lock/opam/base-unix.base/opam deleted file mode 100644 index b973540..0000000 --- a/ppx_src/esy.lock/opam/base-unix.base/opam +++ /dev/null @@ -1,6 +0,0 @@ -opam-version: "2.0" -maintainer: "https://github.com/ocaml/opam-repository/issues" -description: """ -Unix library distributed with the OCaml compiler -""" - diff --git a/ppx_src/esy.lock/opam/cppo.1.6.9/opam b/ppx_src/esy.lock/opam/cppo.1.6.9/opam deleted file mode 100644 index 9c51ec6..0000000 --- a/ppx_src/esy.lock/opam/cppo.1.6.9/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -synopsis: "Code preprocessor like cpp for OCaml" -description: """\ -Cppo is an equivalent of the C preprocessor for OCaml programs. -It allows the definition of simple macros and file inclusion. - -Cppo is: - -* more OCaml-friendly than cpp -* easy to learn without consulting a manual -* reasonably fast -* simple to install and to maintain""" -maintainer: [ - "Martin Jambon " "Yishuai Li " -] -authors: "Martin Jambon" -license: "BSD-3-Clause" -homepage: "https://github.com/ocaml-community/cppo" -doc: "https://ocaml-community.github.io/cppo" -bug-reports: "https://github.com/ocaml-community/cppo/issues" -depends: [ - "ocaml" {>= "4.02.3"} - "dune" {>= "1.10"} - "base-unix" -] -build: [ - ["dune" "subst"] {dev} - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} - ["dune" "build" "-p" name "@doc"] {with-doc} -] -dev-repo: "git+https://github.com/ocaml-community/cppo.git" -url { - src: "https://github.com/ocaml-community/cppo/archive/v1.6.9.tar.gz" - checksum: [ - "md5=d23ffe85ac7dc8f0afd1ddf622770d09" - "sha512=26ff5a7b7f38c460661974b23ca190f0feae3a99f1974e0fd12ccf08745bd7d91b7bc168c70a5385b837bfff9530e0e4e41cf269f23dd8cf16ca658008244b44" - ] -} \ No newline at end of file diff --git a/ppx_src/esy.lock/opam/csexp.1.5.1/opam b/ppx_src/esy.lock/opam/csexp.1.5.1/opam deleted file mode 100644 index 59324f9..0000000 --- a/ppx_src/esy.lock/opam/csexp.1.5.1/opam +++ /dev/null @@ -1,60 +0,0 @@ -opam-version: "2.0" -synopsis: "Parsing and printing of S-expressions in Canonical form" -description: """ - -This library provides minimal support for Canonical S-expressions -[1]. Canonical S-expressions are a binary encoding of S-expressions -that is super simple and well suited for communication between -programs. - -This library only provides a few helpers for simple applications. If -you need more advanced support, such as parsing from more fancy input -sources, you should consider copying the code of this library given -how simple parsing S-expressions in canonical form is. - -To avoid a dependency on a particular S-expression library, the only -module of this library is parameterised by the type of S-expressions. - -[1] https://en.wikipedia.org/wiki/Canonical_S-expressions -""" -maintainer: ["Jeremie Dimino "] -authors: [ - "Quentin Hocquet " - "Jane Street Group, LLC" - "Jeremie Dimino " -] -license: "MIT" -homepage: "https://github.com/ocaml-dune/csexp" -doc: "https://ocaml-dune.github.io/csexp/" -bug-reports: "https://github.com/ocaml-dune/csexp/issues" -depends: [ - "dune" {>= "1.11"} - "ocaml" {>= "4.03.0"} -# "ppx_expect" {with-test & >= "v0.14"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml-dune/csexp.git" -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" -# Tests disabled because of a cyclic dependency with csexp, dune-configurator and ppx_expect -# "@runtest" {with-test} - "@doc" {with-doc} - ] -] -x-commit-hash: "7eeb86206819d2b1782d6cde1be9d6cf8b5fc851" -url { - src: - "https://github.com/ocaml-dune/csexp/releases/download/1.5.1/csexp-1.5.1.tbz" - checksum: [ - "sha256=d605e4065fa90a58800440ef2f33a2d931398bf2c22061a8acb7df845c0aac02" - "sha512=d785bbabaff9f6bf601399149ef0a42e5e99647b54e27f97ef1625907793dda22a45bf83e0e8a1eba2c63634c5484b54739ff0904ef556f5fc592efa38af7505" - ] -} diff --git a/ppx_src/esy.lock/opam/dune-build-info.3.3.1/opam b/ppx_src/esy.lock/opam/dune-build-info.3.3.1/opam deleted file mode 100644 index 6f9812b..0000000 --- a/ppx_src/esy.lock/opam/dune-build-info.3.3.1/opam +++ /dev/null @@ -1,45 +0,0 @@ -opam-version: "2.0" -synopsis: "Embed build informations inside executable" -description: """ -The build-info library allows to access information about how the -executable was built, such as the version of the project at which it -was built or the list of statically linked libraries with their -versions. It supports reporting the version from the version control -system during development to get an precise reference of when the -executable was built. -""" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/dune-rpc.3.3.1/opam b/ppx_src/esy.lock/opam/dune-rpc.3.3.1/opam deleted file mode 100644 index cc8ba1b..0000000 --- a/ppx_src/esy.lock/opam/dune-rpc.3.3.1/opam +++ /dev/null @@ -1,43 +0,0 @@ -opam-version: "2.0" -synopsis: "Communicate with dune using rpc" -description: "Library to connect and control a running dune instance" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "csexp" - "ordering" - "dyn" - "xdg" - "stdune" {= version} - "pp" {>= "1.1.0"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/dune.3.3.1/opam b/ppx_src/esy.lock/opam/dune.3.3.1/opam deleted file mode 100644 index 70d4cad..0000000 --- a/ppx_src/esy.lock/opam/dune.3.3.1/opam +++ /dev/null @@ -1,56 +0,0 @@ -opam-version: "2.0" -synopsis: "Fast, portable, and opinionated build system" -description: """ - -dune is a build system that was designed to simplify the release of -Jane Street packages. It reads metadata from "dune" files following a -very simple s-expression syntax. - -dune is fast, has very low-overhead, and supports parallel builds on -all platforms. It has no system dependencies; all you need to build -dune or packages using dune is OCaml. You don't need make or bash -as long as the packages themselves don't use bash explicitly. - -dune supports multi-package development by simply dropping multiple -repositories into the same directory. - -It also supports multi-context builds, such as building against -several opam roots/switches simultaneously. This helps maintaining -packages across several versions of OCaml and gives cross-compilation -for free. -""" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -conflicts: [ - "merlin" {< "3.4.0"} - "ocaml-lsp-server" {< "1.3.0"} - "dune-configurator" {< "2.3.0"} - "odoc" {< "2.0.1"} - "dune-release" {< "1.3.0"} - "js_of_ocaml-compiler" {< "3.6.0"} - "jbuilder" {= "transition"} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["ocaml" "bootstrap.ml" "-j" jobs] - ["./dune.exe" "build" "dune.install" "--release" "--profile" "dune-bootstrap" "-j" jobs] -] -depends: [ - # Please keep the lower bound in sync with .github/workflows/workflow.yml, - # dune-project and min_ocaml_version in bootstrap.ml - ("ocaml" {>= "4.08"} | ("ocaml" {< "4.08~~"} & "ocamlfind-secondary")) - "base-unix" - "base-threads" -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/dyn.3.3.1/opam b/ppx_src/esy.lock/opam/dyn.3.3.1/opam deleted file mode 100644 index ab46080..0000000 --- a/ppx_src/esy.lock/opam/dyn.3.3.1/opam +++ /dev/null @@ -1,40 +0,0 @@ -opam-version: "2.0" -synopsis: "Dynamic type" -description: "Dynamic type" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08.0"} - "ordering" {= version} - "pp" {>= "1.1.0"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/fiber.3.3.1/opam b/ppx_src/esy.lock/opam/fiber.3.3.1/opam deleted file mode 100644 index 33d760c..0000000 --- a/ppx_src/esy.lock/opam/fiber.3.3.1/opam +++ /dev/null @@ -1,41 +0,0 @@ -opam-version: "2.0" -synopsis: "Structured concurrency library" -description: - "This library offers no backwards compatibility guarantees. Use at your own risk." -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08.0"} - "stdune" {= version} - "dyn" {= version} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/fix.20220121/opam b/ppx_src/esy.lock/opam/fix.20220121/opam deleted file mode 100644 index 877b44e..0000000 --- a/ppx_src/esy.lock/opam/fix.20220121/opam +++ /dev/null @@ -1,26 +0,0 @@ - -opam-version: "2.0" -maintainer: "francois.pottier@inria.fr" -authors: [ - "François Pottier " -] -homepage: "https://gitlab.inria.fr/fpottier/fix" -dev-repo: "git+https://gitlab.inria.fr/fpottier/fix.git" -bug-reports: "francois.pottier@inria.fr" -license: "LGPL-2.0-only" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" { >= "4.03" } - "dune" { >= "1.3" } -] -synopsis: "Algorithmic building blocks for memoization, recursion, and more" -url { - src: - "https://gitlab.inria.fr/fpottier/fix/-/archive/20220121/archive.tar.gz" - checksum: [ - "md5=48d8a5bdff23cf7fbf9288877df2b6aa" - "sha512=a851d8783c0c519c6e55359a5c471af433058872409c29a1a7bdfd0076813341ad2c0ebd1ce9e28bff4d4c729dfbc808c41c084fe12a42b45a2b5e391e77ccd2" - ] -} diff --git a/ppx_src/esy.lock/opam/menhir.20220210/opam b/ppx_src/esy.lock/opam/menhir.20220210/opam deleted file mode 100644 index 3cd7988..0000000 --- a/ppx_src/esy.lock/opam/menhir.20220210/opam +++ /dev/null @@ -1,29 +0,0 @@ - -opam-version: "2.0" -maintainer: "francois.pottier@inria.fr" -authors: [ - "François Pottier " - "Yann Régis-Gianas " -] -homepage: "http://gitlab.inria.fr/fpottier/menhir" -dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" -bug-reports: "https://gitlab.inria.fr/fpottier/menhir/-/issues" -license: "LGPL-2.0-only with OCaml-LGPL-linking-exception" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" {>= "4.03.0"} - "dune" {>= "2.8.0"} - "menhirLib" {= version} - "menhirSdk" {= version} -] -synopsis: "An LR(1) parser generator" -url { - src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz" - checksum: [ - "md5=e3cef220f676c4b1c16cbccb174cefe3" - "sha512=3063fec1d8b9fe092c8461b0689d426c7fe381a2bf3fd258dc42ceecca1719d32efbb8a18d94ada5555c38175ea352da3adbb239fdbcbcf52c3a5c85a4d9586f" - ] -} diff --git a/ppx_src/esy.lock/opam/menhirLib.20220210/opam b/ppx_src/esy.lock/opam/menhirLib.20220210/opam deleted file mode 100644 index 895b542..0000000 --- a/ppx_src/esy.lock/opam/menhirLib.20220210/opam +++ /dev/null @@ -1,30 +0,0 @@ - -opam-version: "2.0" -maintainer: "francois.pottier@inria.fr" -authors: [ - "François Pottier " - "Yann Régis-Gianas " -] -homepage: "http://gitlab.inria.fr/fpottier/menhir" -dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" -bug-reports: "https://gitlab.inria.fr/fpottier/menhir/-/issues" -license: "LGPL-2.0-only with OCaml-LGPL-linking-exception" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" { >= "4.03.0" } - "dune" { >= "2.8.0" } -] -conflicts: [ - "menhir" { != version } -] -synopsis: "Runtime support library for parsers generated by Menhir" -url { - src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz" - checksum: [ - "md5=e3cef220f676c4b1c16cbccb174cefe3" - "sha512=3063fec1d8b9fe092c8461b0689d426c7fe381a2bf3fd258dc42ceecca1719d32efbb8a18d94ada5555c38175ea352da3adbb239fdbcbcf52c3a5c85a4d9586f" - ] -} diff --git a/ppx_src/esy.lock/opam/menhirSdk.20220210/opam b/ppx_src/esy.lock/opam/menhirSdk.20220210/opam deleted file mode 100644 index d95c170..0000000 --- a/ppx_src/esy.lock/opam/menhirSdk.20220210/opam +++ /dev/null @@ -1,30 +0,0 @@ - -opam-version: "2.0" -maintainer: "francois.pottier@inria.fr" -authors: [ - "François Pottier " - "Yann Régis-Gianas " -] -homepage: "http://gitlab.inria.fr/fpottier/menhir" -dev-repo: "git+https://gitlab.inria.fr/fpottier/menhir.git" -bug-reports: "https://gitlab.inria.fr/fpottier/menhir/-/issues" -license: "LGPL-2.0-only with OCaml-LGPL-linking-exception" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" { >= "4.03.0" } - "dune" { >= "2.8.0" } -] -conflicts: [ - "menhir" { != version } -] -synopsis: "Compile-time library for auxiliary tools related to Menhir" -url { - src: - "https://gitlab.inria.fr/fpottier/menhir/-/archive/20220210/archive.tar.gz" - checksum: [ - "md5=e3cef220f676c4b1c16cbccb174cefe3" - "sha512=3063fec1d8b9fe092c8461b0689d426c7fe381a2bf3fd258dc42ceecca1719d32efbb8a18d94ada5555c38175ea352da3adbb239fdbcbcf52c3a5c85a4d9586f" - ] -} diff --git a/ppx_src/esy.lock/opam/merlin-extend.0.6.1/opam b/ppx_src/esy.lock/opam/merlin-extend.0.6.1/opam deleted file mode 100644 index 9f99365..0000000 --- a/ppx_src/esy.lock/opam/merlin-extend.0.6.1/opam +++ /dev/null @@ -1,30 +0,0 @@ -opam-version: "2.0" -maintainer: "Frederic Bour " -authors: "Frederic Bour " -homepage: "https://github.com/let-def/merlin-extend" -bug-reports: "https://github.com/let-def/merlin-extend" -license: "MIT" -dev-repo: "git+https://github.com/let-def/merlin-extend.git" -build: [ - ["dune" "subst"] {dev} - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "dune" {>= "1.0"} - "cppo" {build & >= "1.1.0"} - "ocaml" {>= "4.02.3"} -] -synopsis: "A protocol to provide custom frontend to Merlin" -description: """ -This protocol allows to replace the OCaml frontend of Merlin. -It extends what used to be done with the `-pp' flag to handle a few more cases.""" -doc: "https://let-def.github.io/merlin-extend" -url { - src: - "https://github.com/let-def/merlin-extend/releases/download/v0.6.1/merlin-extend-0.6.1.tbz" - checksum: [ - "sha256=5ec84b355ddb2d129a5948b132bfacc93adcbde2158c7de695f7bfc3650bead7" - "sha512=631fc96aab2f35e12a078c9b4907ca7b0db9f1e3a4026040e6c23b82e0171c256a89fb5d4c887f1d156eb9e3152783cdf7a546b2496051007a1bcf5777417396" - ] -} -x-commit-hash: "cf2707bbe8e034c6ecf5d0fecd3fd889f6ab14bf" diff --git a/ppx_src/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam b/ppx_src/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam deleted file mode 100644 index 14c9f75..0000000 --- a/ppx_src/esy.lock/opam/ocaml-compiler-libs.v0.12.4/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -synopsis: "OCaml compiler libraries repackaged" -description: """ -This packages exposes the OCaml compiler libraries repackages under -the toplevel names Ocaml_common, Ocaml_bytecomp, Ocaml_optcomp, ...""" -maintainer: ["Jane Street developers"] -authors: ["Jane Street Group, LLC"] -license: "MIT" -homepage: "https://github.com/janestreet/ocaml-compiler-libs" -bug-reports: "https://github.com/janestreet/ocaml-compiler-libs/issues" -depends: [ - "dune" {>= "2.8"} - "ocaml" {>= "4.04.1"} - "odoc" {with-doc} -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/janestreet/ocaml-compiler-libs.git" -url { - src: - "https://github.com/janestreet/ocaml-compiler-libs/releases/download/v0.12.4/ocaml-compiler-libs-v0.12.4.tbz" - checksum: [ - "sha256=4ec9c9ec35cc45c18c7a143761154ef1d7663036a29297f80381f47981a07760" - "sha512=978dba8dfa61f98fa24fda7a9c26c2e837081f37d1685fe636dc19cfc3278a940cf01a10293504b185c406706bc1008bc54313d50f023bcdea6d5ac6c0788b35" - ] -} -x-commit-hash: "8cd12f18bb7171c2b67d661868c4271fae528d93" diff --git a/ppx_src/esy.lock/opam/ocaml-lsp-server.1.12.2/opam b/ppx_src/esy.lock/opam/ocaml-lsp-server.1.12.2/opam deleted file mode 100644 index a38b980..0000000 --- a/ppx_src/esy.lock/opam/ocaml-lsp-server.1.12.2/opam +++ /dev/null @@ -1,62 +0,0 @@ -opam-version: "2.0" -synopsis: "LSP Server for OCaml" -description: "An LSP server for OCaml." -maintainer: ["Rudi Grinberg "] -authors: [ - "Andrey Popp <8mayday@gmail.com>" - "Rusty Key " - "Louis Roché " - "Oleksiy Golovko " - "Rudi Grinberg " - "Sacha Ayoun " - "cannorin " - "Ulugbek Abdullaev " - "Thibaut Mattio " - "Max Lantas " -] -license: "ISC" -homepage: "https://github.com/ocaml/ocaml-lsp" -bug-reports: "https://github.com/ocaml/ocaml-lsp/issues" -depends: [ - "dune" {>= "2.9"} - "yojson" - "re" {>= "1.5.0"} - "ppx_yojson_conv_lib" {>= "v0.14"} - "dune-rpc" - "dyn" - "stdune" - "fiber" {>= "3.1.1"} - "xdg" - "ordering" - "dune-build-info" - "spawn" - "omd" {<= "1.3.1"} - "octavius" {>= "1.2.2"} - "uutf" {>= "1.0.2"} - "pp" {>= "1.1.2"} - "csexp" {>= "1.5"} - "ocamlformat-rpc-lib" {>= "0.21.0"} - "odoc" {with-doc} - "ocaml" {>= "4.14" & < "4.15"} -] -dev-repo: "git+https://github.com/ocaml/ocaml-lsp.git" -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-j" - jobs - "ocaml-lsp-server.install" - "--release" - ] -] -url { - src: - "https://github.com/ocaml/ocaml-lsp/releases/download/1.12.2/lsp-1.12.2.tbz" - checksum: [ - "sha256=cf25c8587c848aa913a5e5cc6417e95901be58623c049116e733d8473597dd39" - "sha512=b5aa4278006a0ed8dac3fb18a331c18c5e877c5910165b34e32a1ba346951bf234864ff2b53d58191130b38e07dadaab9778e6bfb2bce351ba98c54c09d6028e" - ] -} -x-commit-hash: "bc3e9c298185fdcb3b80d2d89562b586ba21eb74" diff --git a/ppx_src/esy.lock/opam/ocamlbuild.0.14.1/opam b/ppx_src/esy.lock/opam/ocamlbuild.0.14.1/opam deleted file mode 100644 index d741378..0000000 --- a/ppx_src/esy.lock/opam/ocamlbuild.0.14.1/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -synopsis: - "OCamlbuild is a build system with builtin rules to easily build most OCaml projects" -maintainer: "Gabriel Scherer " -authors: ["Nicolas Pouillard" "Berke Durak"] -license: "LGPL-2.0-or-later WITH OCaml-LGPL-linking-exception" -homepage: "https://github.com/ocaml/ocamlbuild/" -doc: "https://github.com/ocaml/ocamlbuild/blob/master/manual/manual.adoc" -bug-reports: "https://github.com/ocaml/ocamlbuild/issues" -depends: [ - "ocaml" {>= "4.03"} -] -conflicts: [ - "base-ocamlbuild" - "ocamlfind" {< "1.6.2"} -] -build: [ - [ - make - "-f" - "configure.make" - "all" - "OCAMLBUILD_PREFIX=%{prefix}%" - "OCAMLBUILD_BINDIR=%{bin}%" - "OCAMLBUILD_LIBDIR=%{lib}%" - "OCAMLBUILD_MANDIR=%{man}%" - "OCAML_NATIVE=%{ocaml:native}%" - "OCAML_NATIVE_TOOLS=%{ocaml:native}%" - ] - [make "check-if-preinstalled" "all" "opam-install"] -] -dev-repo: "git+https://github.com/ocaml/ocamlbuild.git" -url { - src: "https://github.com/ocaml/ocamlbuild/archive/refs/tags/0.14.1.tar.gz" - checksum: [ - "md5=7027e507ed85f290923ad198f3d2cd1c" - "sha512=1f5b43215b1d3dc427b9c64e005add9d423ed4bca9686d52c55912df8955647cb2d7d86622d44b41b14c4f0d657b770c27967c541c868eeb7c78e3bd35b827ad" - ] -} \ No newline at end of file diff --git a/ppx_src/esy.lock/opam/ocamlfind.1.9.5/opam b/ppx_src/esy.lock/opam/ocamlfind.1.9.5/opam deleted file mode 100644 index 678b7a2..0000000 --- a/ppx_src/esy.lock/opam/ocamlfind.1.9.5/opam +++ /dev/null @@ -1,45 +0,0 @@ -opam-version: "2.0" -synopsis: "A library manager for OCaml" -description: """ -Findlib is a library manager for OCaml. It provides a convention how -to store libraries, and a file format ("META") to describe the -properties of libraries. There is also a tool (ocamlfind) for -interpreting the META files, so that it is very easy to use libraries -in programs and scripts. -""" -license: "MIT" -maintainer: "Thomas Gazagnaire " -authors: "Gerd Stolpmann " -homepage: "http://projects.camlcity.org/projects/findlib.html" -bug-reports: "https://github.com/ocaml/ocamlfind/issues" -depends: [ - "ocaml" {>= "4.00.0"} -] -depopts: ["graphics"] -build: [ - [ - "./configure" - "-bindir" bin - "-sitelib" lib - "-mandir" man - "-config" "%{lib}%/findlib.conf" - "-no-custom" - "-no-camlp4" {!ocaml:preinstalled & ocaml:version >= "4.02.0"} - "-no-topfind" {ocaml:preinstalled} - ] - [make "all"] - [make "opt"] {ocaml:native} -] -install: [ - [make "install"] - ["install" "-m" "0755" "ocaml-stub" "%{bin}%/ocaml"] {ocaml:preinstalled} -] -dev-repo: "git+https://github.com/ocaml/ocamlfind.git" -url { - src: "http://download.camlcity.org/download/findlib-1.9.5.tar.gz" - checksum: [ - "md5=8b893525ce36cb3d4d4952483bcc7cf4" - "sha512=03514c618a16b02889db997c6c4789b3436b3ad7d974348d2c6dea53eb78898ab285ce5f10297c074bab4fd2c82931a8b7c5c113b994447a44abb30fca74c715" - ] -} - diff --git a/ppx_src/esy.lock/opam/ocamlformat-rpc-lib.0.22.4/opam b/ppx_src/esy.lock/opam/ocamlformat-rpc-lib.0.22.4/opam deleted file mode 100644 index 325255d..0000000 --- a/ppx_src/esy.lock/opam/ocamlformat-rpc-lib.0.22.4/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -synopsis: "Auto-formatter for OCaml code (RPC mode)" -description: - "OCamlFormat is a tool to automatically format OCaml code in a uniform style. This package defines a RPC interface to OCamlFormat" -maintainer: ["OCamlFormat Team "] -authors: ["Josh Berdine "] -license: "MIT" -homepage: "https://github.com/ocaml-ppx/ocamlformat" -bug-reports: "https://github.com/ocaml-ppx/ocamlformat/issues" -depends: [ - "dune" {>= "2.8"} - "ocaml" {>= "4.08"} - "csexp" {>= "1.4.0"} - "odoc" {with-doc} -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/ocaml-ppx/ocamlformat.git" -url { - src: - "https://github.com/ocaml-ppx/ocamlformat/releases/download/0.22.4/ocamlformat-0.22.4.tbz" - checksum: [ - "sha256=eb54de2b81ac7cc2e68d81a7dc80b391a81b737fcfa3ef969ea91bdad6c9c060" - "sha512=2bdeb9abc5757176040f641b22c59ac2b038c3bc1c42ddf86422b80cb90278fbe8ca05d0f788be0375a632bb6584b8d165d07f9f84686c2174208a8c20324b13" - ] -} -x-commit-hash: "838ba9fa00cc27703441220b9a5d3880b17430fb" diff --git a/ppx_src/esy.lock/opam/octavius.1.2.2/opam b/ppx_src/esy.lock/opam/octavius.1.2.2/opam deleted file mode 100644 index 0539c09..0000000 --- a/ppx_src/esy.lock/opam/octavius.1.2.2/opam +++ /dev/null @@ -1,33 +0,0 @@ -opam-version: "2.0" -maintainer: ["leo@lpw25.net"] -authors: ["Leo White "] -license: "ISC" -homepage: "https://github.com/ocaml-doc/octavius" -doc: "http://ocaml-doc.github.io/octavius/" -bug-reports: "https://github.com/ocaml-doc/octavius/issues" -depends: [ - "dune" {>= "1.11"} - "ocaml" {>= "4.03.0"} -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/ocaml-doc/octavius.git" - -synopsis: "Ocamldoc comment syntax parser" -description: "Octavius is a library to parse the `ocamldoc` comment syntax." -url { - src: "https://github.com/ocaml-doc/octavius/archive/v1.2.2.tar.gz" - checksum: "md5=72f9e1d996e6c5089fc513cc9218607b" -} diff --git a/ppx_src/esy.lock/opam/omd.1.3.1/opam b/ppx_src/esy.lock/opam/omd.1.3.1/opam deleted file mode 100644 index c4482b7..0000000 --- a/ppx_src/esy.lock/opam/omd.1.3.1/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -maintainer: "Philippe Wang " -authors: [ "Philippe Wang " ] -license: "ISC" -homepage: "https://github.com/ocaml/omd" -dev-repo: "git+https://github.com/ocaml/omd.git" -bug-reports: "https://github.com/ocaml/omd/issues" -tags: [ "org:ocamllabs" "org:mirage" ] -build: [ - ["ocaml" "setup.ml" "-configure" "--prefix" prefix] - ["ocaml" "setup.ml" "-build"] - ["ocaml" "setup.ml" "-configure" "--enable-tests"] {with-test} - ["ocaml" "setup.ml" "-build"] {with-test} - ["ocaml" "setup.ml" "-test"] {with-test} -] -install: ["ocaml" "setup.ml" "-install"] -remove: [ - ["ocaml" "%{etc}%/omd/setup.ml" "-C" "%{etc}%/omd" "-uninstall"] -] -depends: [ - "ocaml" {>= "4.01"} - "base-bigarray" - "base-bytes" - "ocamlbuild" {build} - "ocamlfind" {build & >= "1.5"} -] -synopsis: "A Markdown frontend in pure OCaml." -description: """ -This Markdown library is implemented using only pure OCaml (including -I/O operations provided by the standard OCaml compiler distribution). -OMD is meant to be as faithful as possible to the original Markdown. -Additionally, OMD implements a few Github markdown features, an -extension mechanism, and some other features. Note that the opam -package installs both the OMD library and the command line tool `omd`.""" -url { - src: - "https://github.com/Chris00/omd/releases/download/1.3.1/omd-1.3.1.tar.gz" - checksum: "md5=845fc38e86ec0e85721130f2dd044d00" -} diff --git a/ppx_src/esy.lock/opam/ordering.3.3.1/opam b/ppx_src/esy.lock/opam/ordering.3.3.1/opam deleted file mode 100644 index 1050ce4..0000000 --- a/ppx_src/esy.lock/opam/ordering.3.3.1/opam +++ /dev/null @@ -1,38 +0,0 @@ -opam-version: "2.0" -synopsis: "Element ordering" -description: "Element ordering" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08.0"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/pp.1.1.2/opam b/ppx_src/esy.lock/opam/pp.1.1.2/opam deleted file mode 100644 index e09edbf..0000000 --- a/ppx_src/esy.lock/opam/pp.1.1.2/opam +++ /dev/null @@ -1,58 +0,0 @@ -opam-version: "2.0" -synopsis: "Pretty-printing library" -description: """ - -This library provides a lean alternative to the Format [1] module of -the OCaml standard library. It aims to make it easy for users to do -the right thing. If you have tried Format before but find its API -complicated and difficult to use, then Pp might be a good choice for -you. - -Pp uses the same concepts of boxes and break hints, and the final -rendering is done to formatter from the Format module. However it -defines its own algebra which some might find easier to work with and -reason about. No previous knowledge is required to start using this -library, however the various guides for the Format module such as this -one [2] should be applicable to Pp as well. - -[1]: https://caml.inria.fr/pub/docs/manual-ocaml/libref/Format.html -[2]: http://caml.inria.fr/resources/doc/guides/format.en.html -""" -maintainer: ["Jeremie Dimino "] -authors: [ - "Jane Street Group, LLC" - "Jeremie Dimino " -] -license: "MIT" -homepage: "https://github.com/ocaml-dune/pp" -doc: "https://ocaml-dune.github.io/pp/" -bug-reports: "https://github.com/ocaml-dune/pp/issues" -depends: [ - "dune" {>= "2.0"} - "ocaml" {>= "4.08.0"} - "ppx_expect" {with-test} -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/ocaml-dune/pp.git" -x-commit-hash: "395b95c89cfe2c6d538dad9d56721b6a7278d46c" -url { - src: - "https://github.com/ocaml-dune/pp/releases/download/1.1.2/pp-1.1.2.tbz" - checksum: [ - "sha256=e4a4e98d96b1bb76950fcd6da4e938c86d989df4d7e48f02f7a44595f5af1d56" - "sha512=58f78b083483006b40814be9aac33c895349eb1c6427d2762b4d760192613401262478bd5deff909763517560b06af7bf013c6a6f87d549aafa77b26345303f2" - ] -} diff --git a/ppx_src/esy.lock/opam/ppx_derivers.1.2.1/opam b/ppx_src/esy.lock/opam/ppx_derivers.1.2.1/opam deleted file mode 100644 index 484b265..0000000 --- a/ppx_src/esy.lock/opam/ppx_derivers.1.2.1/opam +++ /dev/null @@ -1,23 +0,0 @@ -opam-version: "2.0" -maintainer: "jeremie@dimino.org" -authors: ["Jérémie Dimino"] -license: "BSD-3-Clause" -homepage: "https://github.com/ocaml-ppx/ppx_derivers" -bug-reports: "https://github.com/ocaml-ppx/ppx_derivers/issues" -dev-repo: "git+https://github.com/ocaml-ppx/ppx_derivers.git" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" - "dune" -] -synopsis: "Shared [@@deriving] plugin registry" -description: """ -Ppx_derivers is a tiny package whose sole purpose is to allow -ppx_deriving and ppx_type_conv to inter-operate gracefully when linked -as part of the same ocaml-migrate-parsetree driver.""" -url { - src: "https://github.com/ocaml-ppx/ppx_derivers/archive/1.2.1.tar.gz" - checksum: "md5=5dc2bf130c1db3c731fe0fffc5648b41" -} diff --git a/ppx_src/esy.lock/opam/ppx_yojson_conv_lib.v0.15.0/opam b/ppx_src/esy.lock/opam/ppx_yojson_conv_lib.v0.15.0/opam deleted file mode 100644 index 1b0664b..0000000 --- a/ppx_src/esy.lock/opam/ppx_yojson_conv_lib.v0.15.0/opam +++ /dev/null @@ -1,24 +0,0 @@ -opam-version: "2.0" -maintainer: "Jane Street developers" -authors: ["Jane Street Group, LLC"] -homepage: "https://github.com/janestreet/ppx_yojson_conv_lib" -bug-reports: "https://github.com/janestreet/ppx_yojson_conv_lib/issues" -dev-repo: "git+https://github.com/janestreet/ppx_yojson_conv_lib.git" -doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/ppx_yojson_conv_lib/index.html" -license: "MIT" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" {>= "4.02.3"} - "dune" {>= "2.0.0"} - "yojson" {>= "1.7.0"} -] -synopsis: "Runtime lib for ppx_yojson_conv" -description: " -Part of the Jane Street's PPX rewriters collection. -" -url { -src: "https://ocaml.janestreet.com/ocaml-core/v0.15/files/ppx_yojson_conv_lib-v0.15.0.tar.gz" -checksum: "sha256=f9d2c5eff4566ec1f1f379b186ed22c8ddd6be0909a160bc5a9ac7abc6a6b684" -} diff --git a/ppx_src/esy.lock/opam/ppxlib.0.26.0/opam b/ppx_src/esy.lock/opam/ppxlib.0.26.0/opam deleted file mode 100644 index db08605..0000000 --- a/ppx_src/esy.lock/opam/ppxlib.0.26.0/opam +++ /dev/null @@ -1,63 +0,0 @@ -opam-version: "2.0" -synopsis: "Standard library for ppx rewriters" -description: """ -Ppxlib is the standard library for ppx rewriters and other programs -that manipulate the in-memory reprensation of OCaml programs, a.k.a -the "Parsetree". - -It also comes bundled with two ppx rewriters that are commonly used to -write tools that manipulate and/or generate Parsetree values; -`ppxlib.metaquot` which allows to construct Parsetree values using the -OCaml syntax directly and `ppxlib.traverse` which provides various -ways of automatically traversing values of a given type, in particular -allowing to inject a complex structured value into generated code. -""" -maintainer: ["opensource@janestreet.com"] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml-ppx/ppxlib" -doc: "https://ocaml-ppx.github.io/ppxlib/" -bug-reports: "https://github.com/ocaml-ppx/ppxlib/issues" -depends: [ - "dune" {>= "2.7"} - "ocaml" {>= "4.04.1" & < "4.15"} - "ocaml-compiler-libs" {>= "v0.11.0"} - "ppx_derivers" {>= "1.0"} - "sexplib0" {>= "v0.12"} - "sexplib0" {with-test & < "v0.15"} - "stdlib-shims" - "ocamlfind" {with-test} - "re" {with-test & >= "1.9.0"} - "cinaps" {with-test & >= "v0.12.1"} - "base" {with-test} - "stdio" {with-test} - "odoc" {with-doc} -] -conflicts: [ - "ocaml-migrate-parsetree" {< "2.0.0"} - "base-effects" -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/ocaml-ppx/ppxlib.git" -url { - src: - "https://github.com/ocaml-ppx/ppxlib/releases/download/0.26.0/ppxlib-0.26.0.tbz" - checksum: [ - "sha256=63117b67ea5863935455fe921f88fe333c0530f0483f730313303a93af817efd" - "sha512=9cfc9587657d17cdee5483e2a03292f872c42886e512bcc7442652e6418ce74c0135c731d8a68288c7fecae7f1b2defd93fe5acf8edb41e25144a8cec2806227" - ] -} -x-commit-hash: "18b1ad68b59d151d662147661e43b159ac491f68" diff --git a/ppx_src/esy.lock/opam/re.1.10.4/opam b/ppx_src/esy.lock/opam/re.1.10.4/opam deleted file mode 100644 index 9dad661..0000000 --- a/ppx_src/esy.lock/opam/re.1.10.4/opam +++ /dev/null @@ -1,46 +0,0 @@ -opam-version: "2.0" - -maintainer: "rudi.grinberg@gmail.com" -authors: [ - "Jerome Vouillon" - "Thomas Gazagnaire" - "Anil Madhavapeddy" - "Rudi Grinberg" - "Gabriel Radanne" -] -license: "LGPL-2.0-or-later WITH OCaml-LGPL-linking-exception" -homepage: "https://github.com/ocaml/ocaml-re" -bug-reports: "https://github.com/ocaml/ocaml-re/issues" -dev-repo: "git+https://github.com/ocaml/ocaml-re.git" - -build: [ - ["dune" "subst"] {dev} - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} -] - -depends: [ - "ocaml" {>= "4.03"} - "dune" {>= "2.0"} - "ounit" {with-test} - "seq" -] - -synopsis: "RE is a regular expression library for OCaml" -description: """ -Pure OCaml regular expressions with: -* Perl-style regular expressions (module Re.Perl) -* Posix extended regular expressions (module Re.Posix) -* Emacs-style regular expressions (module Re.Emacs) -* Shell-style file globbing (module Re.Glob) -* Compatibility layer for OCaml's built-in Str module (module Re.Str) -""" -url { - src: - "https://github.com/ocaml/ocaml-re/releases/download/1.10.4/re-1.10.4.tbz" - checksum: [ - "sha256=83eb3e4300aa9b1dc7820749010f4362ea83524742130524d78c20ce99ca747c" - "sha512=92b05cf92c389fa8c753f2acca837b15dd05a4a2e8e2bec7a269d2e14c35b1a786d394258376648f80b4b99250ba1900cfe68230b8385aeac153149d9ce56099" - ] -} -x-commit-hash: "e9a4cecb8294c1839db18b1d0c30e755ec85ed5e" diff --git a/ppx_src/esy.lock/opam/reason.3.8.1/opam b/ppx_src/esy.lock/opam/reason.3.8.1/opam deleted file mode 100644 index a72f8ce..0000000 --- a/ppx_src/esy.lock/opam/reason.3.8.1/opam +++ /dev/null @@ -1,36 +0,0 @@ -opam-version: "2.0" -maintainer: "Jordan Walke " -authors: [ "Jordan Walke " ] -license: "MIT" -homepage: "https://github.com/reasonml/reason" -doc: "https://reasonml.github.io/" -bug-reports: "https://github.com/reasonml/reason/issues" -dev-repo: "git+https://github.com/reasonml/reason.git" -tags: [ "syntax" ] -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" {>= "4.03" & < "5.1"} - "dune" {>= "2.3"} - "ocamlfind" {build} - "menhir" {>= "20180523"} - "merlin-extend" {>= "0.6"} - "fix" - "result" - "ppx_derivers" -] -synopsis: "Reason: Syntax & Toolchain for OCaml" -description: """ -Reason gives OCaml a new syntax that is remniscient of languages like -JavaScript. It's also the umbrella project for a set of tools for the OCaml & -JavaScript ecosystem.""" -url { - src: - "https://github.com/reasonml/reason/releases/download/3.8.1/reason-3.8.1.tbz" - checksum: [ - "sha256=bfcdbb09f62b4c108f26e6dc380431613e4de4b065df8f14364efe4acea8e414" - "sha512=61cdf7844349b64190965782103e04eef303ca1f2a7cdc7e20d11189700796a18d2a9d9dbb3ad17eb1363bb1663113da6a22448c017820219757874601f207c3" - ] -} -x-commit-hash: "c60801c3378025e4527d3f53ef960daf937ed478" diff --git a/ppx_src/esy.lock/opam/result.1.5/opam b/ppx_src/esy.lock/opam/result.1.5/opam deleted file mode 100644 index 6b7b68d..0000000 --- a/ppx_src/esy.lock/opam/result.1.5/opam +++ /dev/null @@ -1,22 +0,0 @@ -opam-version: "2.0" -maintainer: "Jane Street developers" -authors: ["Jane Street Group, LLC"] -homepage: "https://github.com/janestreet/result" -dev-repo: "git+https://github.com/janestreet/result.git" -bug-reports: "https://github.com/janestreet/result/issues" -license: "BSD-3-Clause" -build: [["dune" "build" "-p" name "-j" jobs]] -depends: [ - "ocaml" - "dune" {>= "1.0"} -] -synopsis: "Compatibility Result module" -description: """ -Projects that want to use the new result type defined in OCaml >= 4.03 -while staying compatible with older version of OCaml should use the -Result module defined in this library.""" -url { - src: - "https://github.com/janestreet/result/releases/download/1.5/result-1.5.tbz" - checksum: "md5=1b82dec78849680b49ae9a8a365b831b" -} diff --git a/ppx_src/esy.lock/opam/seq.base/files/META.seq b/ppx_src/esy.lock/opam/seq.base/files/META.seq deleted file mode 100644 index 06b95ef..0000000 --- a/ppx_src/esy.lock/opam/seq.base/files/META.seq +++ /dev/null @@ -1,4 +0,0 @@ -name="seq" -version="[distributed with OCaml 4.07 or above]" -description="dummy backward-compatibility package for iterators" -requires="" diff --git a/ppx_src/esy.lock/opam/seq.base/files/seq.install b/ppx_src/esy.lock/opam/seq.base/files/seq.install deleted file mode 100644 index c4d7020..0000000 --- a/ppx_src/esy.lock/opam/seq.base/files/seq.install +++ /dev/null @@ -1,3 +0,0 @@ -lib:[ - "META.seq" {"META"} -] diff --git a/ppx_src/esy.lock/opam/seq.base/opam b/ppx_src/esy.lock/opam/seq.base/opam deleted file mode 100644 index b33d8c7..0000000 --- a/ppx_src/esy.lock/opam/seq.base/opam +++ /dev/null @@ -1,15 +0,0 @@ -opam-version: "2.0" -maintainer: " " -authors: " " -homepage: " " -depends: [ - "ocaml" {>= "4.07.0"} -] -dev-repo: "git+https://github.com/ocaml/ocaml.git" -bug-reports: "https://caml.inria.fr/mantis/main_page.php" -synopsis: - "Compatibility package for OCaml's standard iterator type starting from 4.07." -extra-files: [ - ["seq.install" "md5=026b31e1df290373198373d5aaa26e42"] - ["META.seq" "md5=b33c8a1a6c7ed797816ce27df4855107"] -] diff --git a/ppx_src/esy.lock/opam/sexplib0.v0.15.1/opam b/ppx_src/esy.lock/opam/sexplib0.v0.15.1/opam deleted file mode 100644 index 123ccd0..0000000 --- a/ppx_src/esy.lock/opam/sexplib0.v0.15.1/opam +++ /dev/null @@ -1,26 +0,0 @@ -opam-version: "2.0" -maintainer: "Jane Street developers" -authors: ["Jane Street Group, LLC"] -homepage: "https://github.com/janestreet/sexplib0" -bug-reports: "https://github.com/janestreet/sexplib0/issues" -dev-repo: "git+https://github.com/janestreet/sexplib0.git" -doc: "https://ocaml.janestreet.com/ocaml-core/latest/doc/sexplib0/index.html" -license: "MIT" -build: [ - ["dune" "build" "-p" name "-j" jobs] -] -depends: [ - "ocaml" {>= "4.08"} - "dune" {>= "2.0.0"} -] -synopsis: "Library containing the definition of S-expressions and some base converters" -description: " -Part of Jane Street's Core library -The Core suite of libraries is an industrial strength alternative to -OCaml's standard library that was developed by Jane Street, the -largest industrial user of OCaml. -" -url { -src: "https://github.com/janestreet/sexplib0/archive/refs/tags/v0.15.1.tar.gz" -checksum: "md5=ab8fd6273f35a792cad48cbb3024a7f9" -} diff --git a/ppx_src/esy.lock/opam/spawn.v0.15.1/opam b/ppx_src/esy.lock/opam/spawn.v0.15.1/opam deleted file mode 100644 index 5be3a99..0000000 --- a/ppx_src/esy.lock/opam/spawn.v0.15.1/opam +++ /dev/null @@ -1,56 +0,0 @@ -opam-version: "2.0" -synopsis: "Spawning sub-processes" -description: """ -Spawn is a small library exposing only one functionality: spawning sub-process. - -It has three main goals: - -1. provide missing features of Unix.create_process such as providing a -working directory - -2. provide better errors when a system call fails in the -sub-process. For instance if a command is not found, you get a proper -[Unix.Unix_error] exception - -3. improve performance by using vfork when available. It is often -claimed that nowadays fork is as fast as vfork, however in practice -fork takes time proportional to the process memory while vfork is -constant time. In application using a lot of memory, vfork can be -thousands of times faster than fork. -""" -maintainer: ["Jane Street developers"] -authors: ["Jane Street Group, LLC"] -license: "MIT" -homepage: "https://github.com/janestreet/spawn" -doc: "https://janestreet.github.io/spawn/" -bug-reports: "https://github.com/janestreet/spawn/issues" -depends: [ - "dune" {>= "2.8"} - "ppx_expect" {with-test} - "ocaml" {>= "4.05"} - "odoc" {with-doc} -] -build: [ - ["dune" "subst"] {dev} - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@runtest" {with-test} - "@doc" {with-doc} - ] -] -dev-repo: "git+https://github.com/janestreet/spawn.git" -x-commit-hash: "13d279ebfa8c40d4bafe18cddfdff0de54b4eaff" -url { - src: - "https://github.com/janestreet/spawn/archive/v0.15.1.tar.gz" - checksum: [ - "sha256=9afdee314fab6c3fcd689ab6eb5608d6b78078e6dede3953a47debde06c19d50" - "sha512=efdb31d5ec5ea36d0bc80224d4ee04e46ce3428d1662870e6cebece92bc313d6eebee378802c0c059dd6e0cafea515308c31b7dfaf04a098eb4566583c1e9ed4" - ] -} diff --git a/ppx_src/esy.lock/opam/stdlib-shims.0.3.0/opam b/ppx_src/esy.lock/opam/stdlib-shims.0.3.0/opam deleted file mode 100644 index 8c96957..0000000 --- a/ppx_src/esy.lock/opam/stdlib-shims.0.3.0/opam +++ /dev/null @@ -1,31 +0,0 @@ -opam-version: "2.0" -maintainer: "The stdlib-shims programmers" -authors: "The stdlib-shims programmers" -homepage: "https://github.com/ocaml/stdlib-shims" -doc: "https://ocaml.github.io/stdlib-shims/" -dev-repo: "git+https://github.com/ocaml/stdlib-shims.git" -bug-reports: "https://github.com/ocaml/stdlib-shims/issues" -tags: ["stdlib" "compatibility" "org:ocaml"] -license: ["LGPL-2.1-only WITH OCaml-LGPL-linking-exception"] -depends: [ - "dune" - "ocaml" {>= "4.02.3"} -] -build: [ "dune" "build" "-p" name "-j" jobs ] -synopsis: "Backport some of the new stdlib features to older compiler" -description: """ -Backport some of the new stdlib features to older compiler, -such as the Stdlib module. - -This allows projects that require compatibility with older compiler to -use these new features in their code. -""" -x-commit-hash: "fb6815e5d745f07fd567c11671149de6ef2e74c8" -url { - src: - "https://github.com/ocaml/stdlib-shims/releases/download/0.3.0/stdlib-shims-0.3.0.tbz" - checksum: [ - "sha256=babf72d3917b86f707885f0c5528e36c63fccb698f4b46cf2bab5c7ccdd6d84a" - "sha512=1151d7edc8923516e9a36995a3f8938d323aaade759ad349ed15d6d8501db61ffbe63277e97c4d86149cf371306ac23df0f581ec7e02611f58335126e1870980" - ] -} diff --git a/ppx_src/esy.lock/opam/stdune.3.3.1/opam b/ppx_src/esy.lock/opam/stdune.3.3.1/opam deleted file mode 100644 index 89c2d7d..0000000 --- a/ppx_src/esy.lock/opam/stdune.3.3.1/opam +++ /dev/null @@ -1,44 +0,0 @@ -opam-version: "2.0" -synopsis: "Dune's unstable standard library" -description: - "This library offers no backwards compatibility guarantees. Use at your own risk." -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08.0"} - "base-unix" - "dyn" {= version} - "ordering" {= version} - "pp" {>= "1.1.0"} - "csexp" {>= "1.5.0"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/topkg.1.0.5/opam b/ppx_src/esy.lock/opam/topkg.1.0.5/opam deleted file mode 100644 index 3b2f63a..0000000 --- a/ppx_src/esy.lock/opam/topkg.1.0.5/opam +++ /dev/null @@ -1,44 +0,0 @@ -opam-version: "2.0" -synopsis: """The transitory OCaml software packager""" -maintainer: ["Daniel Bünzli "] -authors: ["The topkg programmers"] -homepage: "https://erratique.ch/software/topkg" -doc: "https://erratique.ch/software/topkg/doc" -dev-repo: "git+https://erratique.ch/repos/topkg.git" -bug-reports: "https://github.com/dbuenzli/topkg/issues" -license: ["ISC"] -tags: ["packaging" "ocamlbuild" "org:erratique"] -depends: ["ocaml" {>= "4.05.0"} - "ocamlfind" {build & >= "1.6.1"} - "ocamlbuild"] -build: [["ocaml" "pkg/pkg.ml" "build" "--pkg-name" name - "--dev-pkg" "%{dev}%"]] -url { - src: "https://erratique.ch/software/topkg/releases/topkg-1.0.5.tbz" - checksum: "sha512=9450e9139209aacd8ddb4ba18e4225770837e526a52a56d94fd5c9c4c9941e83e0e7102e2292b440104f4c338fabab47cdd6bb51d69b41cc92cc7a551e6fefab"} -description: """ -Topkg is a packager for distributing OCaml software. It provides an -API to describe the files a package installs in a given build -configuration and to specify information about the package's -distribution, creation and publication procedures. - -The optional topkg-care package provides the `topkg` command line tool -which helps with various aspects of a package's life cycle: creating -and linting a distribution, releasing it on the WWW, publish its -documentation, add it to the OCaml opam repository, etc. - -Topkg is distributed under the ISC license and has **no** -dependencies. This is what your packages will need as a *build* -dependency. - -Topkg-care is distributed under the ISC license it depends on -[fmt][fmt], [logs][logs], [bos][bos], [cmdliner][cmdliner], -[webbrowser][webbrowser] and `opam-format`. - -[fmt]: http://erratique.ch/software/fmt -[logs]: http://erratique.ch/software/logs -[bos]: http://erratique.ch/software/bos -[cmdliner]: http://erratique.ch/software/cmdliner -[webbrowser]: http://erratique.ch/software/webbrowser - -Home page: http://erratique.ch/software/topkg""" \ No newline at end of file diff --git a/ppx_src/esy.lock/opam/uutf.1.0.3/opam b/ppx_src/esy.lock/opam/uutf.1.0.3/opam deleted file mode 100644 index e96cc4a..0000000 --- a/ppx_src/esy.lock/opam/uutf.1.0.3/opam +++ /dev/null @@ -1,36 +0,0 @@ -opam-version: "2.0" -synopsis: """Non-blocking streaming Unicode codec for OCaml""" -maintainer: ["Daniel Bünzli "] -authors: ["The uutf programmers"] -homepage: "https://erratique.ch/software/uutf" -doc: "https://erratique.ch/software/uutf/doc/" -dev-repo: "git+https://erratique.ch/repos/uutf.git" -bug-reports: "https://github.com/dbuenzli/uutf/issues" -license: ["ISC"] -tags: ["unicode" "text" "utf-8" "utf-16" "codec" "org:erratique"] -depends: ["ocaml" {>= "4.03.0"} - "ocamlfind" {build} - "ocamlbuild" {build} - "topkg" {build & >= "1.0.3"}] -depopts: ["cmdliner"] -conflicts: ["cmdliner" {< "0.9.8"}] -build: [["ocaml" "pkg/pkg.ml" "build" "--dev-pkg" "%{dev}%" - "--with-cmdliner" "%{cmdliner:installed}%"]] -url { - src: "https://erratique.ch/software/uutf/releases/uutf-1.0.3.tbz" - checksum: "sha512=50cc4486021da46fb08156e9daec0d57b4ca469b07309c508d5a9a41e9dbcf1f32dec2ed7be027326544453dcaf9c2534919395fd826dc7768efc6cc4bfcc9f8"} -description: """ -Uutf is a non-blocking streaming codec to decode and encode the UTF-8, -UTF-16, UTF-16LE and UTF-16BE encoding schemes. It can efficiently -work character by character without blocking on IO. Decoders perform -character position tracking and support newline normalization. - -Functions are also provided to fold over the characters of UTF encoded -OCaml string values and to directly encode characters in OCaml -Buffer.t values. **Note** that since OCaml 4.14, that functionality -can be found in the Stdlib and you are encouraged to migrate to it. - -Uutf has no dependency and is distributed under the ISC license. - -Home page: http://erratique.ch/software/uutf -Contact: Daniel Bünzli ``""" \ No newline at end of file diff --git a/ppx_src/esy.lock/opam/xdg.3.3.1/opam b/ppx_src/esy.lock/opam/xdg.3.3.1/opam deleted file mode 100644 index 7bb247e..0000000 --- a/ppx_src/esy.lock/opam/xdg.3.3.1/opam +++ /dev/null @@ -1,39 +0,0 @@ -opam-version: "2.0" -synopsis: "XDG Base Directory Specification" -description: - "https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html" -maintainer: ["Jane Street Group, LLC "] -authors: ["Jane Street Group, LLC "] -license: "MIT" -homepage: "https://github.com/ocaml/dune" -doc: "https://dune.readthedocs.io/" -bug-reports: "https://github.com/ocaml/dune/issues" -depends: [ - "dune" {>= "3.3"} - "ocaml" {>= "4.08"} - "odoc" {with-doc} -] -dev-repo: "git+https://github.com/ocaml/dune.git" -build: [ - ["dune" "subst"] {dev} - ["rm" "-rf" "vendor/csexp"] - ["rm" "-rf" "vendor/pp"] - [ - "dune" - "build" - "-p" - name - "-j" - jobs - "@install" - "@doc" {with-doc} - ] -] -url { - src: "https://github.com/ocaml/dune/releases/download/3.3.1/dune-3.3.1.tbz" - checksum: [ - "sha256=840c80491bfe12bab5f2b99d49e163f3e4c4d2fc4b4a3e6fb16c24dccd5502e1" - "sha512=b5d7639336b5df8cf37b8aac45906c6d0ff7e38b1a4a2c6ddb616ea81cdc5a8ff36cecf3d4ee4ff9282c835ed2958d4702ae1b3dd1f048c4269f5e7fedbe50d5" - ] -} -x-commit-hash: "b3232b22e13ff2fe4db994ba7ae3db727d1493cd" diff --git a/ppx_src/esy.lock/opam/yojson.2.0.0/opam b/ppx_src/esy.lock/opam/yojson.2.0.0/opam deleted file mode 100644 index 68a4db2..0000000 --- a/ppx_src/esy.lock/opam/yojson.2.0.0/opam +++ /dev/null @@ -1,38 +0,0 @@ -opam-version: "2.0" -maintainer: ["nathan@cryptosense.com" "marek@xivilization.net"] -authors: ["Martin Jambon"] -homepage: "https://github.com/ocaml-community/yojson" -bug-reports: "https://github.com/ocaml-community/yojson/issues" -dev-repo: "git+https://github.com/ocaml-community/yojson.git" -doc: "https://ocaml-community.github.io/yojson/" -license: "BSD-3-Clause" -build: [ - ["dune" "subst"] {dev} - ["dune" "build" "-p" name "-j" jobs] - ["dune" "runtest" "-p" name "-j" jobs] {with-test} - ["dune" "build" "@doc" "-p" name "-j" jobs] {with-doc} -] -depends: [ - "ocaml" {>= "4.02.3"} - "dune" - "cppo" {build} - "alcotest" {with-test & >= "0.8.5"} - "odoc" {with-doc} - "seq" {>= "0.2.2"} -] -synopsis: - "Yojson is an optimized parsing and printing library for the JSON format" -description: """ -Yojson is an optimized parsing and printing library for the JSON format. - -ydump is a pretty-printing command-line program provided with the -yojson package.""" -url { - src: - "https://github.com/ocaml-community/yojson/releases/download/2.0.0/yojson-2.0.0.tbz" - checksum: [ - "sha256=ab5d863f7f951a8f7fb4a708399ca2da2cf139a5e0af7818145c20295420cb1a" - "sha512=3ea982dbeef7ec8da54d29124ddb8b86f90583eb96ed3947851cedec9e3d2d47b981e3465d41f2c94943e6865ba6a9a51c6f0252efa6df2386d398b679aae8f2" - ] -} -x-commit-hash: "9c5cee131ae0ec79713e62397076d597486844ed" diff --git a/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/files/winpatch.patch b/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/files/winpatch.patch deleted file mode 100644 index bba9929..0000000 --- a/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/files/winpatch.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./Makefile -+++ ./Makefile -@@ -271,7 +271,7 @@ - echo ' "ocamlbuild.byte" {"ocamlbuild.byte"}' >> ocamlbuild.install - ifeq ($(OCAML_NATIVE), true) - echo ' "ocamlbuild.native" {"ocamlbuild.native"}' >> ocamlbuild.install -- echo ' "ocamlbuild.native" {"ocamlbuild"}' >> ocamlbuild.install -+ echo " \"ocamlbuild.native\" {\"ocamlbuild${EXE}\"}" >> ocamlbuild.install - else - echo ' "ocamlbuild.byte" {"ocamlbuild"}' >> ocamlbuild.install - endif diff --git a/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/package.json b/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/package.json deleted file mode 100644 index b57a42c..0000000 --- a/ppx_src/esy.lock/overrides/opam__s__ocamlbuild_opam__c__0.14.1_opam_override/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "build": [ - [ - "bash", - "-c", - "#{os == 'windows' ? 'patch -p1 < winpatch.patch' : 'true'}" - ], - [ - "make", - "-f", - "configure.make", - "all", - "OCAMLBUILD_PREFIX=#{self.install}", - "OCAMLBUILD_BINDIR=#{self.bin}", - "OCAMLBUILD_LIBDIR=#{self.lib}", - "OCAMLBUILD_MANDIR=#{self.man}", - "OCAMLBUILD_NATIVE=true", - "OCAMLBUILD_NATIVE_TOOLS=true", - "EXE=#{os == 'windows' ? '.exe': ''}" - ], - [ - "make", - "check-if-preinstalled", - "all", - "EXE=#{os == 'windows' ? '.exe': ''}", - "opam-install" - ] - ] -} diff --git a/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/files/findlib.patch b/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/files/findlib.patch deleted file mode 100644 index 3aa5aa6..0000000 --- a/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/files/findlib.patch +++ /dev/null @@ -1,485 +0,0 @@ ---- ./Makefile -+++ ./Makefile -@@ -57,16 +57,16 @@ - cat findlib.conf.in | \ - $(SH) tools/patch '@SITELIB@' '$(OCAML_SITELIB)' >findlib.conf - if ./tools/cmd_from_same_dir ocamlc; then \ -- echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \ -+ echo 'ocamlc="ocamlc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ - fi - if ./tools/cmd_from_same_dir ocamlopt; then \ -- echo 'ocamlopt="ocamlopt.opt"' >>findlib.conf; \ -+ echo 'ocamlopt="ocamlopt.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ - fi - if ./tools/cmd_from_same_dir ocamldep; then \ -- echo 'ocamldep="ocamldep.opt"' >>findlib.conf; \ -+ echo 'ocamldep="ocamldep.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ - fi - if ./tools/cmd_from_same_dir ocamldoc; then \ -- echo 'ocamldoc="ocamldoc.opt"' >>findlib.conf; \ -+ echo 'ocamldoc="ocamldoc.opt$(EXEC_SUFFIX)"' >>findlib.conf; \ - fi - - .PHONY: install-doc ---- ./src/findlib/findlib_config.mlp -+++ ./src/findlib/findlib_config.mlp -@@ -24,3 +24,5 @@ - | "MacOS" -> "" (* don't know *) - | _ -> failwith "Unknown Sys.os_type" - ;; -+ -+let exec_suffix = "@EXEC_SUFFIX@";; ---- ./src/findlib/findlib.ml -+++ ./src/findlib/findlib.ml -@@ -28,15 +28,20 @@ - let conf_ldconf = ref "";; - let conf_ignore_dups_in = ref ([] : string list);; - --let ocamlc_default = "ocamlc";; --let ocamlopt_default = "ocamlopt";; --let ocamlcp_default = "ocamlcp";; --let ocamloptp_default = "ocamloptp";; --let ocamlmklib_default = "ocamlmklib";; --let ocamlmktop_default = "ocamlmktop";; --let ocamldep_default = "ocamldep";; --let ocamlbrowser_default = "ocamlbrowser";; --let ocamldoc_default = "ocamldoc";; -+let add_exec str = -+ match Findlib_config.exec_suffix with -+ | "" -> str -+ | a -> str ^ a ;; -+let ocamlc_default = add_exec "ocamlc";; -+let ocamlopt_default = add_exec "ocamlopt";; -+let ocamlcp_default = add_exec "ocamlcp";; -+let ocamloptp_default = add_exec "ocamloptp";; -+let ocamlmklib_default = add_exec "ocamlmklib";; -+let ocamlmktop_default = add_exec "ocamlmktop";; -+let ocamldep_default = add_exec "ocamldep";; -+let ocamlbrowser_default = add_exec "ocamlbrowser";; -+let ocamldoc_default = add_exec "ocamldoc";; -+ - - - let init_manually ---- ./src/findlib/fl_package_base.ml -+++ ./src/findlib/fl_package_base.ml -@@ -133,7 +133,15 @@ - List.find (fun def -> def.def_var = "exists_if") p.package_defs in - let files = Fl_split.in_words def.def_value in - List.exists -- (fun file -> Sys.file_exists (Filename.concat d' file)) -+ (fun file -> -+ let fln = Filename.concat d' file in -+ let e = Sys.file_exists fln in -+ (* necessary for ppx executables *) -+ if e || Sys.os_type <> "Win32" || Filename.check_suffix fln ".exe" then -+ e -+ else -+ Sys.file_exists (fln ^ ".exe") -+ ) - files - with Not_found -> true in - ---- ./src/findlib/fl_split.ml -+++ ./src/findlib/fl_split.ml -@@ -126,10 +126,17 @@ - | '/' | '\\' -> true - | _ -> false in - let norm_dir_win() = -- if l >= 1 && s.[0] = '/' then -- Buffer.add_char b '\\' else Buffer.add_char b s.[0]; -- if l >= 2 && s.[1] = '/' then -- Buffer.add_char b '\\' else Buffer.add_char b s.[1]; -+ if l >= 1 then ( -+ if s.[0] = '/' then -+ Buffer.add_char b '\\' -+ else -+ Buffer.add_char b s.[0] ; -+ if l >= 2 then -+ if s.[1] = '/' then -+ Buffer.add_char b '\\' -+ else -+ Buffer.add_char b s.[1]; -+ ); - for k = 2 to l - 1 do - let c = s.[k] in - if is_slash c then ( ---- ./src/findlib/frontend.ml -+++ ./src/findlib/frontend.ml -@@ -31,10 +31,18 @@ - else - Sys_error (arg ^ ": " ^ Unix.error_message code) - -+let is_win = Sys.os_type = "Win32" -+ -+let () = -+ match Findlib_config.system with -+ | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" -> -+ (try set_binary_mode_out stdout true with _ -> ()); -+ (try set_binary_mode_out stderr true with _ -> ()); -+ | _ -> () - - let slashify s = - match Findlib_config.system with -- | "mingw" | "mingw64" | "cygwin" -> -+ | "win32" | "win64" | "mingw" | "cygwin" | "mingw64" | "cygwin64" -> - let b = Buffer.create 80 in - String.iter - (function -@@ -49,7 +57,7 @@ - - let out_path ?(prefix="") s = - match Findlib_config.system with -- | "mingw" | "mingw64" | "cygwin" -> -+ | "win32" | "win64" | "mingw" | "mingw64" | "cygwin" -> - let u = slashify s in - prefix ^ - (if String.contains u ' ' then -@@ -273,11 +281,9 @@ - - - let identify_dir d = -- match Sys.os_type with -- | "Win32" -> -- failwith "identify_dir" (* not available *) -- | _ -> -- let s = Unix.stat d in -+ if is_win then -+ failwith "identify_dir"; (* not available *) -+ let s = Unix.stat d in - (s.Unix.st_dev, s.Unix.st_ino) - ;; - -@@ -459,6 +465,96 @@ - ) - packages - -+let rewrite_cmd s = -+ if s = "" || not is_win then -+ s -+ else -+ let s = -+ let l = String.length s in -+ let b = Buffer.create l in -+ for i = 0 to pred l do -+ match s.[i] with -+ | '/' -> Buffer.add_char b '\\' -+ | x -> Buffer.add_char b x -+ done; -+ Buffer.contents b -+ in -+ if (Filename.is_implicit s && String.contains s '\\' = false) || -+ Filename.check_suffix (String.lowercase s) ".exe" then -+ s -+ else -+ let s' = s ^ ".exe" in -+ if Sys.file_exists s' then -+ s' -+ else -+ s -+ -+let rewrite_cmd s = -+ if s = "" || not is_win then s else -+ let s = -+ let l = String.length s in -+ let b = Buffer.create l in -+ for i = 0 to pred l do -+ match s.[i] with -+ | '/' -> Buffer.add_char b '\\' -+ | x -> Buffer.add_char b x -+ done; -+ Buffer.contents b -+ in -+ if (Filename.is_implicit s && String.contains s '\\' = false) || -+ Filename.check_suffix (String.lowercase s) ".exe" then -+ s -+ else -+ let s' = s ^ ".exe" in -+ if Sys.file_exists s' then -+ s' -+ else -+ s -+ -+let rewrite_pp cmd = -+ if not is_win then cmd else -+ let module T = struct exception Keep end in -+ let is_whitespace = function -+ | ' ' | '\011' | '\012' | '\n' | '\r' | '\t' -> true -+ | _ -> false in -+ (* characters that triggers special behaviour (cmd.exe, not unix shell) *) -+ let is_unsafe_char = function -+ | '(' | ')' | '%' | '!' | '^' | '<' | '>' | '&' -> true -+ | _ -> false in -+ let len = String.length cmd in -+ let buf = Buffer.create (len + 4) in -+ let buf_cmd = Buffer.create len in -+ let rec iter_ws i = -+ if i >= len then () else -+ let cur = cmd.[i] in -+ if is_whitespace cur then ( -+ Buffer.add_char buf cur; -+ iter_ws (succ i) -+ ) -+ else -+ iter_cmd i -+ and iter_cmd i = -+ if i >= len then add_buf_cmd () else -+ let cur = cmd.[i] in -+ if is_unsafe_char cur || cur = '"' || cur = '\'' then -+ raise T.Keep; -+ if is_whitespace cur then ( -+ add_buf_cmd (); -+ Buffer.add_substring buf cmd i (len - i) -+ ) -+ else ( -+ Buffer.add_char buf_cmd cur; -+ iter_cmd (succ i) -+ ) -+ and add_buf_cmd () = -+ if Buffer.length buf_cmd > 0 then -+ Buffer.add_string buf (rewrite_cmd (Buffer.contents buf_cmd)) -+ in -+ try -+ iter_ws 0; -+ Buffer.contents buf -+ with -+ | T.Keep -> cmd - - let process_pp_spec syntax_preds packages pp_opts = - (* Returns: pp_command *) -@@ -549,7 +645,7 @@ - None -> [] - | Some cmd -> - ["-pp"; -- cmd ^ " " ^ -+ (rewrite_cmd cmd) ^ " " ^ - String.concat " " (List.map Filename.quote pp_i_options) ^ " " ^ - String.concat " " (List.map Filename.quote pp_archives) ^ " " ^ - String.concat " " (List.map Filename.quote pp_opts)] -@@ -625,9 +721,11 @@ - in - try - let preprocessor = -+ rewrite_cmd ( - resolve_path - ~base ~explicit:true -- (package_property predicates pname "ppx") in -+ (package_property predicates pname "ppx") ) -+ in - ["-ppx"; String.concat " " (preprocessor :: options)] - with Not_found -> [] - ) -@@ -895,6 +993,14 @@ - switch (e.g. -L instead of -L ) - *) - -+(* We may need to remove files on which we do not have complete control. -+ On Windows, removing a read-only file fails so try to change the -+ mode of the file first. *) -+let remove_file fname = -+ try Sys.remove fname -+ with Sys_error _ when is_win -> -+ (try Unix.chmod fname 0o666 with Unix.Unix_error _ -> ()); -+ Sys.remove fname - - let ocamlc which () = - -@@ -1022,9 +1128,12 @@ - - "-intf", - Arg.String (fun s -> pass_files := !pass_files @ [ Intf(slashify s) ]); -- -+ - "-pp", -- Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" s); -+ Arg.String (fun s -> pp_specified := true; add_spec_fn "-pp" (rewrite_pp s)); -+ -+ "-ppx", -+ Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s)); - - "-thread", - Arg.Unit (fun _ -> threads := threads_default); -@@ -1237,7 +1346,7 @@ - with - any -> - close_out initl; -- Sys.remove initl_file_name; -+ remove_file initl_file_name; - raise any - end; - -@@ -1245,9 +1354,9 @@ - at_exit - (fun () -> - let tr f x = try f x with _ -> () in -- tr Sys.remove initl_file_name; -- tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmi"); -- tr Sys.remove (Filename.chop_extension initl_file_name ^ ".cmo"); -+ tr remove_file initl_file_name; -+ tr remove_file (Filename.chop_extension initl_file_name ^ ".cmi"); -+ tr remove_file (Filename.chop_extension initl_file_name ^ ".cmo"); - ); - - let exclude_list = [ stdlibdir; threads_dir; vmthreads_dir ] in -@@ -1493,7 +1602,9 @@ - [ "-v", Arg.Unit (fun () -> verbose := Verbose); - "-pp", Arg.String (fun s -> - pp_specified := true; -- options := !options @ ["-pp"; s]); -+ options := !options @ ["-pp"; rewrite_pp s]); -+ "-ppx", Arg.String (fun s -> -+ options := !options @ ["-ppx"; rewrite_pp s]); - ] - ) - ) -@@ -1672,7 +1783,9 @@ - Arg.String (fun s -> add_spec_fn "-I" (slashify (resolve_path s))); - - "-pp", Arg.String (fun s -> pp_specified := true; -- add_spec_fn "-pp" s); -+ add_spec_fn "-pp" (rewrite_pp s)); -+ "-ppx", Arg.String (fun s -> add_spec_fn "-ppx" (rewrite_pp s)); -+ - ] - ) - ) -@@ -1830,7 +1943,10 @@ - output_string ch_out append; - close_out ch_out; - close_in ch_in; -- Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime; -+ (try Unix.utimes outpath s.Unix.st_mtime s.Unix.st_mtime -+ with Unix.Unix_error(e,_,_) -> -+ prerr_endline("Warning: setting utimes for " ^ outpath -+ ^ ": " ^ Unix.error_message e)); - - prerr_endline("Installed " ^ outpath); - with -@@ -1882,6 +1998,8 @@ - Unix.openfile (Filename.concat dir owner_file) [Unix.O_RDONLY] 0 in - let f = - Unix.in_channel_of_descr fd in -+ if is_win then -+ set_binary_mode_in f false; - try - let line = input_line f in - let is_my_file = (line = pkg) in -@@ -2208,7 +2326,7 @@ - let lines = read_ldconf !ldconf in - let dlldir_norm = Fl_split.norm_dir dlldir in - let dlldir_norm_lc = string_lowercase_ascii dlldir_norm in -- let ci_filesys = (Sys.os_type = "Win32") in -+ let ci_filesys = is_win in - let check_dir d = - let d' = Fl_split.norm_dir d in - (d' = dlldir_norm) || -@@ -2356,7 +2474,7 @@ - List.iter - (fun file -> - let absfile = Filename.concat dlldir file in -- Sys.remove absfile; -+ remove_file absfile; - prerr_endline ("Removed " ^ absfile) - ) - dll_files -@@ -2365,7 +2483,7 @@ - (* Remove the files from the package directory: *) - if Sys.file_exists pkgdir then begin - let files = Sys.readdir pkgdir in -- Array.iter (fun f -> Sys.remove (Filename.concat pkgdir f)) files; -+ Array.iter (fun f -> remove_file (Filename.concat pkgdir f)) files; - Unix.rmdir pkgdir; - prerr_endline ("Removed " ^ pkgdir) - end -@@ -2415,7 +2533,9 @@ - - - let print_configuration() = -+ let sl = slashify in - let dir s = -+ let s = sl s in - if Sys.file_exists s then - s - else -@@ -2453,27 +2573,27 @@ - if md = "" then "the corresponding package directories" else dir md - ); - Printf.printf "The standard library is assumed to reside in:\n %s\n" -- (Findlib.ocaml_stdlib()); -+ (sl (Findlib.ocaml_stdlib())); - Printf.printf "The ld.conf file can be found here:\n %s\n" -- (Findlib.ocaml_ldconf()); -+ (sl (Findlib.ocaml_ldconf())); - flush stdout - | Some "conf" -> -- print_endline (Findlib.config_file()) -+ print_endline (sl (Findlib.config_file())) - | Some "path" -> -- List.iter print_endline (Findlib.search_path()) -+ List.iter ( fun x -> print_endline (sl x)) (Findlib.search_path()) - | Some "destdir" -> -- print_endline (Findlib.default_location()) -+ print_endline ( sl (Findlib.default_location())) - | Some "metadir" -> -- print_endline (Findlib.meta_directory()) -+ print_endline ( sl (Findlib.meta_directory())) - | Some "metapath" -> - let mdir = Findlib.meta_directory() in - let ddir = Findlib.default_location() in -- print_endline -- (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META") -+ print_endline ( sl -+ (if mdir <> "" then mdir ^ "/META.%s" else ddir ^ "/%s/META")) - | Some "stdlib" -> -- print_endline (Findlib.ocaml_stdlib()) -+ print_endline ( sl (Findlib.ocaml_stdlib())) - | Some "ldconf" -> -- print_endline (Findlib.ocaml_ldconf()) -+ print_endline ( sl (Findlib.ocaml_ldconf())) - | _ -> - assert false - ;; -@@ -2481,7 +2601,7 @@ - - let ocamlcall pkg cmd = - let dir = package_directory pkg in -- let path = Filename.concat dir cmd in -+ let path = rewrite_cmd (Filename.concat dir cmd) in - begin - try Unix.access path [ Unix.X_OK ] - with -@@ -2647,6 +2767,10 @@ - | Sys_error f -> - prerr_endline ("ocamlfind: " ^ f); - exit 2 -+ | Unix.Unix_error (e, fn, f) -> -+ prerr_endline ("ocamlfind: " ^ fn ^ " " ^ f -+ ^ ": " ^ Unix.error_message e); -+ exit 2 - | Findlib.No_such_package(pkg,info) -> - prerr_endline ("ocamlfind: Package `" ^ pkg ^ "' not found" ^ - (if info <> "" then " - " ^ info else "")); ---- ./src/findlib/Makefile -+++ ./src/findlib/Makefile -@@ -90,6 +90,7 @@ - cat findlib_config.mlp | \ - $(SH) $(TOP)/tools/patch '@CONFIGFILE@' '$(OCAMLFIND_CONF)' | \ - $(SH) $(TOP)/tools/patch '@STDLIB@' '$(OCAML_CORE_STDLIB)' | \ -+ $(SH) $(TOP)/tools/patch '@EXEC_SUFFIX@' '$(EXEC_SUFFIX)' | \ - sed -e 's;@AUTOLINK@;$(OCAML_AUTOLINK);g' \ - -e 's;@SYSTEM@;$(SYSTEM);g' \ - >findlib_config.ml ---- ./src/findlib/frontend.ml -+++ ./src/findlib/frontend.ml -@@ -281,10 +281,8 @@ - - - let identify_dir d = -- if is_win then -- failwith "identify_dir"; (* not available *) - let s = Unix.stat d in -- (s.Unix.st_dev, s.Unix.st_ino) -+ (s.Unix.st_dev, s.Unix.st_ino) - ;; - - diff --git a/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/package.json b/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/package.json deleted file mode 100644 index bf169e5..0000000 --- a/ppx_src/esy.lock/overrides/opam__s__ocamlfind_opam__c__1.9.5_opam_override/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "build": [ - [ - "bash", - "-c", - "#{os == 'windows' ? 'patch -p1 < findlib.patch' : 'true'}" - ], - [ - "./configure", - "-bindir", - "#{self.bin}", - "-sitelib", - "#{self.lib}", - "-mandir", - "#{self.man}", - "-config", - "#{self.lib}/findlib.conf", - "-no-custom", - "-no-topfind" - ], - [ - "make", - "all" - ], - [ - "make", - "opt" - ] - ], - "install": [ - [ - "make", - "install" - ], - [ - "install", - "-m", - "0755", - "ocaml-stub", - "#{self.bin}/ocaml" - ], - [ - "mkdir", - "-p", - "#{self.toplevel}" - ], - [ - "install", - "-m", - "0644", - "src/findlib/topfind", - "#{self.toplevel}/topfind" - ] - ], - "exportedEnv": { - "OCAML_TOPLEVEL_PATH": { - "val": "#{self.toplevel}", - "scope": "global" - } - } -} diff --git a/ppx_src/ppx_decco.opam b/ppx_src/ppx_decco.opam index e69de29..f30f64d 100644 --- a/ppx_src/ppx_decco.opam +++ b/ppx_src/ppx_decco.opam @@ -0,0 +1,21 @@ +opam-version: "2.0" +name: "decco-ppx" +version: "1.0.0" +synopsis: "PPX for generating encoders and decoders from Rescript types" +description: """ +PPX for generating encoders and decoders from Rescript types +""" +maintainer: "Day One Team " +authors: "Ryan Biwer, Murphy Randle, and others?" +license: "MIT" +homepage: "https://github.com/reasonml-labs/decco" +bug-reports: "https://github.com/reasonml-labs/decco/issues" +dev-repo: "git+https://github.com/reasonml-labs/decco.git" +depends: [ + "ocaml" { = "4.12.1"} + "dune" { >= "2.7"} + "ppxlib" { = "0.26.0"} +] +build: [ + ["dune" "build" "-p" name "-j" jobs] +] diff --git a/ppx_src/src/BatOption.ml b/ppx_src/src/BatOption.ml new file mode 100644 index 0000000..1d03d50 --- /dev/null +++ b/ppx_src/src/BatOption.ml @@ -0,0 +1,4 @@ +let get = function + | None -> failwith "Expected Some. got None" + | ((Some v) [@explicit_arity]) -> v +let some v = (Some v [@explicit_arity]) diff --git a/ppx_src/src/BatOption.re b/ppx_src/src/BatOption.re deleted file mode 100644 index edd15e8..0000000 --- a/ppx_src/src/BatOption.re +++ /dev/null @@ -1,7 +0,0 @@ -/* TODO: figure out why I can't compile ppx on newer Ocaml version */ - -let get = fun - | None => failwith("Expected Some. got None") - | Some(v) => v; - -let some = (v) => Some(v); diff --git a/ppx_src/src/Codecs.ml b/ppx_src/src/Codecs.ml new file mode 100644 index 0000000..62b2763 --- /dev/null +++ b/ppx_src/src/Codecs.ml @@ -0,0 +1,227 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils +let rec parameterizeCodecs typeArgs encoderFunc decoderFunc generatorSettings = + let subEncoders, subDecoders = + typeArgs + |> List.map (fun core_type -> generateCodecs generatorSettings core_type) + |> List.split + in + ( (match encoderFunc with + | None -> None + | ((Some encoderFunc) [@explicit_arity]) -> + let uncurriedApplicationAttrs = + [Attr.mk {txt = "res.partial"; loc} (PStr [])] + in + subEncoders + |> List.map (fun e -> (Asttypes.Nolabel, BatOption.get e)) + |> Exp.apply ~attrs:uncurriedApplicationAttrs encoderFunc + |> BatOption.some), + match decoderFunc with + | None -> None + | ((Some decoderFunc) [@explicit_arity]) -> + let uncurriedApplicationAttrs = + [Attr.mk {txt = "res.partial"; loc} (PStr [])] + in + subDecoders + |> List.map (fun e -> (Asttypes.Nolabel, BatOption.get e)) + |> Exp.apply ~attrs:uncurriedApplicationAttrs decoderFunc + |> BatOption.some ) + +and generateConstrCodecs {doEncode; doDecode} {Location.txt = identifier; loc} = + let open Longident in + match identifier with + | ((Lident "string") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.stringToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.stringFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "int") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.intToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.intFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "int64") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.int64ToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.int64FromJson] [@explicit_arity] + | false -> None ) + | ((Lident "float") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.floatToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.floatFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "bool") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.boolToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.boolFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "unit") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.unitToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.unitFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "array") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.arrayToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.arrayFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "list") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.listToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.listFromJson] [@explicit_arity] + | false -> None ) + | ((Lident "option") [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.optionToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.optionFromJson] [@explicit_arity] + | false -> None ) + | ((Ldot + ( ((Ldot (((Lident "Belt") [@explicit_arity]), "Result")) + [@explicit_arity]), + "t" )) + [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.resultToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.resultFromJson] [@explicit_arity] + | false -> None ) + | ((Ldot + ( ((Ldot (((Lident "Js") [@explicit_arity]), "Dict")) [@explicit_arity]), + "t" )) + [@explicit_arity]) -> + ( (match doEncode with + | true -> Some [%expr Decco.dictToJson] [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some [%expr Decco.dictFromJson] [@explicit_arity] + | false -> None ) + | ((Ldot + ( ((Ldot (((Lident "Js") [@explicit_arity]), "Json")) [@explicit_arity]), + "t" )) + [@explicit_arity]) -> + ( (match doEncode with + | true -> + Some + (Utils.wrapFunctionExpressionForUncurrying ~arity:1 + [%expr fun v -> v]) + [@explicit_arity] + | false -> None), + match doDecode with + | true -> + Some + (Utils.wrapFunctionExpressionForUncurrying ~arity:1 + [%expr fun v -> (Belt.Result.Ok v [@explicit_arity])]) + [@explicit_arity] + | false -> None ) + | ((Lident s) [@explicit_arity]) -> + ( (match doEncode with + | true -> + Some (makeIdentExpr (s ^ Utils.encoderFuncSuffix)) [@explicit_arity] + | false -> None), + match doDecode with + | true -> + Some (makeIdentExpr (s ^ Utils.decoderFuncSuffix)) [@explicit_arity] + | false -> None ) + | ((Ldot (left, right)) [@explicit_arity]) -> + ( (match doEncode with + | true -> + Some + (Exp.ident + (mknoloc + (Ldot (left, right ^ Utils.encoderFuncSuffix) [@explicit_arity]))) + [@explicit_arity] + | false -> None), + match doDecode with + | true -> + Some + (Exp.ident + (mknoloc + (Ldot (left, right ^ Utils.decoderFuncSuffix) [@explicit_arity]))) + [@explicit_arity] + | false -> None ) + | ((Lapply (_, _)) [@explicit_arity]) -> + fail loc "Lapply syntax not yet handled by decco" + +and generateCodecs ({doEncode; doDecode} as generatorSettings) + {ptyp_desc; ptyp_loc; ptyp_attributes} = + match ptyp_desc with + | Ptyp_any -> fail ptyp_loc "Can't generate codecs for `any` type" + | ((Ptyp_arrow (_, _, _)) [@explicit_arity]) -> + fail ptyp_loc "Can't generate codecs for function type" + | Ptyp_package _ -> fail ptyp_loc "Can't generate codecs for module type" + | ((Ptyp_tuple types) [@explicit_arity]) -> ( + let compositeCodecs = List.map (generateCodecs generatorSettings) types in + ( (match doEncode with + | true -> + Some + (compositeCodecs + |> List.map (fun (e, _) -> BatOption.get e) + |> Tuple.generateEncoder) + [@explicit_arity] + | false -> None), + match doDecode with + | true -> + Some + (compositeCodecs + |> List.map (fun (_, d) -> BatOption.get d) + |> Tuple.generateDecoder) + [@explicit_arity] + | false -> None )) + | ((Ptyp_var s) [@explicit_arity]) -> + ( (match doEncode with + | true -> Some (makeIdentExpr (encoderVarPrefix ^ s)) [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some (makeIdentExpr (decoderVarPrefix ^ s)) [@explicit_arity] + | false -> None ) + | ((Ptyp_constr (constr, typeArgs)) [@explicit_arity]) -> ( + let customCodec = getAttributeByName ptyp_attributes "decco.codec" in + let encode, decode = + match customCodec with + | ((Ok None) [@explicit_arity]) -> + generateConstrCodecs generatorSettings constr + | ((Ok ((Some attribute) [@explicit_arity])) [@explicit_arity]) -> ( + let expr = getExpressionFromPayload attribute in + ( (match doEncode with + | true -> + Some + [%expr + let e, _ = [%e expr] in + e] + [@explicit_arity] + | false -> None), + match doDecode with + | true -> + Some + [%expr + let _, d = [%e expr] in + d] + [@explicit_arity] + | false -> None )) + | ((Error s) [@explicit_arity]) -> fail ptyp_loc s + in + match List.length typeArgs = 0 with + | true -> (encode, decode) + | false -> parameterizeCodecs typeArgs encode decode generatorSettings) + | _ -> fail ptyp_loc "This syntax is not yet handled by decco" \ No newline at end of file diff --git a/ppx_src/src/Codecs.re b/ppx_src/src/Codecs.re deleted file mode 100644 index f0f9444..0000000 --- a/ppx_src/src/Codecs.re +++ /dev/null @@ -1,152 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; -open Utils; - -let rec parameterizeCodecs = (typeArgs, encoderFunc, decoderFunc, generatorSettings) => { - let (subEncoders, subDecoders) = typeArgs - |> List.map(core_type => generateCodecs(generatorSettings, core_type)) - |> List.split; - - ( - switch encoderFunc { - | None => None - | Some(encoderFunc) => - subEncoders - |> List.map(e => (Asttypes.Nolabel, BatOption.get(e))) - |> Exp.apply(encoderFunc) - |> BatOption.some - }, - - switch decoderFunc { - | None => None - | Some(decoderFunc) => - subDecoders - |> List.map(e => (Asttypes.Nolabel, BatOption.get(e))) - |> Exp.apply(decoderFunc) - |> BatOption.some - } - ) -} - -and generateConstrCodecs = ({ doEncode, doDecode }, { Location.txt: identifier, loc }) => { - open Longident; - - switch identifier { - | Lident("string") => ( - doEncode ? Some([%expr Decco.stringToJson]) : None, - doDecode ? Some([%expr Decco.stringFromJson]) : None - ) - | Lident("int") => ( - doEncode ? Some([%expr Decco.intToJson]) : None, - doDecode ? Some([%expr Decco.intFromJson]) : None - ) - | Lident("int64") => ( - doEncode ? Some([%expr Decco.int64ToJson]) : None, - doDecode ? Some([%expr Decco.int64FromJson]) : None - ) - | Lident("float") => ( - doEncode ? Some([%expr Decco.floatToJson]) : None, - doDecode ? Some([%expr Decco.floatFromJson]) : None - ) - | Lident("bool") => ( - doEncode ? Some([%expr Decco.boolToJson]) : None, - doDecode ? Some([%expr Decco.boolFromJson]) : None - ) - | Lident("unit") => ( - doEncode ? Some([%expr Decco.unitToJson]) : None, - doDecode ? Some([%expr Decco.unitFromJson]) : None - ) - | Lident("array") => ( - doEncode ? Some([%expr Decco.arrayToJson]) : None, - doDecode ? Some([%expr Decco.arrayFromJson]) : None - ) - | Lident("list") => ( - doEncode ? Some([%expr Decco.listToJson]) : None, - doDecode ? Some([%expr Decco.listFromJson]) : None - ) - | Lident("option") => ( - doEncode ? Some([%expr Decco.optionToJson]) : None, - doDecode ? Some([%expr Decco.optionFromJson]) : None - ) - | Ldot(Ldot(Lident("Belt"), "Result"), "t") => ( - doEncode ? Some([%expr Decco.resultToJson]) : None, - doDecode ? Some([%expr Decco.resultFromJson]) : None - ) - | Ldot(Ldot(Lident("Js"), "Dict"), "t") => ( - doEncode ? Some([%expr Decco.dictToJson]) : None, - doDecode ? Some([%expr Decco.dictFromJson]) : None - ) - | Ldot(Ldot(Lident("Js"), "Json"), "t") => ( - doEncode ? Some([%expr (v) => v]) : None, - doDecode ? Some([%expr (v) => Belt.Result.Ok(v)]) : None, - ) - | Lident(s) => ( - doEncode ? Some(makeIdentExpr(s ++ Utils.encoderFuncSuffix)) : None, - doDecode ? Some(makeIdentExpr(s ++ Utils.decoderFuncSuffix)) : None, - ) - | Ldot(left, right) => ( - doEncode ? Some(Exp.ident(mknoloc(Ldot(left, right ++ Utils.encoderFuncSuffix)))) : None, - doDecode ? Some(Exp.ident(mknoloc(Ldot(left, right ++ Utils.decoderFuncSuffix)))) : None, - ) - | Lapply(_, _) => fail(loc, "Lapply syntax not yet handled by decco") - }; -} - -and generateCodecs = ( - { doEncode, doDecode } as generatorSettings, - { ptyp_desc, ptyp_loc, ptyp_attributes } -) -=> { - switch ptyp_desc { - | Ptyp_any => fail(ptyp_loc, "Can't generate codecs for `any` type") - | Ptyp_arrow(_, _, _) => fail(ptyp_loc, "Can't generate codecs for function type") - | Ptyp_package(_) => fail(ptyp_loc, "Can't generate codecs for module type") - - | Ptyp_tuple(types) => { - let compositeCodecs = List.map(generateCodecs(generatorSettings), types); - ( - doEncode ? Some( - compositeCodecs - |> List.map(((e, _)) => BatOption.get(e)) - |> Tuple.generateEncoder) - : None, - doDecode ? Some( - compositeCodecs - |> List.map(((_, d)) => BatOption.get(d)) - |> Tuple.generateDecoder) - : None - ); - } - - | Ptyp_var(s) => ( - doEncode ? Some(makeIdentExpr(encoderVarPrefix ++ s)) : None, - doDecode ? Some(makeIdentExpr(decoderVarPrefix ++ s)) : None, - ) - - | Ptyp_constr(constr, typeArgs) => { - let customCodec = getAttributeByName(ptyp_attributes, "decco.codec"); - let (encode, decode) = switch customCodec { - | Ok(None) => generateConstrCodecs(generatorSettings, constr) - - | Ok(Some(attribute)) => { - /* TODO: make this smarter to avoid duplicationg expr? */ - let expr = getExpressionFromPayload(attribute); - ( - doEncode ? Some([%expr { let (e, _) = [%e expr]; e }]) : None, - doDecode ? Some([%expr { let (_, d) = [%e expr]; d }]) : None, - ) - } - - | Error(s) => fail(ptyp_loc, s) - }; - - List.length(typeArgs) == 0 ? - (encode, decode) - : - parameterizeCodecs(typeArgs, encode, decode, generatorSettings); - } - - | _ => fail(ptyp_loc, "This syntax is not yet handled by decco") - }; -}; diff --git a/ppx_src/src/DecodeCases.ml b/ppx_src/src/DecodeCases.ml new file mode 100644 index 0000000..43714ce --- /dev/null +++ b/ppx_src/src/DecodeCases.ml @@ -0,0 +1,16 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils +let generateErrorCase numArgs i _ = + { + pc_lhs = + Array.init numArgs (fun which -> + match which == i with + | true -> [%pat? Belt.Result.Error (e : Decco.decodeError)] + | false -> [%pat? _]) + |> Array.to_list |> tupleOrSingleton Pat.tuple; + pc_guard = None; + pc_rhs = + [%expr Belt.Result.Error {e with path = [%e indexConst i] ^ e.path}]; + } \ No newline at end of file diff --git a/ppx_src/src/DecodeCases.re b/ppx_src/src/DecodeCases.re deleted file mode 100644 index 8389cbe..0000000 --- a/ppx_src/src/DecodeCases.re +++ /dev/null @@ -1,15 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; -open Utils; - -let generateErrorCase = (numArgs, i, _) => { - pc_lhs: - Array.init(numArgs, which => - which === i ? [%pat? Belt.Result.Error(e : Decco.decodeError)] : [%pat? _] - ) - |> Array.to_list - |> tupleOrSingleton(Pat.tuple), - pc_guard: None, - pc_rhs: [%expr Belt.Result.Error({ ...e, path: [%e indexConst(i)] ++ e.path })] -}; diff --git a/ppx_src/src/Polyvariants.ml b/ppx_src/src/Polyvariants.ml new file mode 100644 index 0000000..468cd50 --- /dev/null +++ b/ppx_src/src/Polyvariants.ml @@ -0,0 +1,186 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils +let getArgsFromPolyvars ~loc coreTypes = + match coreTypes with + | [] -> [] + | coreType :: [] -> ( + match coreType.ptyp_desc with + | ((Ptyp_tuple coreTypes) [@explicit_arity]) -> coreTypes + | _ -> [coreType]) + | _ -> + fail loc + "This error shoudn't happen, means that the AST of your polyvariant is \ + wrong" +let generateEncoderCase generatorSettings unboxed row = + match row with + | ((Rtag ({txt = name; loc}, _attributes, coreTypes)) [@explicit_arity]) -> + let constructorExpr = + Exp.constant (Pconst_string (name, Location.none, None) [@explicit_arity]) + in + let args = getArgsFromPolyvars ~loc coreTypes in + let lhsVars = + match args with + | [] -> None + | _ :: [] -> Some (Pat.var (mknoloc "v0")) [@explicit_arity] + | _ -> + args + |> List.mapi (fun i _ -> mkloc ("v" ^ string_of_int i) loc |> Pat.var) + |> Pat.tuple + |> fun v -> (Some v [@explicit_arity]) + in + let rhsList = + args + |> List.map (Codecs.generateCodecs generatorSettings) + |> List.map (fun (encoder, _) -> BatOption.get encoder) + |> List.mapi (fun i e -> + Exp.apply ~loc e + [(Asttypes.Nolabel, makeIdentExpr ("v" ^ string_of_int i))]) + |> List.append [[%expr Js.Json.string [%e constructorExpr]]] + in + { + pc_lhs = Pat.variant name lhsVars; + pc_guard = None; + pc_rhs = + (match unboxed with + | true -> List.tl rhsList |> List.hd + | false -> [%expr Js.Json.array [%e rhsList |> Exp.array]]); + } + | ((Rinherit arg) [@explicit_arity]) -> + fail arg.ptyp_loc "This syntax is not yet implemented by decco" +let generateDecodeSuccessCase numArgs constructorName = + { + pc_lhs = + Array.init numArgs (fun i -> + mknoloc ("v" ^ string_of_int i) |> Pat.var |> fun p -> + [%pat? ((Belt.Result.Ok [%p p]) [@explicit_arity])]) + |> Array.to_list |> tupleOrSingleton Pat.tuple; + pc_guard = None; + pc_rhs = + ( Array.init numArgs (fun i -> makeIdentExpr ("v" ^ string_of_int i)) + |> Array.to_list |> tupleOrSingleton Exp.tuple + |> fun v -> + (Some v [@explicit_arity]) |> Exp.variant constructorName |> fun e -> + [%expr Belt.Result.Ok [%e e] [@explicit_arity]] ); + } +let generateArgDecoder generatorSettings args constructorName = + let numArgs = List.length args in + args + |> List.mapi (DecodeCases.generateErrorCase numArgs) + |> List.append [generateDecodeSuccessCase numArgs constructorName] + |> Exp.match_ + (args + |> List.map (Codecs.generateCodecs generatorSettings) + |> List.mapi (fun i (_, decoder) -> + Exp.apply (BatOption.get decoder) + [ + ( Asttypes.Nolabel, + let idx = + (Pconst_integer (string_of_int (i + 1), None) + [@explicit_arity]) + |> Exp.constant + in + [%expr Belt.Array.getExn jsonArr [%e idx]] ); + ]) + |> tupleOrSingleton Exp.tuple) +let generateDecoderCase generatorSettings row = + match row with + | ((Rtag ({txt; loc}, _, coreTypes)) [@explicit_arity]) -> + let args = getArgsFromPolyvars ~loc coreTypes in + let argLen = + (Pconst_integer (string_of_int (List.length args + 1), None) + [@explicit_arity]) + |> Exp.constant + in + let decoded = + match args with + | [] -> + let resultantExp = Exp.variant txt None in + [%expr Belt.Result.Ok [%e resultantExp] [@explicit_arity]] + | _ -> generateArgDecoder generatorSettings args txt + in + { + pc_lhs = + ( (Pconst_string (txt, Location.none, None) [@explicit_arity]) + |> Pat.constant + |> fun v -> + (Some v [@explicit_arity]) |> Pat.construct (lid "Js.Json.JSONString") + ); + pc_guard = None; + pc_rhs = + [%expr + match Js.Array.length tagged != [%e argLen] with + | true -> + Decco.error "Invalid number of arguments to polyvariant constructor" + v + | false -> [%e decoded]]; + } + | ((Rinherit coreType) [@explicit_arity]) -> + fail coreType.ptyp_loc "This syntax is not yet implemented by decco" +let generateUnboxedDecode generatorSettings row = + match row with + | ((Rtag ({txt; loc}, _, args)) [@explicit_arity]) -> ( + match args with + | a :: [] -> ( + let _, d = Codecs.generateCodecs generatorSettings a in + match d with + | ((Some d) [@explicit_arity]) -> + let constructor = + Exp.construct (lid txt) (Some [%expr v] [@explicit_arity]) + in + (Some + [%expr + fun v -> ([%e d] v |. Belt.Result.map) (fun v -> [%e constructor])] + [@explicit_arity]) + | None -> None) + | _ -> fail loc "Expected exactly one type argument") + | ((Rinherit coreType) [@explicit_arity]) -> + fail coreType.ptyp_loc "This syntax is not yet implemented by decco" +let generateCodecs ({doEncode; doDecode} as generatorSettings) rowFields unboxed + = + let encoder = + match doEncode with + | true -> + List.map (generateEncoderCase generatorSettings unboxed) rowFields + |> Exp.match_ [%expr v] + |> Exp.fun_ Asttypes.Nolabel None [%pat? v] + |> BatOption.some + | false -> None + in + let decoderDefaultCase = + { + pc_lhs = [%pat? _]; + pc_guard = None; + pc_rhs = + [%expr + Decco.error "Invalid polyvariant constructor" + (Belt.Array.getExn jsonArr 0)]; + } + in + let decoder = + match not doDecode with + | true -> None + | false -> ( + match unboxed with + | true -> generateUnboxedDecode generatorSettings (List.hd rowFields) + | false -> + let decoderSwitch = + rowFields |> List.map (generateDecoderCase generatorSettings) + |> fun l -> + l @ [decoderDefaultCase] + |> Exp.match_ [%expr Belt.Array.getExn tagged 0] + in + (Some + [%expr + fun v -> + match Js.Json.classify v with + | ((Js.Json.JSONArray [||]) [@explicit_arity]) -> + Decco.error "Expected polyvariant, found empty array" v + | ((Js.Json.JSONArray jsonArr) [@explicit_arity]) -> + let tagged = Js.Array.map Js.Json.classify jsonArr in + [%e decoderSwitch] + | _ -> Decco.error "Not a polyvariant" v] + [@explicit_arity])) + in + (encoder, decoder) \ No newline at end of file diff --git a/ppx_src/src/Polyvariants.re b/ppx_src/src/Polyvariants.re deleted file mode 100644 index 85c4011..0000000 --- a/ppx_src/src/Polyvariants.re +++ /dev/null @@ -1,207 +0,0 @@ -open Ppxlib -open Parsetree; -open Ast_helper; -open Utils; - -/* Polyvariants arguments are wrapped inside a Tuple, meaning that if there's only -one arg it's the coreType, but if there's more than one arg it's a tuple of one tuple with those args. -This function abstract this particuliarity from polyvariants (It's different from Variants). */ -let getArgsFromPolyvars = (~loc, coreTypes) => - switch (coreTypes) { - | [] => [] - | [coreType] => switch (coreType.ptyp_desc) { - /* If it's a tuple, return the args */ - | Ptyp_tuple(coreTypes) => coreTypes - /* If it's any other coreType, return it */ - | _ => [coreType] - } - | _ => fail(loc, "This error shoudn't happen, means that the AST of your polyvariant is wrong") - }; - -let generateEncoderCase = (generatorSettings, unboxed, row) => { - switch (row) { - | Rtag({ txt: name, loc }, _attributes, coreTypes) => { - let constructorExpr = Exp.constant(Pconst_string(name, Location.none, None)); - let args = getArgsFromPolyvars(~loc, coreTypes); - - let lhsVars = switch args { - | [] => None - | [_] => Some(Pat.var(mknoloc("v0"))) - | _ => - args - |> List.mapi((i, _) => - mkloc("v" ++ string_of_int(i), loc) |> Pat.var) - |> Pat.tuple - |> (v) => Some(v) - }; - - let rhsList = args - |> List.map(Codecs.generateCodecs(generatorSettings)) - |> List.map(((encoder, _)) => BatOption.get(encoder)) /* TODO: refactor */ - |> List.mapi((i, e) => - Exp.apply( - ~loc, e, - [(Asttypes.Nolabel, makeIdentExpr("v" ++ string_of_int(i)))] - ) - ) - |> List.append([[%expr Js.Json.string([%e constructorExpr])]]); - - { - pc_lhs: Pat.variant(name, lhsVars), - pc_guard: None, - pc_rhs: unboxed - ? List.tl(rhsList) |> List.hd - : [%expr Js.Json.array([%e rhsList |> Exp.array])] - } - } - /* We don't have enough information to generate a encoder */ - | Rinherit(arg) => fail(arg.ptyp_loc, "This syntax is not yet implemented by decco") - }; -}; - -let generateDecodeSuccessCase = (numArgs, constructorName) => { - pc_lhs: - Array.init(numArgs, i => - mknoloc("v" ++ string_of_int(i)) - |> Pat.var - |> (p) => [%pat? Belt.Result.Ok([%p p])] - ) - |> Array.to_list - |> tupleOrSingleton(Pat.tuple), - pc_guard: None, - pc_rhs: - Array.init(numArgs, i => makeIdentExpr("v" ++ string_of_int(i))) - |> Array.to_list - |> tupleOrSingleton(Exp.tuple) - |> (v) => Some(v) - |> Exp.variant(constructorName) - |> (e) => [%expr Belt.Result.Ok([%e e])] -}; - -let generateArgDecoder = (generatorSettings, args, constructorName) => { - let numArgs = List.length(args); - args - |> List.mapi(DecodeCases.generateErrorCase(numArgs)) - |> List.append([generateDecodeSuccessCase(numArgs, constructorName)]) - |> Exp.match(args - |> List.map(Codecs.generateCodecs(generatorSettings)) - |> List.mapi((i, (_, decoder)) => - Exp.apply(BatOption.get(decoder), [( - Asttypes.Nolabel, - { - /* +1 because index 0 is the constructor */ - let idx = Pconst_integer(string_of_int(i + 1), None) - |> Exp.constant; - - [%expr Belt.Array.getExn(jsonArr, [%e idx])]; - } - )]) - ) - |> tupleOrSingleton(Exp.tuple) - ); -}; - -let generateDecoderCase = (generatorSettings, row) => { - switch (row) { - | Rtag({ txt, loc }, _, coreTypes) => { - let args = getArgsFromPolyvars(~loc, coreTypes); - let argLen = - Pconst_integer(string_of_int(List.length(args) + 1), None) - |> Exp.constant; - - let decoded = switch(args) { - | [] => { - let resultantExp = Exp.variant(txt, None); - [%expr Belt.Result.Ok([%e resultantExp])] - } - | _ => generateArgDecoder(generatorSettings, args, txt) - }; - - { - pc_lhs: Pconst_string(txt, Location.none, None) - |> Pat.constant - |> (v) => Some(v) - |> Pat.construct(lid("Js.Json.JSONString")), - pc_guard: None, - pc_rhs: [%expr - (Js.Array.length(tagged) !== [%e argLen]) ? - Decco.error("Invalid number of arguments to polyvariant constructor", v) - : - [%e decoded] - ] - } - } - | Rinherit(coreType) => fail(coreType.ptyp_loc, "This syntax is not yet implemented by decco") - }; -}; - -let generateUnboxedDecode = (generatorSettings, row) => { - switch (row) { - | Rtag({ txt, loc }, _, args) => { - switch args { - | [a] => { - let (_, d) = Codecs.generateCodecs(generatorSettings, a); - switch d { - | Some(d) => { - let constructor = Exp.construct( - lid(txt), Some([%expr v]) - ); - - Some([%expr (v) => - [%e d](v) - -> Belt.Result.map(v => [%e constructor]) - ]) - } - | None => None - } - } - | _ => fail(loc, "Expected exactly one type argument") - } - } - | Rinherit(coreType) => fail(coreType.ptyp_loc, "This syntax is not yet implemented by decco") - } -}; - -let generateCodecs = ({ doEncode, doDecode } as generatorSettings, rowFields, unboxed) => { - let encoder = - doEncode ? - List.map(generateEncoderCase(generatorSettings, unboxed), rowFields) - |> Exp.match([%expr v]) - |> Exp.fun_(Asttypes.Nolabel, None, [%pat? v]) - |> BatOption.some - : None; - - let decoderDefaultCase = { - pc_lhs: [%pat? _], - pc_guard: None, - pc_rhs: [%expr Decco.error("Invalid polyvariant constructor", Belt.Array.getExn(jsonArr, 0))] - }; - - let decoder = !doDecode - ? None - : unboxed - ? generateUnboxedDecode(generatorSettings, List.hd(rowFields)) - : { - let decoderSwitch = - rowFields - |> List.map(generateDecoderCase(generatorSettings)) - |> (l) => l @ [ decoderDefaultCase ] - |> Exp.match([%expr Belt.Array.getExn(tagged, 0)]); - - Some([%expr (v) => - switch (Js.Json.classify(v)) { - | Js.Json.JSONArray([||]) => - Decco.error("Expected polyvariant, found empty array", v) - - | Js.Json.JSONArray(jsonArr) => { - let tagged = Js.Array.map(Js.Json.classify, jsonArr); - [%e decoderSwitch] - } - - | _ => Decco.error("Not a polyvariant", v) - } - ]); - }; - - (encoder, decoder); -}; diff --git a/ppx_src/src/Ppx_decco.ml b/ppx_src/src/Ppx_decco.ml new file mode 100644 index 0000000..9b1793d --- /dev/null +++ b/ppx_src/src/Ppx_decco.ml @@ -0,0 +1,13 @@ +open Ppxlib +class mapper = + object (self) + inherit Ast_traverse.map + method! signature signature = + signature |> List.map (Signature.mapSignatureItem self) |> List.concat + method! structure structure = + structure |> List.map (Structure.mapStructureItem self) |> List.concat + end +let structure_mapper s = (new mapper)#structure s +let signature_mapper s = (new mapper)#signature s;; +Ppxlib.Driver.register_transformation ~preprocess_impl:structure_mapper + ~preprocess_intf:signature_mapper "decco" diff --git a/ppx_src/src/Ppx_decco.re b/ppx_src/src/Ppx_decco.re deleted file mode 100644 index e3bb0bf..0000000 --- a/ppx_src/src/Ppx_decco.re +++ /dev/null @@ -1,26 +0,0 @@ -open Ppxlib; - - -class mapper = { - as self; - inherit class Ast_traverse.map; - pub! signature = signature => { - signature - |> List.map(Signature.mapSignatureItem(self)) - |> List.concat; - }; - pub! structure = structure => { - structure - |> List.map(Structure.mapStructureItem(self)) - |> List.concat; - }; -}; - -let structure_mapper = s => (new mapper)#structure(s); -let signature_mapper = s => (new mapper)#signature(s); - -Ppxlib.Driver.register_transformation( - ~preprocess_impl=structure_mapper, - ~preprocess_intf=signature_mapper, - "decco", -); diff --git a/ppx_src/src/Records.ml b/ppx_src/src/Records.ml new file mode 100644 index 0000000..1900ce9 --- /dev/null +++ b/ppx_src/src/Records.ml @@ -0,0 +1,132 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils + +type parsedDecl = { + name: string; + key: expression; + field: expression; + codecs: expression option * expression option; + default: expression option; +} + +let generateEncoder decls unboxed = + match unboxed with + | true -> + let {codecs; field} = List.hd decls in + let e, _ = codecs in + Utils.wrapFunctionExpressionForUncurrying ~arity:1 + [%expr fun v -> [%e BatOption.get e] [%e field]] + | false -> + let arrExpr = + decls + |> List.map (fun {key; field; codecs = encoder, _} -> + [%expr [%e key], [%e BatOption.get encoder] [%e field]]) + |> Exp.array + in + [%expr Js.Json.object_ (Js.Dict.fromArray [%e arrExpr])] + |> Exp.fun_ Asttypes.Nolabel None [%pat? v] + +let generateDictGet {key; codecs = _, decoder; default} = + let decoder = BatOption.get decoder in + match default with + | Some default -> + [%expr + ((Js.Dict.get dict [%e key] |. Belt.Option.map) [%e decoder] + |. Belt.Option.getWithDefault) + (Belt.Result.Ok [%e default])] + | None -> + [%expr + (Js.Dict.get dict [%e key] |. Belt.Option.getWithDefault) Js.Json.null + |> [%e decoder]] + +let generateDictGets decls = + decls |> List.map generateDictGet |> tupleOrSingleton Exp.tuple + +let generateErrorCase {key} = + { + pc_lhs = [%pat? Belt.Result.Error (e : Decco.decodeError)]; + pc_guard = None; + pc_rhs = [%expr Belt.Result.Error {e with path = "." ^ [%e key] ^ e.path}]; + } + +let generateFinalRecordExpr decls = + decls |> List.map (fun {name} -> (lid name, makeIdentExpr name)) |> fun l -> + [%expr Belt.Result.Ok [%e Exp.record l None]] + +let generateSuccessCase {name} successExpr = + { + pc_lhs = (mknoloc name |> Pat.var |> fun p -> [%pat? Belt.Result.Ok [%p p]]); + pc_guard = None; + pc_rhs = successExpr; + } + +let rec generateNestedSwitchesRecurse allDecls remainingDecls = + let current, successExpr = + match remainingDecls with + | [] -> failwith "Decco internal error: [] not expected" + | last :: [] -> (last, generateFinalRecordExpr allDecls) + | first :: tail -> (first, generateNestedSwitchesRecurse allDecls tail) + in + [generateErrorCase current] + |> List.append [generateSuccessCase current successExpr] + |> Exp.match_ (generateDictGet current) +[@@ocaml.doc + " Recursively generates an expression containing nested switches, first\n\ + \ * decoding the first record items, then (if successful) the second, etc. "] + +let generateNestedSwitches decls = generateNestedSwitchesRecurse decls decls + +let generateDecoder decls unboxed = + match unboxed with + | true -> + let {codecs; name} = List.hd decls in + let _, d = codecs in + let recordExpr = + [(lid name, makeIdentExpr "v")] |> fun __x -> Exp.record __x None + in + [%expr + fun v -> + ([%e BatOption.get d] v |. Belt.Result.map) (fun v -> [%e recordExpr])] + | false -> + [%expr + fun v -> + match Js.Json.classify v with + | ((Js.Json.JSONObject dict) [@explicit_arity]) -> + [%e generateNestedSwitches decls] + | _ -> Decco.error "Not an object" v] + +let parseDecl generatorSettings + {pld_name = {txt}; pld_loc; pld_type; pld_attributes} = + let default = + match getAttributeByName pld_attributes "decco.default" with + | ((Ok ((Some attribute) [@explicit_arity])) [@explicit_arity]) -> + Some (getExpressionFromPayload attribute) [@explicit_arity] + | ((Ok None) [@explicit_arity]) -> None + | ((Error s) [@explicit_arity]) -> fail pld_loc s + in + let key = + match getAttributeByName pld_attributes "decco.key" with + | ((Ok ((Some attribute) [@explicit_arity])) [@explicit_arity]) -> + getExpressionFromPayload attribute + | ((Ok None) [@explicit_arity]) -> + Exp.constant (Pconst_string (txt, Location.none, None) [@explicit_arity]) + | ((Error s) [@explicit_arity]) -> fail pld_loc s + in + { + name = txt; + key; + field = Exp.field [%expr v] (lid txt); + codecs = Codecs.generateCodecs generatorSettings pld_type; + default; + } + +let generateCodecs ({doEncode; doDecode} as generatorSettings) decls unboxed = + let parsedDecls = List.map (parseDecl generatorSettings) decls in + ( (match doEncode with + | true -> Some (generateEncoder parsedDecls unboxed) [@explicit_arity] + | false -> None), + match doDecode with + | true -> Some (generateDecoder parsedDecls unboxed) [@explicit_arity] + | false -> None ) diff --git a/ppx_src/src/Records.re b/ppx_src/src/Records.re deleted file mode 100644 index 62d680e..0000000 --- a/ppx_src/src/Records.re +++ /dev/null @@ -1,141 +0,0 @@ -open Ppxlib -open Parsetree; -open Ast_helper; -open Utils; - -type parsedDecl = { - name: string, - key: expression, /* "NAME" */ - field: expression, /* v.NAME */ - codecs: (option(expression), option(expression)), - default: option(expression) -}; - -let generateEncoder = (decls, unboxed) => { - unboxed - ? { - let { codecs, field } = List.hd(decls); - let (e, _) = codecs; - [%expr (v) => [%e BatOption.get(e)]([%e field])] - } : { - let arrExpr = - decls - |> List.map(({ key, field, codecs: (encoder, _) }) => - [%expr ([%e key], [%e BatOption.get(encoder)]([%e field]))] - ) - |> Exp.array; - [%expr [%e arrExpr] |> Js.Dict.fromArray |> Js.Json.object_] - |> Exp.fun_(Asttypes.Nolabel, None, [%pat? v]) - } -}; - -let generateDictGet = ({ key, codecs: (_, decoder), default }) => { - let decoder = BatOption.get(decoder); - switch default { - | Some(default) => [%expr - Js.Dict.get(dict, [%e key]) - -> Belt.Option.map([%e decoder]) - -> Belt.Option.getWithDefault(Belt.Result.Ok([%e default])) - ]; - - | None => [%expr - Js.Dict.get(dict, [%e key]) - -> Belt.Option.getWithDefault(Js.Json.null) - |> [%e decoder] - ]; - }; -}; - -let generateDictGets = (decls) => decls - |> List.map(generateDictGet) - |> tupleOrSingleton(Exp.tuple); - -let generateErrorCase = ({ key }) => { - pc_lhs: [%pat? Belt.Result.Error(e : Decco.decodeError)], - pc_guard: None, - pc_rhs: [%expr Belt.Result.Error({ ...e, path: "." ++ [%e key] ++ e.path })] -}; - -let generateFinalRecordExpr = (decls) => - decls - |> List.map(({ name }) => (lid(name), makeIdentExpr(name))) - |> (l) => [%expr Belt.Result.Ok([%e Exp.record(l, None)])]; - -let generateSuccessCase = ({ name }, successExpr) => { - pc_lhs: - mknoloc(name) - |> Pat.var - |> (p) => [%pat? Belt.Result.Ok([%p p])], - pc_guard: None, - pc_rhs: successExpr -}; - -/** Recursively generates an expression containing nested switches, first - * decoding the first record items, then (if successful) the second, etc. */ -let rec generateNestedSwitchesRecurse = (allDecls, remainingDecls) => { - let (current, successExpr) = switch remainingDecls { - | [] => failwith("Decco internal error: [] not expected") - | [last, ...[]] => (last, generateFinalRecordExpr(allDecls)) - | [first, ...tail] => (first, generateNestedSwitchesRecurse(allDecls, tail)) - }; - - [generateErrorCase(current)] - |> List.append([generateSuccessCase(current, successExpr)]) - |> Exp.match(generateDictGet(current)); -}; - -let generateNestedSwitches = (decls) => generateNestedSwitchesRecurse(decls, decls); - -let generateDecoder = (decls, unboxed) => { - unboxed - ? { - let { codecs, name } = List.hd(decls); - let (_, d) = codecs; - - let recordExpr = - [(lid(name), makeIdentExpr("v"))] - |> Exp.record(_, None); - - [%expr (v) => - [%e BatOption.get(d)](v) - -> Belt.Result.map(v => [%e recordExpr]) - ] - } : - [%expr (v) => - switch (Js.Json.classify(v)) { - | Js.Json.JSONObject(dict) => [%e generateNestedSwitches(decls)] - | _ => Decco.error("Not an object", v) - } - ] -}; - -let parseDecl = (generatorSettings, { pld_name: { txt }, pld_loc, pld_type, pld_attributes }) => { - /* If a key is missing from the record on decode, the default (if specified) will be used */ - let default = switch (getAttributeByName(pld_attributes, "decco.default")) { - | Ok(Some(attribute)) => Some(getExpressionFromPayload(attribute)) - | Ok(None) => None - | Error(s) => fail(pld_loc, s) - }; - - let key = switch (getAttributeByName(pld_attributes, "decco.key")) { - | Ok(Some(attribute)) => getExpressionFromPayload(attribute) - | Ok(None) => Exp.constant(Pconst_string(txt, Location.none, None)) - | Error(s) => fail(pld_loc, s) - }; - - { - name: txt, - key, - field: Exp.field([%expr v], lid(txt)), - codecs: Codecs.generateCodecs(generatorSettings, pld_type), - default - }; -}; - -let generateCodecs = ({ doEncode, doDecode } as generatorSettings, decls, unboxed) => { - let parsedDecls = List.map(parseDecl(generatorSettings), decls); - ( - doEncode ? Some(generateEncoder(parsedDecls, unboxed)) : None, - doDecode ? Some(generateDecoder(parsedDecls, unboxed)) : None - ) -}; diff --git a/ppx_src/src/Signature.ml b/ppx_src/src/Signature.ml new file mode 100644 index 0000000..614fd66 --- /dev/null +++ b/ppx_src/src/Signature.ml @@ -0,0 +1,77 @@ +open Ppxlib +open Parsetree +open Utils + +let rec addEncoderParams paramNames resultType = + match paramNames with + | [] -> resultType + | hd :: tl -> + [%type: ([%t Ast_helper.Typ.var hd] -> Js.Json.t) -> [%t resultType]] + |> addEncoderParams tl + +let makeResultType valueType = + [%type: ([%t valueType], Decco.decodeError) Belt.Result.t] + +let rec addDecoderParams paramNames resultType = + match paramNames with + | [] -> resultType + | hd :: tl -> + let decoderParam = + [%type: Js.Json.t -> [%t makeResultType (Ast_helper.Typ.var hd)]] + in + [%type: [%t decoderParam] -> [%t resultType]] |> addDecoderParams tl + +let generateSigDecls {doEncode; doDecode} typeName paramNames = + let encoderPat = typeName ^ Utils.encoderFuncSuffix in + let decoderPat = typeName ^ Utils.decoderFuncSuffix in + let valueType = + paramNames + |> List.map Ast_helper.Typ.var + |> Ast_helper.Typ.constr (lid typeName) + in + let decls = [] in + let encoderDecls = + match doEncode with + | true -> + [ + Utils.wrapFunctionTypeSignatureForUncurrying + ~arity:(List.length paramNames + 1) + ([%type: [%t valueType] -> Js.Json.t] + |> addEncoderParams (List.rev paramNames)) + |> Ast_helper.Val.mk (mknoloc encoderPat) + |> Ast_helper.Sig.value; + ] + | false -> [] + in + let decoderDecls = + match doDecode with + | true -> + [ + Utils.wrapFunctionTypeSignatureForUncurrying + ~arity:(List.length paramNames + 1) + ([%type: Js.Json.t -> [%t makeResultType valueType]] + |> addDecoderParams (List.rev paramNames)) + |> Ast_helper.Val.mk (mknoloc decoderPat) + |> Ast_helper.Sig.value; + ] + | false -> [] + in + List.concat [decls; encoderDecls; decoderDecls] + +let mapTypeDecl decl = + let {ptype_attributes; ptype_name = {txt = typeName}; ptype_params; ptype_loc} + = + decl + in + match getGeneratorSettingsFromAttributes ptype_attributes with + | Error s -> fail ptype_loc s + | Ok None -> [] + | Ok (Some generatorSettings) -> + generateSigDecls generatorSettings typeName (getParamNames ptype_params) + +let mapSignatureItem mapper ({psig_desc} as signatureItem) = + match psig_desc with + | ((Psig_type (_, decls)) [@explicit_arity]) -> + let generatedSigItems = decls |> List.map mapTypeDecl |> List.concat in + mapper#signature_item signatureItem :: generatedSigItems + | _ -> [mapper#signature_item signatureItem] \ No newline at end of file diff --git a/ppx_src/src/Signature.re b/ppx_src/src/Signature.re deleted file mode 100644 index 989ef37..0000000 --- a/ppx_src/src/Signature.re +++ /dev/null @@ -1,81 +0,0 @@ -open Ppxlib; -open Parsetree; -open Utils; - -let rec addEncoderParams = (paramNames, resultType) => - switch paramNames { - | [] => resultType - | [ hd, ...tl ] => - [%type: ([%t Ast_helper.Typ.var(hd)] => Js.Json.t) => [%t resultType]] - |> addEncoderParams(tl) - }; - -let makeResultType = (valueType) => - [%type: Belt.Result.t([%t valueType], Decco.decodeError)]; - -let rec addDecoderParams = (paramNames, resultType) => - switch paramNames { - | [] => resultType - | [ hd, ...tl ] => { - let decoderParam = [%type: (Js.Json.t => [%t makeResultType(Ast_helper.Typ.var(hd))])]; - [%type: [%t decoderParam] => [%t resultType]] - |> addDecoderParams(tl) - } - }; - -let generateSigDecls = ({ doEncode, doDecode }, typeName, paramNames) => { - let encoderPat = typeName ++ Utils.encoderFuncSuffix; - let decoderPat = typeName ++ Utils.decoderFuncSuffix; - - let valueType = paramNames - |> List.map(Ast_helper.Typ.var) - |> Ast_helper.Typ.constr(lid(typeName)); - - let decls = []; - - let decls = - doEncode ? - decls @ - [[%type: [%t valueType] => Js.Json.t] - |> addEncoderParams(List.rev(paramNames)) - |> Ast_helper.Val.mk(mknoloc(encoderPat)) - |> Ast_helper.Sig.value] - : decls; - - let decls = - doDecode ? - decls @ - [[%type: Js.Json.t => [%t makeResultType(valueType)]] - |> addDecoderParams(List.rev(paramNames)) - |> Ast_helper.Val.mk(mknoloc(decoderPat)) - |> Ast_helper.Sig.value] - : decls; - - decls; -}; - -let mapTypeDecl = (decl) => { - let { ptype_attributes, ptype_name: { txt: typeName }, - ptype_params, ptype_loc } = decl; - - switch (getGeneratorSettingsFromAttributes(ptype_attributes)) { - | Error(s) => fail(ptype_loc, s) - | Ok(None) => [] - | Ok(Some(generatorSettings)) => - generateSigDecls(generatorSettings, typeName, getParamNames(ptype_params)) - }; -}; - -let mapSignatureItem = (mapper, { psig_desc } as signatureItem) => - switch psig_desc { - | Psig_type(_, decls) => { - let generatedSigItems = decls - |> List.map(mapTypeDecl) - |> List.concat; - - [ mapper#signature_item(signatureItem), - ...generatedSigItems ]; - } - - | _ => [ mapper#signature_item(signatureItem) ] - }; diff --git a/ppx_src/src/Structure.ml b/ppx_src/src/Structure.ml new file mode 100644 index 0000000..6b748b5 --- /dev/null +++ b/ppx_src/src/Structure.ml @@ -0,0 +1,109 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Codecs +open Utils + +let addParams paramNames expr = + let wholeCodecExpr = + List.fold_right + (fun s acc -> + let pat = Pat.var (mknoloc s) in + Exp.fun_ Asttypes.Nolabel None pat acc) + paramNames + [%expr fun v -> [%e expr] v] + in + let arity = List.length paramNames + 1 in + (* Set an attribute with the arity matching the param count on the + outermost invocation so that we generate a function that's uncurried, + expecting all of its arguments at once. *) + Utils.wrapFunctionExpressionForUncurrying ~arity wholeCodecExpr + +let generateCodecDecls typeName paramNames (encoder, decoder) = + let encoderPat = Pat.var (mknoloc (typeName ^ Utils.encoderFuncSuffix)) in + let encoderParamNames = List.map (fun s -> encoderVarPrefix ^ s) paramNames in + let decoderPat = Pat.var (mknoloc (typeName ^ Utils.decoderFuncSuffix)) in + let decoderParamNames = List.map (fun s -> decoderVarPrefix ^ s) paramNames in + let vbs = [] in + let vbs = + match encoder with + | None -> vbs + | ((Some encoder) [@explicit_arity]) -> + vbs + @ [ + Vb.mk + ~attrs:[attrWarning [%expr "-39"]] + encoderPat + (addParams encoderParamNames encoder); + ] + (* [Vb.mk encoderPat (Exp.constant (Pconst_integer ("0", None)))] *) + in + let vbs = + match decoder with + | None -> vbs + | ((Some decoder) [@explicit_arity]) -> + vbs + @ [ + Vb.mk + ~attrs:[attrWarning [%expr "-4"]; attrWarning [%expr "-39"]] + decoderPat + (addParams decoderParamNames decoder); + ] + in + vbs + +let mapTypeDecl decl = + let { + ptype_attributes; + ptype_name = {txt = typeName}; + ptype_manifest; + ptype_params; + ptype_loc; + ptype_kind; + } = + decl + in + let isUnboxed = + match Utils.getAttributeByName ptype_attributes "unboxed" with + | ((Ok (Some _)) [@explicit_arity]) -> true + | _ -> false + in + match getGeneratorSettingsFromAttributes ptype_attributes with + | ((Ok None) [@explicit_arity]) -> [] + | ((Ok ((Some generatorSettings) [@explicit_arity])) [@explicit_arity]) -> ( + match (ptype_manifest, ptype_kind) with + | None, Ptype_abstract -> + fail ptype_loc "Can't generate codecs for unspecified type" + | ( ((Some + {ptyp_desc = ((Ptyp_variant (rowFields, _, _)) [@explicit_arity])}) + [@explicit_arity]), + Ptype_abstract ) -> + let rowFieldsDec = List.map (fun row -> row.prf_desc) rowFields in + generateCodecDecls typeName + (getParamNames ptype_params) + (Polyvariants.generateCodecs generatorSettings rowFieldsDec isUnboxed) + | ((Some manifest) [@explicit_arity]), _ -> + generateCodecDecls typeName + (getParamNames ptype_params) + (generateCodecs generatorSettings manifest) + | None, ((Ptype_variant decls) [@explicit_arity]) -> + generateCodecDecls typeName + (getParamNames ptype_params) + (Variants.generateCodecs generatorSettings decls isUnboxed) + | None, ((Ptype_record decls) [@explicit_arity]) -> + generateCodecDecls typeName + (getParamNames ptype_params) + (Records.generateCodecs generatorSettings decls isUnboxed) + | _ -> fail ptype_loc "This type is not handled by decco") + | ((Error s) [@explicit_arity]) -> fail ptype_loc s + +let mapStructureItem mapper ({pstr_desc} as structureItem) = + match pstr_desc with + | ((Pstr_type (recFlag, decls)) [@explicit_arity]) -> ( + let valueBindings = decls |> List.map mapTypeDecl |> List.concat in + [mapper#structure_item structureItem] + @ + match List.length valueBindings > 0 with + | true -> [Str.value recFlag valueBindings] + | false -> []) + | _ -> [mapper#structure_item structureItem] \ No newline at end of file diff --git a/ppx_src/src/Structure.re b/ppx_src/src/Structure.re deleted file mode 100644 index 7441dca..0000000 --- a/ppx_src/src/Structure.re +++ /dev/null @@ -1,102 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; -open Codecs; -open Utils; - -let addParams = (paramNames, expr) => - List.fold_right((s, acc) => { - let pat = Pat.var(mknoloc(s)); - Exp.fun_(Asttypes.Nolabel, None, pat, acc); - }, paramNames, [%expr (v) => [%e expr](v)]); - -let generateCodecDecls = (typeName, paramNames, (encoder, decoder)) => { - let encoderPat = Pat.var(mknoloc(typeName ++ Utils.encoderFuncSuffix)); - let encoderParamNames = List.map(s => encoderVarPrefix ++ s, paramNames); - - let decoderPat = Pat.var(mknoloc(typeName ++ Utils.decoderFuncSuffix)); - let decoderParamNames = List.map(s => decoderVarPrefix ++ s, paramNames); - - let vbs = []; - - let vbs = switch encoder { - | None => vbs - | Some(encoder) => - vbs - @ [ - Vb.mk( - ~attrs=[attrWarning([%expr "-39"])], - encoderPat, - addParams(encoderParamNames, encoder) - ) - ] - }; - - let vbs = switch decoder { - | None => vbs - | Some(decoder) => - vbs - @ [ - Vb.mk( - ~attrs=[attrWarning([%expr "-4"]), attrWarning([%expr "-39"])], - decoderPat, - addParams(decoderParamNames, decoder), - ), - ] - }; - - vbs; -}; - -let mapTypeDecl = (decl) => { - let { ptype_attributes, ptype_name: { txt: typeName }, - ptype_manifest, ptype_params, ptype_loc, ptype_kind } = decl; - - let isUnboxed = switch (Utils.getAttributeByName(ptype_attributes, "unboxed")) { - | Ok(Some(_)) => true - | _ => false - }; - - switch (getGeneratorSettingsFromAttributes(ptype_attributes)) { - | Ok(None) => [] - | Ok(Some(generatorSettings)) => switch (ptype_manifest, ptype_kind) { - | (None, Ptype_abstract) => fail(ptype_loc, "Can't generate codecs for unspecified type") - | (Some({ ptyp_desc: Ptyp_variant(rowFields, _, _) }), Ptype_abstract) => { - let rowFieldsDec = List.map((row => row.prf_desc), rowFields); - generateCodecDecls( - typeName, getParamNames(ptype_params), - Polyvariants.generateCodecs(generatorSettings, rowFieldsDec, isUnboxed) - )} - | (Some(manifest), _) => generateCodecDecls( - typeName, getParamNames(ptype_params), - generateCodecs(generatorSettings, manifest) - ) - | (None, Ptype_variant(decls)) => generateCodecDecls( - typeName, getParamNames(ptype_params), - Variants.generateCodecs(generatorSettings, decls, isUnboxed) - ) - | (None, Ptype_record(decls)) => generateCodecDecls( - typeName, getParamNames(ptype_params), - Records.generateCodecs(generatorSettings, decls, isUnboxed) - ) - | _ => fail(ptype_loc, "This type is not handled by decco") - } - | Error(s) => fail(ptype_loc, s) - }; -}; - -let mapStructureItem = (mapper, { pstr_desc } as structureItem) => - switch pstr_desc { - | Pstr_type(recFlag, decls) => { - let valueBindings = decls - |> List.map(mapTypeDecl) - |> List.concat; - - [ mapper#structure_item(structureItem)] - @ (List.length(valueBindings) > 0 ? - [ Str.value(recFlag, valueBindings) ] - : []); - } - - | _ => [ mapper#structure_item(structureItem) ] - }; diff --git a/ppx_src/src/Tuple.ml b/ppx_src/src/Tuple.ml new file mode 100644 index 0000000..e66f105 --- /dev/null +++ b/ppx_src/src/Tuple.ml @@ -0,0 +1,64 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils +let generateEncoder compositeEncoders = + let arrExp = + compositeEncoders + |> List.mapi (fun i e -> + let vExp = Exp.ident (lid ("v" ^ string_of_int i)) in + [%expr [%e e] [%e vExp]]) + |> Exp.array + in + let deconstructorPattern = + compositeEncoders + |> List.mapi (fun i _ -> Pat.var (mknoloc ("v" ^ string_of_int i))) + |> Pat.tuple + in + Utils.wrapFunctionExpressionForUncurrying ~arity:1 + [%expr fun [%p deconstructorPattern] -> Js.Json.array [%e arrExp]] +let generateDecodeSuccessCase numArgs = + { + pc_lhs = + Array.init numArgs (fun i -> + mknoloc ("v" ^ string_of_int i) |> Pat.var |> fun p -> + [%pat? Belt.Result.Ok [%p p]]) + |> Array.to_list |> tupleOrSingleton Pat.tuple; + pc_guard = None; + pc_rhs = + ( Array.init numArgs (fun i -> makeIdentExpr ("v" ^ string_of_int i)) + |> Array.to_list |> Exp.tuple + |> fun e -> [%expr Belt.Result.Ok [%e e]] ); + } + +let generateDecodeSwitch compositeDecoders = + let decodeExpr = + compositeDecoders + |> List.mapi (fun i d -> + let ident = makeIdentExpr ("v" ^ string_of_int i) in + [%expr [%e d] [%e ident]]) + |> Exp.tuple + in + compositeDecoders + |> List.mapi (DecodeCases.generateErrorCase (List.length compositeDecoders)) + |> List.append [generateDecodeSuccessCase (List.length compositeDecoders)] + |> Exp.match_ decodeExpr +let generateDecoder compositeDecoders = + let matchArrPattern = + compositeDecoders + |> List.mapi (fun i _ -> Pat.var (mknoloc ("v" ^ string_of_int i))) + |> Pat.array + in + let matchPattern = [%pat? Js.Json.JSONArray [%p matchArrPattern]] in + let outerSwitch = + Exp.match_ [%expr Js.Json.classify json] + [ + Exp.case matchPattern (generateDecodeSwitch compositeDecoders); + Exp.case + [%pat? Js.Json.JSONArray _] + [%expr Decco.error "Incorrect cardinality" json]; + Exp.case [%pat? _] [%expr Decco.error "Not a tuple" json]; + ] + in + Utils.wrapFunctionExpressionForUncurrying ~arity:1 + [%expr fun json -> [%e outerSwitch]] diff --git a/ppx_src/src/Tuple.re b/ppx_src/src/Tuple.re deleted file mode 100644 index 455d360..0000000 --- a/ppx_src/src/Tuple.re +++ /dev/null @@ -1,66 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; -open Utils; - -let generateEncoder = (compositeEncoders) => { - let arrExp = compositeEncoders - |> List.mapi((i, e) => { - let vExp = Exp.ident(lid("v" ++ string_of_int(i))); - [%expr [%e e]([%e vExp])]; - }) - |> Exp.array; - - let deconstructorPattern = compositeEncoders - |> List.mapi((i, _) => Pat.var(mknoloc("v" ++ string_of_int(i)))) - |> Pat.tuple; - - [%expr ([%p deconstructorPattern]) => [%e arrExp] |> Js.Json.array]; -}; - -let generateDecodeSuccessCase = (numArgs) => { - pc_lhs: - Array.init(numArgs, i => - mknoloc("v" ++ string_of_int(i)) - |> Pat.var - |> (p) => [%pat? Belt.Result.Ok([%p p])] - ) - |> Array.to_list - |> tupleOrSingleton(Pat.tuple), - pc_guard: None, - pc_rhs: - Array.init(numArgs, i => makeIdentExpr("v" ++ string_of_int(i))) - |> Array.to_list - |> Exp.tuple - |> (e) => [%expr Belt.Result.Ok([%e e])] -}; - -let generateDecodeSwitch = (compositeDecoders) => { - let decodeExpr = compositeDecoders - |> List.mapi((i, d) => { - let ident = makeIdentExpr("v" ++ string_of_int(i)); - [%expr [%e d]([%e ident])]; - }) - |> Exp.tuple; - - compositeDecoders - |> List.mapi(DecodeCases.generateErrorCase(List.length(compositeDecoders))) - |> List.append([generateDecodeSuccessCase(List.length(compositeDecoders))]) - |> Exp.match(decodeExpr); -}; - -let generateDecoder = (compositeDecoders) => { - let matchArrPattern = compositeDecoders - |> List.mapi((i, _) => Pat.var(mknoloc("v" ++ string_of_int(i)))) - |> Pat.array; - - let matchPattern = [%pat? Js.Json.JSONArray([%p matchArrPattern])]; - - let outerSwitch = Exp.match([%expr Js.Json.classify(json)], [ - Exp.case(matchPattern, generateDecodeSwitch(compositeDecoders)), - Exp.case([%pat? Js.Json.JSONArray(_)], [%expr Decco.error("Incorrect cardinality", json)]), - Exp.case([%pat? _], [%expr Decco.error("Not a tuple", json)]) - ]); - - [%expr (json) => [%e outerSwitch]]; -}; diff --git a/ppx_src/src/Utils.ml b/ppx_src/src/Utils.ml new file mode 100644 index 0000000..bc489bf --- /dev/null +++ b/ppx_src/src/Utils.ml @@ -0,0 +1,145 @@ +open Ppxlib +open Parsetree +open Ast_helper + +let annotationName = "decco" +let encoderFuncSuffix = "_encode" +let decoderFuncSuffix = "_decode" +let encoderVarPrefix = "encoder_" +let decoderVarPrefix = "decoder_" + +let loc = !default_loc + +let fail loc message = Location.raise_errorf ~loc "%s" message + +let longidentParse = Longident.parse [@@ocaml.warning "-3"] + +let mkloc txt loc = {Location.txt; loc} + +let mknoloc txt = mkloc txt Location.none + +let lid ?(loc = Location.none) s = mkloc (Longident.parse s) loc + +let makeIdentExpr s = Exp.ident (mknoloc (longidentParse s)) + +let tupleOrSingleton tuple l = + match List.length l > 1 with + | true -> tuple l + | false -> List.hd l + +let getAttributeByName attributes name = + let filtered = + attributes |> List.filter (fun {attr_name = {Location.txt}} -> txt = name) + in + match filtered with + | [] -> Ok None [@explicit_arity] + | attribute :: [] -> Ok (Some attribute [@explicit_arity]) [@explicit_arity] + | _ -> + Error ("Too many occurrences of \"" ^ name ^ "\" attribute") + [@explicit_arity] + +type generatorSettings = {doEncode: bool; doDecode: bool} + +let getGeneratorSettingsFromAttributes attributes = + match getAttributeByName attributes annotationName with + | ((Ok None) [@explicit_arity]) -> ( + match + ( getAttributeByName attributes (annotationName ^ ".decode"), + getAttributeByName attributes (annotationName ^ ".encode") ) + with + | ((Ok (Some _)) [@explicit_arity]), ((Ok (Some _)) [@explicit_arity]) -> + Ok (Some {doEncode = true; doDecode = true} [@explicit_arity]) + [@explicit_arity] + | ((Ok (Some _)) [@explicit_arity]), ((Ok None) [@explicit_arity]) -> + Ok (Some {doEncode = false; doDecode = true} [@explicit_arity]) + [@explicit_arity] + | ((Ok None) [@explicit_arity]), ((Ok (Some _)) [@explicit_arity]) -> + Ok (Some {doEncode = true; doDecode = false} [@explicit_arity]) + [@explicit_arity] + | ((Ok None) [@explicit_arity]), ((Ok None) [@explicit_arity]) -> + Ok None [@explicit_arity] + | (Error _ as e), _ -> e + | _, (Error _ as e) -> e) + | ((Ok (Some _)) [@explicit_arity]) -> + Ok (Some {doEncode = true; doDecode = true} [@explicit_arity]) + [@explicit_arity] + | Error _ as e -> e + +let getExpressionFromPayload {attr_name = {loc}; attr_payload = payload} = + match payload with + | ((PStr ({pstr_desc} :: [])) [@explicit_arity]) -> ( + match pstr_desc with + | ((Pstr_eval (expr, _)) [@explicit_arity]) -> expr + | _ -> fail loc "Expected expression as attribute payload") + | _ -> fail loc "Expected expression as attribute payload" + +let getParamNames params = + params + |> List.map (fun ({ptyp_desc; ptyp_loc}, _) -> + match ptyp_desc with + | ((Ptyp_var s) [@explicit_arity]) -> s + | _ -> + fail ptyp_loc "Unhandled param type" |> fun v -> + (Location.Error v [@explicit_arity]) |> raise) + +let indexConst i = + (Pconst_string ("[" ^ string_of_int i ^ "]", Location.none, None) + [@explicit_arity]) + |> Exp.constant + +let rec isIdentifierUsedInCoreType typeName {ptyp_desc; ptyp_loc} = + match ptyp_desc with + | ((Ptyp_arrow (_, _, _)) [@explicit_arity]) -> + fail ptyp_loc "Can't generate codecs for function type" + | Ptyp_any -> fail ptyp_loc "Can't generate codecs for `any` type" + | Ptyp_package _ -> fail ptyp_loc "Can't generate codecs for module type" + | ((Ptyp_variant (_, _, _)) [@explicit_arity]) -> + fail ptyp_loc "Unexpected Ptyp_variant" + | Ptyp_var _ -> false + | ((Ptyp_tuple childTypes) [@explicit_arity]) -> + List.exists (isIdentifierUsedInCoreType typeName) childTypes + | ((Ptyp_constr ({txt}, childTypes)) [@explicit_arity]) -> ( + match txt = (Lident typeName [@explicit_arity]) with + | true -> true + | false -> List.exists (isIdentifierUsedInCoreType typeName) childTypes) + | _ -> fail ptyp_loc "This syntax is not yet handled by decco" + +let attrWarning expr = + { + attr_name = mkloc "ocaml.warning" loc; + attr_payload = + PStr + [{pstr_desc = Pstr_eval (expr, []) [@explicit_arity]; pstr_loc = loc}] + [@explicit_arity]; + attr_loc = loc; + } + +(* The following functions come from https://github.com/green-labs/ppx_spice/pull/49/files#diff-25e55eeac0911adb8041a5ee5c0a5fb5291bc174eea8711c3694c51bf6a219aaR127 + And are also under the MIT license, Copyright (c) 2021 Greenlabs *) + +let attr_uapp : Ppxlib.Parsetree.attribute = + { + attr_name = {txt = "res.uapp"; loc = Location.none}; + attr_payload = PStr []; + attr_loc = Location.none; + } + +let wrapFunctionExpressionForUncurrying ?(loc = Location.none) ~arity e = + let attr_arity = + Attr.mk {txt = "res.arity"; loc} + (PStr [Str.eval (Exp.constant (Const.int arity))]) + in + Exp.construct ~attrs:[attr_arity] {txt = Lident "Function$"; loc} (Some e) + +let wrapFunctionTypeSignatureForUncurrying ?(loc = Location.none) ~arity + typeExpression = + let arityType : core_type = + Ast_helper.Typ.variant + [Ast_helper.Rf.tag {txt = "Has_arity" ^ string_of_int arity; loc} true []] + Closed None + in + Ast_helper.Typ.constr (lid "function$") [typeExpression; arityType] + +let print_strings strings = + let formatted = String.concat "; " strings in + Printf.printf "[%s]\n" formatted diff --git a/ppx_src/src/Utils.re b/ppx_src/src/Utils.re deleted file mode 100644 index b18f709..0000000 --- a/ppx_src/src/Utils.re +++ /dev/null @@ -1,110 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; - -let annotationName = "decco"; -let encoderFuncSuffix = "_encode"; -let decoderFuncSuffix = "_decode"; -let encoderVarPrefix = "encoder_"; -let decoderVarPrefix = "decoder_"; - -let loc = default_loc^; - -let fail = (loc, message) => Location.raise_errorf(~loc, "%s", message); - -[@ocaml.warning("-3")] let longidentParse = Longident.parse - -let mkloc = (txt, loc) => { - {Location.txt, loc}; -}; -let mknoloc = txt => { - mkloc(txt, Location.none); -}; - -let lid = (~loc=Location.none, s) => - mkloc(Longident.parse (s), loc) - -let makeIdentExpr = (s) => - Exp.ident(mknoloc(longidentParse(s))); - -let tupleOrSingleton = (tuple, l) => - List.length(l) > 1 ? tuple(l) : List.hd(l); - -let getAttributeByName = (attributes, name) => { - let filtered = attributes - |> List.filter(({attr_name: { Location.txt }}) => txt == name); - - switch filtered { - | [] => Ok(None) - | [attribute] => Ok(Some(attribute)) - | _ => Error("Too many occurrences of \"" ++ name ++ "\" attribute") - }; -}; - -/* TODO: make this not suck */ -type generatorSettings = { doEncode: bool, doDecode: bool }; -let getGeneratorSettingsFromAttributes = (attributes) => - switch (getAttributeByName(attributes, annotationName)) { - | Ok(None) => - switch (( - getAttributeByName(attributes, annotationName ++ ".decode"), - getAttributeByName(attributes, annotationName ++ ".encode"))) - { - | (Ok(Some(_)), Ok(Some(_))) => Ok(Some({ doEncode: true, doDecode: true })) - | (Ok(Some(_)), Ok(None)) => Ok(Some({ doEncode: false, doDecode: true })) - | (Ok(None), Ok(Some(_))) => Ok(Some({ doEncode: true, doDecode: false })) - | (Ok(None), Ok(None)) => Ok(None) - | (Error(_) as e, _) => e - | (_, Error(_) as e) => e - } - | Ok(Some(_)) => Ok(Some({ doEncode: true, doDecode: true })) - | Error(_) as e => e - }; - -let getExpressionFromPayload = ({ attr_name: { loc }, attr_payload: payload }) => - switch payload { - | PStr([{ pstr_desc }]) => switch pstr_desc { - | Pstr_eval(expr, _) => expr - | _ => fail(loc, "Expected expression as attribute payload") - }; - | _ => fail(loc, "Expected expression as attribute payload") - }; - -let getParamNames = (params) => - params - |> List.map((({ ptyp_desc, ptyp_loc }, _)) => - switch ptyp_desc { - | Ptyp_var(s) => s - | _ => fail(ptyp_loc, "Unhandled param type") - |> (v) => Location.Error(v) - |> raise - } - ); - -let indexConst = (i) => - Pconst_string("[" ++ string_of_int(i) ++ "]", Location.none, None) - |> Exp.constant; - -let rec isIdentifierUsedInCoreType = (typeName, {ptyp_desc, ptyp_loc}) => - switch ptyp_desc { - | Ptyp_arrow(_, _, _) => fail(ptyp_loc, "Can't generate codecs for function type") - | Ptyp_any => fail(ptyp_loc, "Can't generate codecs for `any` type") - | Ptyp_package(_) => fail(ptyp_loc, "Can't generate codecs for module type") - | Ptyp_variant(_, _, _) => fail(ptyp_loc, "Unexpected Ptyp_variant") - | Ptyp_var(_) => false - | Ptyp_tuple(childTypes) => - List.exists(isIdentifierUsedInCoreType(typeName), childTypes) - | Ptyp_constr({txt}, childTypes) => - txt == Lident(typeName) - ? true - : List.exists(isIdentifierUsedInCoreType(typeName), childTypes) - | _ => fail(ptyp_loc, "This syntax is not yet handled by decco") - }; - -let attrWarning = expr => { - { - attr_name: mkloc("ocaml.warning", loc), - attr_payload: PStr([{pstr_desc: Pstr_eval(expr, []), pstr_loc: loc}]), - attr_loc: loc - }; -}; diff --git a/ppx_src/src/Variants.ml b/ppx_src/src/Variants.ml new file mode 100644 index 0000000..d650045 --- /dev/null +++ b/ppx_src/src/Variants.ml @@ -0,0 +1,180 @@ +open Ppxlib +open Parsetree +open Ast_helper +open Utils +let generateEncoderCase generatorSettings unboxed + {pcd_name = {txt = name}; pcd_args; pcd_loc} = + match pcd_args with + | ((Pcstr_tuple args) [@explicit_arity]) -> + let constructorExpr = + Exp.constant (Pconst_string (name, Location.none, None) [@explicit_arity]) + in + let lhsVars = + match args with + | [] -> None + | _ :: [] -> Some (Pat.var (mknoloc "v0")) [@explicit_arity] + | _ -> + args + |> List.mapi (fun i _ -> + mkloc ("v" ^ string_of_int i) pcd_loc |> Pat.var) + |> Pat.tuple + |> fun v -> (Some v [@explicit_arity]) + in + let rhsList = + args + |> List.map (Codecs.generateCodecs generatorSettings) + |> List.map (fun (encoder, _) -> BatOption.get encoder) + |> List.mapi (fun i e -> + Exp.apply ~loc:pcd_loc e + [(Asttypes.Nolabel, makeIdentExpr ("v" ^ string_of_int i))]) + |> List.append [[%expr Js.Json.string [%e constructorExpr]]] + in + { + pc_lhs = Pat.construct (lid name) lhsVars; + pc_guard = None; + pc_rhs = + (match unboxed with + | true -> List.tl rhsList |> List.hd + | false -> [%expr Js.Json.array [%e rhsList |> Exp.array]]); + } + | Pcstr_record _ -> fail pcd_loc "This syntax is not yet implemented by decco" + +let generateDecodeSuccessCase numArgs constructorName = + { + pc_lhs = + Array.init numArgs (fun i -> + mknoloc ("v" ^ string_of_int i) |> Pat.var |> fun p -> + [%pat? ((Belt.Result.Ok [%p p]) [@explicit_arity])]) + |> Array.to_list |> tupleOrSingleton Pat.tuple; + pc_guard = None; + pc_rhs = + ( Array.init numArgs (fun i -> makeIdentExpr ("v" ^ string_of_int i)) + |> Array.to_list |> tupleOrSingleton Exp.tuple + |> fun v -> + (Some v [@explicit_arity]) |> Exp.construct (lid constructorName) + |> fun e -> [%expr Belt.Result.Ok [%e e] [@explicit_arity]] ); + } + +let generateArgDecoder generatorSettings args constructorName = + let numArgs = List.length args in + args + |> List.mapi (DecodeCases.generateErrorCase numArgs) + |> List.append [generateDecodeSuccessCase numArgs constructorName] + |> Exp.match_ + (args + |> List.map (Codecs.generateCodecs generatorSettings) + |> List.mapi (fun i (_, decoder) -> + Exp.apply (BatOption.get decoder) + [ + ( Asttypes.Nolabel, + let idx = + (Pconst_integer (string_of_int (i + 1), None) + [@explicit_arity]) + |> Exp.constant + in + [%expr Belt.Array.getExn jsonArr [%e idx]] ); + ]) + |> tupleOrSingleton Exp.tuple) + +let generateDecoderCase generatorSettings + {pcd_name = {txt = name}; pcd_args; pcd_loc} = + match pcd_args with + | ((Pcstr_tuple args) [@explicit_arity]) -> + let argLen = + (Pconst_integer (string_of_int (List.length args + 1), None) + [@explicit_arity]) + |> Exp.constant + in + let decoded = + match args with + | [] -> + let ident = lid name in + [%expr Belt.Result.Ok [%e Exp.construct ident None] [@explicit_arity]] + | _ -> generateArgDecoder generatorSettings args name + in + { + pc_lhs = + ( (Pconst_string (name, Location.none, None) [@explicit_arity]) + |> Pat.constant + |> fun v -> + (Some v [@explicit_arity]) |> Pat.construct (lid "Js.Json.JSONString") + ); + pc_guard = None; + pc_rhs = + [%expr + match Js.Array.length tagged != [%e argLen] with + | true -> + Decco.error "Invalid number of arguments to variant constructor" v + | false -> [%e decoded]]; + } + | Pcstr_record _ -> fail pcd_loc "This syntax is not yet implemented by decco" + +let generateUnboxedDecode generatorSettings + {pcd_name = {txt = name}; pcd_args; pcd_loc} = + match pcd_args with + | ((Pcstr_tuple args) [@explicit_arity]) -> ( + match args with + | a :: [] -> ( + let _, d = Codecs.generateCodecs generatorSettings a in + match d with + | ((Some d) [@explicit_arity]) -> + let constructor = + Exp.construct (lid name) (Some [%expr v] [@explicit_arity]) + in + (Some + [%expr + fun v -> ([%e d] v |. Belt.Result.map) (fun v -> [%e constructor])] + [@explicit_arity]) + | None -> None) + | _ -> fail pcd_loc "Expected exactly one type argument") + | Pcstr_record _ -> fail pcd_loc "This syntax is not yet implemented by decco" + +let generateCodecs ({doEncode; doDecode} as generatorSettings) constrDecls + unboxed = + let encoder = + match doEncode with + | true -> + List.map (generateEncoderCase generatorSettings unboxed) constrDecls + |> Exp.match_ [%expr v] + |> (fun e -> + Utils.wrapFunctionExpressionForUncurrying ~arity:1 + (Exp.fun_ Asttypes.Nolabel None [%pat? v] e)) + |> BatOption.some + | false -> None + in + let decoderDefaultCase = + { + pc_lhs = [%pat? _]; + pc_guard = None; + pc_rhs = + [%expr + Decco.error "Invalid variant constructor" + (Belt.Array.getExn jsonArr 0)]; + } + in + let decoder = + match not doDecode with + | true -> None + | false -> ( + match unboxed with + | true -> generateUnboxedDecode generatorSettings (List.hd constrDecls) + | false -> + let decoderSwitch = + List.map (generateDecoderCase generatorSettings) constrDecls + |> fun l -> + l @ [decoderDefaultCase] + |> Exp.match_ [%expr Belt.Array.getExn tagged 0] + in + (Some + [%expr + fun v -> + match Js.Json.classify v with + | ((Js.Json.JSONArray [||]) [@explicit_arity]) -> + Decco.error "Expected variant, found empty array" v + | ((Js.Json.JSONArray jsonArr) [@explicit_arity]) -> + let tagged = Js.Array.map Js.Json.classify jsonArr in + [%e decoderSwitch] + | _ -> Decco.error "Not a variant" v] + [@explicit_arity])) + in + (encoder, decoder) \ No newline at end of file diff --git a/ppx_src/src/Variants.re b/ppx_src/src/Variants.re deleted file mode 100644 index 5a7c997..0000000 --- a/ppx_src/src/Variants.re +++ /dev/null @@ -1,189 +0,0 @@ -open Ppxlib; -open Parsetree; -open Ast_helper; -open Utils; - -let generateEncoderCase = (generatorSettings, unboxed, { pcd_name: { txt: name }, pcd_args, pcd_loc }) => { - switch pcd_args { - | Pcstr_tuple(args) => { - let constructorExpr = Exp.constant(Pconst_string(name, Location.none, None)); - - let lhsVars = switch args { - | [] => None - | [_] => Some(Pat.var(mknoloc("v0"))) - | _ => - args - |> List.mapi((i, _) => - mkloc("v" ++ string_of_int(i), pcd_loc) |> Pat.var) - |> Pat.tuple - |> (v) => Some(v) - }; - - let rhsList = args - |> List.map(Codecs.generateCodecs(generatorSettings)) - |> List.map(((encoder, _)) => BatOption.get(encoder)) /* TODO: refactor */ - |> List.mapi((i, e) => - Exp.apply( - ~loc=pcd_loc, e, - [(Asttypes.Nolabel, makeIdentExpr("v" ++ string_of_int(i)))] - ) - ) - |> List.append([[%expr Js.Json.string([%e constructorExpr])]]); - - { - pc_lhs: Pat.construct(lid(name), lhsVars), - pc_guard: None, - pc_rhs: unboxed - ? List.tl(rhsList) |> List.hd - : [%expr Js.Json.array([%e rhsList |> Exp.array])] - } - } - | Pcstr_record(_) => fail(pcd_loc, "This syntax is not yet implemented by decco") - } -}; - -let generateDecodeSuccessCase = (numArgs, constructorName) => { - pc_lhs: - Array.init(numArgs, i => - mknoloc("v" ++ string_of_int(i)) - |> Pat.var - |> (p) => [%pat? Belt.Result.Ok([%p p])] - ) - |> Array.to_list - |> tupleOrSingleton(Pat.tuple), - pc_guard: None, - pc_rhs: - Array.init(numArgs, i => makeIdentExpr("v" ++ string_of_int(i))) - |> Array.to_list - |> tupleOrSingleton(Exp.tuple) - |> (v) => Some(v) - |> Exp.construct(lid(constructorName)) - |> (e) => [%expr Belt.Result.Ok([%e e])] -}; - -let generateArgDecoder = (generatorSettings, args, constructorName) => { - let numArgs = List.length(args); - args - |> List.mapi(DecodeCases.generateErrorCase(numArgs)) - |> List.append([generateDecodeSuccessCase(numArgs, constructorName)]) - |> Exp.match(args - |> List.map(Codecs.generateCodecs(generatorSettings)) - |> List.mapi((i, (_, decoder)) => - Exp.apply(BatOption.get(decoder), [( - Asttypes.Nolabel, - { - /* +1 because index 0 is the constructor */ - let idx = Pconst_integer(string_of_int(i + 1), None) - |> Exp.constant; - - [%expr Belt.Array.getExn(jsonArr, [%e idx])]; - } - )]) - ) - |> tupleOrSingleton(Exp.tuple) - ); -}; - -let generateDecoderCase = (generatorSettings, { pcd_name: { txt: name }, pcd_args, pcd_loc }) => { - switch pcd_args { - | Pcstr_tuple(args) => { - let argLen = - Pconst_integer(string_of_int(List.length(args) + 1), None) - |> Exp.constant; - - let decoded = switch(args) { - | [] => { - let ident = lid(name); - [%expr Belt.Result.Ok([%e Exp.construct(ident, None)])] - } - | _ => generateArgDecoder(generatorSettings, args, name) - }; - - { - pc_lhs: Pconst_string(name, Location.none, None) - |> Pat.constant - |> (v) => Some(v) - |> Pat.construct(lid("Js.Json.JSONString")), - pc_guard: None, - pc_rhs: [%expr - (Js.Array.length(tagged) !== [%e argLen]) ? - Decco.error("Invalid number of arguments to variant constructor", v) - : - [%e decoded] - ] - } - } - | Pcstr_record(_) => fail(pcd_loc, "This syntax is not yet implemented by decco") - } -}; - -let generateUnboxedDecode = (generatorSettings, { pcd_name: { txt: name }, pcd_args, pcd_loc }) => { - switch pcd_args { - | Pcstr_tuple(args) => { - switch args { - | [a] => { - let (_, d) = Codecs.generateCodecs(generatorSettings, a); - switch d { - | Some(d) => { - let constructor = Exp.construct( - lid(name), Some([%expr v]) - ); - - Some([%expr (v) => - [%e d](v) - -> Belt.Result.map(v => [%e constructor]) - ]) - } - | None => None - } - } - | _ => fail(pcd_loc, "Expected exactly one type argument") - } - } - | Pcstr_record(_) => fail(pcd_loc, "This syntax is not yet implemented by decco") - } -}; - -let generateCodecs = ({ doEncode, doDecode } as generatorSettings, constrDecls, unboxed) => { - let encoder = - doEncode ? - List.map(generateEncoderCase(generatorSettings, unboxed), constrDecls) - |> Exp.match([%expr v]) - |> Exp.fun_(Asttypes.Nolabel, None, [%pat? v]) - |> BatOption.some - : None; - - let decoderDefaultCase = { - pc_lhs: [%pat? _], - pc_guard: None, - pc_rhs: [%expr Decco.error("Invalid variant constructor", Belt.Array.getExn(jsonArr, 0))] - }; - - let decoder = !doDecode - ? None - : - unboxed - ? generateUnboxedDecode(generatorSettings, List.hd(constrDecls)) - : { - let decoderSwitch = - List.map(generateDecoderCase(generatorSettings), constrDecls) - |> (l) => l @ [ decoderDefaultCase ] - |> Exp.match([%expr Belt.Array.getExn(tagged, 0)]); - - Some([%expr (v) => - switch (Js.Json.classify(v)) { - | Js.Json.JSONArray([||]) => - Decco.error("Expected variant, found empty array", v) - - | Js.Json.JSONArray(jsonArr) => { - let tagged = Js.Array.map(Js.Json.classify, jsonArr); - [%e decoderSwitch] - } - - | _ => Decco.error("Not a variant", v) - } - ]); - }; - - (encoder, decoder); -}; diff --git a/ppx_src/src/dune b/ppx_src/src/dune index dc32590..74a9cee 100644 --- a/ppx_src/src/dune +++ b/ppx_src/src/dune @@ -1,10 +1,11 @@ (library - (name ppx_decco) - (public_name ppx_decco) - (kind ppx_rewriter) - (libraries ppxlib) - (preprocess + (name ppx_decco) + (public_name ppx_decco) + (kind ppx_rewriter) + (libraries ppxlib) + (preprocess (pps ppxlib.metaquot)) - (flags (:standard -w -9)) ; 9 = labels not bound in record pattern -) - + (flags + (:standard -w -9 -w -26 -w -27)) + ; 9 = labels not bound in record pattern + ) diff --git a/rescript.json b/rescript.json new file mode 100644 index 0000000..f80f637 --- /dev/null +++ b/rescript.json @@ -0,0 +1,20 @@ +{ + "name": "decco", + "bs-dev-dependencies": ["@glennsl/rescript-jest"], + "sources": [ + { + "dir": "src", + "public": ["Decco"] + }, + { + "dir": "test", + "type": "dev", + "subdirs": true + } + ], + "ppx-flags": ["./ppx"], + "warnings": { + "number": "+A-9-40-42" + }, + "bsc-flags": ["-bs-super-errors"] +} diff --git a/src/Decco.re b/src/Decco.re deleted file mode 100644 index 317bee7..0000000 --- a/src/Decco.re +++ /dev/null @@ -1,180 +0,0 @@ -type decodeError = { - path: string, - message: string, - value: Js.Json.t -}; - -type result('a) = Belt.Result.t('a, decodeError); -type decoder('a) = Js.Json.t => result('a); -type encoder('a) = 'a => Js.Json.t; -type codec('a) = (encoder('a), decoder('a)); - -let error = (~path=?, message, value) =>{ - let path = switch path { - | None => "" - | Some(s) => s - }; - Belt.Result.Error({ path, message, value }); -}; - -let stringToJson = (s) => Js.Json.string(s); -let stringFromJson = (j) => - switch (Js.Json.decodeString(j)) { - | Some(s) => Belt.Result.Ok(s) - | None => Belt.Result.Error({ path: "", message: "Not a string", value: j }) - }; - -let intToJson = (i) => i |> float_of_int |> Js.Json.number; -let intFromJson = (j) => - switch (Js.Json.decodeNumber(j)) { - | Some(f) => - (float_of_int(Js.Math.floor(f)) == f) ? - Belt.Result.Ok(Js.Math.floor(f)) - : Belt.Result.Error({ path: "", message: "Not an integer", value: j }) - - | _ => Belt.Result.Error({ path: "", message: "Not a number", value: j }) - }; - -let int64ToJson = (i) => i - |> Int64.float_of_bits - |> Js.Json.number; - -let int64FromJson = (j) => - switch (Js.Json.decodeNumber(j)) { - | Some(n) => Belt.Result.Ok(Int64.bits_of_float(n)) - | None => error("Not a number", j) - }; - -let int64ToJsonUnsafe = (i) => i - |> Int64.to_float - |> Js.Json.number; - -let int64FromJsonUnsafe = (j) => - switch (Js.Json.decodeNumber(j)) { - | Some(n) => Belt.Result.Ok(Int64.of_float(n)) - | None => error("Not a number", j) - }; - -let floatToJson = (v) => v |> Js.Json.number; -let floatFromJson = (j) => - switch (Js.Json.decodeNumber(j)) { - | Some(f) => Belt.Result.Ok(f) - | None => Belt.Result.Error({ path: "", message: "Not a number", value: j }) - }; - -let boolToJson = (v) => v |> Js.Json.boolean; -let boolFromJson = (j) => - switch (Js.Json.decodeBoolean(j)) { - | Some(b) => Belt.Result.Ok(b) - | None => Belt.Result.Error({ path: "", message: "Not a boolean", value: j }) - }; - -let unitToJson = () => Js.Json.number(0.0); -let unitFromJson = (_) => Belt.Result.Ok(()); - -let arrayToJson = (encoder, arr) => - arr - |> Js.Array.map(encoder) - |> Js.Json.array; - -let arrayFromJson = (decoder, json) => - switch (Js.Json.decodeArray(json)) { - | Some(arr) => - Js.Array.reducei((acc, jsonI, i) => { - switch (acc, decoder(jsonI)) { - | (Belt.Result.Error(_), _) => acc - - | (_, Belt.Result.Error({ path } as error)) => - Belt.Result.Error({ ...error, path: "[" ++ string_of_int(i) ++ "]" ++ path }) - - | (Belt.Result.Ok(prev), Belt.Result.Ok(newVal)) => Belt.Result.Ok(Js.Array.concat([|newVal|], prev)) - }; - }, Belt.Result.Ok([||]), arr) - - | None => Belt.Result.Error({ path: "", message: "Not an array", value: json }) - }; - -let listToJson = (encoder, list) => - list - |> Array.of_list - |> arrayToJson(encoder); - -let listFromJson = (decoder, json) => - json - |> arrayFromJson(decoder) - |> Belt.Result.map(_, Array.to_list); - -let optionToJson = (encoder, opt) => - switch opt { - | Some(x) => encoder(x) - | None => Js.Json.null - }; - -let optionFromJson = (decoder, json) => - switch (Js.Null_undefined.return(json) |> Js.Null_undefined.toOption) { - | None => Belt.Result.Ok(None) - | Some(json) => decoder(json) |> Belt.Result.map(_, v => Some(v)) - }; - -let resultToJson = (okEncoder, errorEncoder, result) => - switch result { - | Belt.Result.Ok(v) => [| Js.Json.string("Ok"), okEncoder(v) |] - | Belt.Result.Error(e) => [| Js.Json.string("Error"), errorEncoder(e) |] - } - |> Js.Json.array; - -let resultFromJson = (okDecoder, errorDecoder, json) => - switch (Js.Json.decodeArray(json)) { - | Some([| variantConstructorId, payload |]) => - switch (Js.Json.decodeString(variantConstructorId)) { - | Some("Ok") => - okDecoder(payload) - -> Belt.Result.map(v => Belt.Result.Ok(v)) - - | Some("Error") => - switch(errorDecoder(payload)) { - | Belt.Result.Ok(v) => Belt.Result.Ok(Belt.Result.Error(v)) - | Belt.Result.Error(e) => Belt.Result.Error(e) - } - - | Some(_) => error("Expected either \"Ok\" or \"Error\"", variantConstructorId) - | None => error("Not a string", variantConstructorId) - } - | Some(_) => error("Expected exactly 2 values in array", json) - | None => error("Not an array", json) - }; - -let dictToJson = (encoder, dict) => - dict->Js.Dict.map((. a) => encoder(a), _)->Js.Json.object_; - -let dictFromJson = (decoder, json) => - switch (Js.Json.decodeObject(json)) { - | Some(dict) => - dict - ->Js.Dict.entries - ->Belt.Array.reduce(Ok(Js.Dict.empty()), (acc, (key, value)) => - switch (acc, decoder(value)) { - | (Error(_), _) => acc - - | (_, Error({ path } as error)) => Error({...error, path: "." ++ key ++ path}) - - | (Ok(prev), Ok(newVal)) => - let () = prev->Js.Dict.set(key, newVal); - Ok(prev); - } - ); - | None => Error({path: "", message: "Not a dict", value: json}) -}; - -module Codecs { - include Decco_Codecs; - let string = (stringToJson, stringFromJson); - let int = (intToJson, intFromJson); - let int64Unsafe = (int64ToJsonUnsafe, int64FromJsonUnsafe); - let float = (floatToJson, floatFromJson); - let bool = (boolToJson, boolFromJson); - let array = (arrayToJson, arrayFromJson); - let list = (listToJson, listFromJson); - let option = (optionToJson, optionFromJson); - let unit = (unitToJson, unitFromJson); -}; diff --git a/src/Decco.res b/src/Decco.res new file mode 100644 index 0000000..67cd4ff --- /dev/null +++ b/src/Decco.res @@ -0,0 +1,164 @@ +type decodeError = { + path: string, + message: string, + value: Js.Json.t, +} + +type result<'a> = Belt.Result.t<'a, decodeError> +type decoder<'a> = Js.Json.t => result<'a> +type encoder<'a> = 'a => Js.Json.t +type codec<'a> = (encoder<'a>, decoder<'a>) + +let error = (~path=?, message, value) => { + let path = switch path { + | None => "" + | Some(s) => s + } + Belt.Result.Error({path: path, message: message, value: value}) +} + +let stringToJson = s => Js.Json.string(s) +let stringFromJson = j => + switch Js.Json.decodeString(j) { + | Some(s) => Belt.Result.Ok(s) + | None => Belt.Result.Error({path: "", message: "Not a string", value: j}) + } + +let intToJson = i => i |> float_of_int |> Js.Json.number +let intFromJson = j => + switch Js.Json.decodeNumber(j) { + | Some(f) => + float_of_int(Js.Math.floor(f)) == f + ? Belt.Result.Ok(Js.Math.floor(f)) + : Belt.Result.Error({path: "", message: "Not an integer", value: j}) + + | _ => Belt.Result.Error({path: "", message: "Not a number", value: j}) + } + +let int64ToJson = i => i |> Int64.float_of_bits |> Js.Json.number + +let int64FromJson = j => + switch Js.Json.decodeNumber(j) { + | Some(n) => Belt.Result.Ok(Int64.bits_of_float(n)) + | None => error("Not a number", j) + } + +let int64ToJsonUnsafe = i => i |> Int64.to_float |> Js.Json.number + +let int64FromJsonUnsafe = j => + switch Js.Json.decodeNumber(j) { + | Some(n) => Belt.Result.Ok(Int64.of_float(n)) + | None => error("Not a number", j) + } + +let floatToJson = v => v |> Js.Json.number +let floatFromJson = j => + switch Js.Json.decodeNumber(j) { + | Some(f) => Belt.Result.Ok(f) + | None => Belt.Result.Error({path: "", message: "Not a number", value: j}) + } + +let boolToJson = v => v |> Js.Json.boolean +let boolFromJson = j => + switch Js.Json.decodeBoolean(j) { + | Some(b) => Belt.Result.Ok(b) + | None => Belt.Result.Error({path: "", message: "Not a boolean", value: j}) + } + +let unitToJson = () => Js.Json.number(0.0) +let unitFromJson = _ => Belt.Result.Ok() + +let arrayToJson = (encoder, arr) => arr |> Js.Array.map(encoder) |> Js.Json.array + +let arrayFromJson = (decoder, json) => + switch Js.Json.decodeArray(json) { + | Some(arr) => Js.Array.reducei((acc, jsonI, i) => + switch (acc, decoder(jsonI)) { + | (Belt.Result.Error(_), _) => acc + + | (_, Belt.Result.Error({path} as error)) => + Belt.Result.Error({...error, path: "[" ++ (string_of_int(i) ++ ("]" ++ path))}) + + | (Belt.Result.Ok(prev), Belt.Result.Ok(newVal)) => + Belt.Result.Ok(Js.Array.concat([newVal], prev)) + } + , Belt.Result.Ok([]), arr) + + | None => Belt.Result.Error({path: "", message: "Not an array", value: json}) + } + +let listToJson = (encoder, list) => list |> Array.of_list |> arrayToJson(encoder) + +let listFromJson = (decoder, json) => + json |> arrayFromJson(decoder) |> Belt.Result.map(_, Array.to_list) + +let optionToJson = (encoder, opt) => + switch opt { + | Some(x) => encoder(x) + | None => Js.Json.null + } + +let optionFromJson = (decoder, json) => + switch Js.Null_undefined.return(json) |> Js.Null_undefined.toOption { + | None => Belt.Result.Ok(None) + | Some(json) => decoder(json) |> Belt.Result.map(_, v => Some(v)) + } + +let resultToJson = (okEncoder, errorEncoder, result) => + switch result { + | Belt.Result.Ok(v) => [Js.Json.string("Ok"), okEncoder(v)] + | Belt.Result.Error(e) => [Js.Json.string("Error"), errorEncoder(e)] + } |> Js.Json.array + +let resultFromJson = (okDecoder, errorDecoder, json) => + switch Js.Json.decodeArray(json) { + | Some([variantConstructorId, payload]) => + switch Js.Json.decodeString(variantConstructorId) { + | Some("Ok") => okDecoder(payload)->Belt.Result.map(v => Belt.Result.Ok(v)) + + | Some("Error") => + switch errorDecoder(payload) { + | Belt.Result.Ok(v) => Belt.Result.Ok(Belt.Result.Error(v)) + | Belt.Result.Error(e) => Belt.Result.Error(e) + } + + | Some(_) => error("Expected either \"Ok\" or \"Error\"", variantConstructorId) + | None => error("Not a string", variantConstructorId) + } + | Some(_) => error("Expected exactly 2 values in array", json) + | None => error("Not an array", json) + } + +let dictToJson = (encoder, dict) => dict->Js.Dict.map((. a) => encoder(a), _)->Js.Json.object_ + +let dictFromJson = (decoder, json) => + switch Js.Json.decodeObject(json) { + | Some(dict) => + dict + ->Js.Dict.entries + ->Belt.Array.reduce(Ok(Js.Dict.empty()), (acc, (key, value)) => + switch (acc, decoder(value)) { + | (Error(_), _) => acc + + | (_, Error({path} as error)) => Error({...error, path: "." ++ (key ++ path)}) + + | (Ok(prev), Ok(newVal)) => + let () = prev->Js.Dict.set(key, newVal) + Ok(prev) + } + ) + | None => Error({path: "", message: "Not a dict", value: json}) + } + +module Codecs = { + include Decco_Codecs + let string = (stringToJson, stringFromJson) + let int = (intToJson, intFromJson) + let int64Unsafe = (int64ToJsonUnsafe, int64FromJsonUnsafe) + let float = (floatToJson, floatFromJson) + let bool = (boolToJson, boolFromJson) + let array = (arrayToJson, arrayFromJson) + let list = (listToJson, listFromJson) + let option = (optionToJson, optionFromJson) + let unit = (unitToJson, unitFromJson) +} diff --git a/src/Decco_Codecs.re b/src/Decco_Codecs.re deleted file mode 100644 index 2a4f2b9..0000000 --- a/src/Decco_Codecs.re +++ /dev/null @@ -1,16 +0,0 @@ -let falseableEncode = (encoder, opt) => - switch opt { - | None => Js.Json.boolean(false) - | Some(v) => encoder(v) - }; -let falseableDecode = (decoder, json) => - switch (Js.Json.decodeBoolean(json)) { - | Some(false) => Belt.Result.Ok(None) - | _ => - decoder(json) - |> Belt.Result.map(_, v => Some(v)) - }; -let falseable = (falseableEncode, falseableDecode); - -let magicDecode = (j) => Belt.Result.Ok(Obj.magic(j)); -let magic = (Obj.magic, magicDecode); diff --git a/src/Decco_Codecs.res b/src/Decco_Codecs.res new file mode 100644 index 0000000..bacfe56 --- /dev/null +++ b/src/Decco_Codecs.res @@ -0,0 +1,14 @@ +let falseableEncode = (encoder, opt) => + switch opt { + | None => Js.Json.boolean(false) + | Some(v) => encoder(v) + } +let falseableDecode = (decoder, json) => + switch Js.Json.decodeBoolean(json) { + | Some(false) => Belt.Result.Ok(None) + | _ => decoder(json) |> Belt.Result.map(_, v => Some(v)) + } +let falseable = (falseableEncode, falseableDecode) + +let magicDecode = j => Belt.Result.Ok(Obj.magic(j)) +let magic = (Obj.magic, magicDecode) diff --git a/test/TestUtils.re b/test/TestUtils.re deleted file mode 100644 index 541bb66..0000000 --- a/test/TestUtils.re +++ /dev/null @@ -1,27 +0,0 @@ -open Jest; -open Expect; - -let testBadDecode = (name, decode, json, expectedError) => - test(name, () => { - switch (decode(json)) { - | Belt.Result.Error(e) => expect(e) |> toEqual(expectedError) - | Ok(_) => failwith("Decode erroneously succeeded") - }; - }); - -let testGoodDecode = (name, decode, json, expected) => - test(name, () => - switch (decode(json)) { - | Belt.Result.Ok(actual) => expect(actual) |> toEqual(expected) - | Belt.Result.Error({ Decco.path, message }) => failwith({j|Decode error: $message ($path)|j}) - } - ); - -let testEncode = (name, value, encode, expected) => - test(name, () => - value - |> encode - |> Js.Json.stringify - |> expect - |> toBe(expected) - ); diff --git a/test/TestUtils.res b/test/TestUtils.res new file mode 100644 index 0000000..65a75cb --- /dev/null +++ b/test/TestUtils.res @@ -0,0 +1,22 @@ +open Jest +open Expect + +let testBadDecode = (name, decode, json, expectedError) => + test(name, () => + switch decode(json) { + | Belt.Result.Error(e) => expect(expectedError)->toEqual(e) + | Ok(_) => failwith("Decode erroneously succeeded") + } + ) + +let testGoodDecode = (name, decode, json, expected) => + test(name, () => + switch decode(json) { + | Belt.Result.Ok(actual) => expect(expected)->toEqual(actual) + | Belt.Result.Error({Decco.path: path, message}) => + failwith(`Decode error: ${message} (${path})`) + } + ) + +let testEncode = (name, value, encode, expected: string) => + test(name, () => expect(expected)->toBe(Js.Json.stringify(encode(value)))) diff --git a/test/__tests__/Array.res b/test/__tests__/Array.res new file mode 100644 index 0000000..d3d57fa --- /dev/null +++ b/test/__tests__/Array.res @@ -0,0 +1,41 @@ +open Jest +open TestUtils + +@decco type s = string +@decco type a<'a> = array<'a> + +describe("array", () => { + testEncode("a_encode", ["10", "20"], a_encode(s_encode, ...), `["10","20"]`) + + describe("a_decode", () => { + let json = Js.Json.array(Js.Array.map(Js.Json.string, ["10", "20"])) + testGoodDecode("good", a_decode(s_decode, ...), json, ["10", "20"]) + + describe( + "bad", + () => { + testBadDecode( + "non-array", + a_decode(s_decode, ...), + Js.Json.number(12.), + { + message: "Not an array", + path: "", + value: Js.Json.number(12.), + }, + ) + + testBadDecode( + "failed elem", + a_decode(s_decode, ...), + Js.Json.array([Js.Json.string("str"), Js.Json.number(123.)]), + { + message: "Not a string", + path: "[1]", + value: Js.Json.number(123.), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/BeltResult.res b/test/__tests__/BeltResult.res new file mode 100644 index 0000000..0f4eec5 --- /dev/null +++ b/test/__tests__/BeltResult.res @@ -0,0 +1,106 @@ +open Jest +open TestUtils + +@decco type i = int +@decco type s = string +@decco type r<'v, 'e> = Belt.Result.t<'v, 'e> + +describe("result", () => { + let enc = r_encode(s_encode, i_encode, ...) + let dec = r_decode(s_decode, i_decode, ...) + + describe("r_encode", () => { + testEncode("ok", Belt.Result.Ok("oaky"), enc, `["Ok","oaky"]`) + testEncode("error", Belt.Result.Error(404), enc, `["Error",404]`) + }) + + describe("r_decode", () => { + describe( + "good", + () => { + let json = Js.Json.parseExn("[\"Ok\",\"yess\"]") + testGoodDecode("ok", dec, json, Ok("yess")) + + let json = Js.Json.parseExn("[\"Error\",911]") + testGoodDecode("error", dec, json, Error(911)) + }, + ) + + describe( + "bad", + () => { + let json = Js.Json.number(12.) + testBadDecode( + "not an array", + dec, + json, + { + path: "", + message: "Not an array", + value: json, + }, + ) + + let json = Js.Json.parseExn("[]") + testBadDecode( + "length != 2", + dec, + json, + { + path: "", + message: "Expected exactly 2 values in array", + value: json, + }, + ) + + let json = Js.Json.parseExn("[0,1]") + testBadDecode( + "constructor not a string", + dec, + json, + { + path: "", + message: "Not a string", + value: Js.Json.number(0.), + }, + ) + + let json = Js.Json.parseExn("[\"bad\",1]") + testBadDecode( + "unrecognized constructor", + dec, + json, + { + path: "", + message: "Expected either \"Ok\" or \"Error\"", + value: Js.Json.string("bad"), + }, + ) + + let json = Js.Json.parseExn("[\"Ok\",1]") + testBadDecode( + "bad Ok decode", + dec, + json, + { + path: "", + message: "Not a string", + value: Js.Json.number(1.), + }, + ) + + let json = Js.Json.parseExn("[\"Error\",null]") + testBadDecode( + "bad Error decode", + dec, + json, + { + path: "", + message: "Not a number", + value: Js.Json.null, + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Bool.res b/test/__tests__/Bool.res new file mode 100644 index 0000000..2c4f82d --- /dev/null +++ b/test/__tests__/Bool.res @@ -0,0 +1,24 @@ +open Jest +open Expect +open TestUtils + +@decco type b = bool + +describe("bool", () => { + test("b_encode", () => expect(Js.Json.JSONTrue)->toBe(Js.Json.classify(b_encode(true)))) + + describe("b_decode", () => { + testGoodDecode("good", b_decode, Js.Json.boolean(false), false) + + testBadDecode( + "bad", + b_decode, + Js.Json.string("12."), + { + path: "", + message: "Not a boolean", + value: Js.Json.string("12."), + }, + ) + }) +}) diff --git a/test/__tests__/CustomCodecs.res b/test/__tests__/CustomCodecs.res new file mode 100644 index 0000000..a91f5a5 --- /dev/null +++ b/test/__tests__/CustomCodecs.res @@ -0,0 +1,25 @@ +// Let's do a codec that represents numbers as ints at the type level, and strings at runtime +// This can be found in the real world in cases like query strings in URLs + +open Jest +open Expect + +let intToStr = (i: int) => i->string_of_int +let intFromStr = (s: string) => s->int_of_string + +@decco type intAsStr = @decco.codec((intToStr, intFromStr)) int + +describe("CustomCodecs", () => { + test("should encode", () => { + let x: intAsStr = 42 + + let encoded = x->intAsStr_encode + expect(encoded)->toBe("42") + }) + + test("should decode", () => { + let encoded = "42" + let decoded = intAsStr_decode(encoded) + expect(decoded)->toBe(42) + }) +}) diff --git a/test/__tests__/Default.res b/test/__tests__/Default.res new file mode 100644 index 0000000..94ccf9b --- /dev/null +++ b/test/__tests__/Default.res @@ -0,0 +1,17 @@ +open Jest +open Expect + +@decco +type record = {@decco.default("default") s: string} + +describe("Decco @decco.default", () => { + test("should use default value when key is missing", () => { + let json = Js.Json.parseExn("{}") + let decoded = record_decode(json) + + switch decoded { + | Belt.Result.Ok(record) => expect(record.s)->toEqual("default") + | Belt.Result.Error(_) => fail("Decoding failed") + } + }) +}) diff --git a/test/__tests__/DictInt.res b/test/__tests__/DictInt.res new file mode 100644 index 0000000..4822872 --- /dev/null +++ b/test/__tests__/DictInt.res @@ -0,0 +1,36 @@ +open Jest +open TestUtils + +@decco type d<'a> = Js.Dict.t<'a> +@decco type dictInt = d + +describe("dictInt", () => { + testEncode( + "dictInt_encode", + Js.Dict.fromArray([("foo", 1), ("bar", 2)]), + dictInt_encode, + `{"foo":1,"bar":2}`, + ) + + describe("dictInt_decode", () => { + let json = Js.Json.parseExn(`{"foo":1,"bar":2}`) + testGoodDecode("good", dictInt_decode, json, Js.Dict.fromArray([("foo", 1), ("bar", 2)])) + + describe( + "bad", + () => { + let badDict = Js.Json.parseExn(`{"foo":1,"bar":"baz"}`) + testBadDecode( + "mixed types", + dictInt_decode, + badDict, + { + path: ".bar", + message: "Not a number", + value: Js.Json.string("baz"), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Falseable.res b/test/__tests__/Falseable.res new file mode 100644 index 0000000..d0ad773 --- /dev/null +++ b/test/__tests__/Falseable.res @@ -0,0 +1,55 @@ +open Jest +open Expect +open TestUtils + +@decco type s = string +@decco type falseable<'a> = @decco.codec(Decco.Codecs.falseable) option<'a> + +describe("falseable", () => { + describe("falseable_encode", () => { + test( + "none", + () => expect(Js.Json.JSONFalse)->toBe(Js.Json.classify(falseable_encode(s_encode, None))), + ) + + test( + "some", + () => { + let v = Some("yeah") + let json = falseable_encode(s_encode, v) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONString(v2) => expect("yeah")->toBe(v2) + | _ => failwith("Not a JSONString") + } + }, + ) + }) + + describe("falseable_decode", () => { + describe( + "good", + () => { + testGoodDecode("false", falseable_decode(s_decode, ...), Js.Json.boolean(false), None) + testGoodDecode( + "non-false", + falseable_decode(s_decode, ...), + Js.Json.string("heyy"), + Some("heyy"), + ) + }, + ) + + testBadDecode( + "bad", + falseable_decode(s_decode, ...), + Js.Json.null, + { + path: "", + message: "Not a string", + value: Js.Json.null, + }, + ) + }) +}) diff --git a/test/__tests__/Float.res b/test/__tests__/Float.res new file mode 100644 index 0000000..92adbfd --- /dev/null +++ b/test/__tests__/Float.res @@ -0,0 +1,33 @@ +open Jest +open Expect +open TestUtils + +@decco type f = float + +describe("float", () => { + test("f_encode", () => { + let v = 1. + let json = f_encode(v) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONNumber(v2) => expect(v)->toBe(v2) + | _ => failwith("Not a JSONNumber") + } + }) + + describe("f_decode", () => { + testGoodDecode("good", f_decode, Js.Json.number(12.), 12.) + + testBadDecode( + "bad", + f_decode, + Js.Json.string("12."), + { + path: "", + message: "Not a number", + value: Js.Json.string("12."), + }, + ) + }) +}) diff --git a/test/__tests__/Int.res b/test/__tests__/Int.res new file mode 100644 index 0000000..d50d6e1 --- /dev/null +++ b/test/__tests__/Int.res @@ -0,0 +1,51 @@ +open Jest +open Expect +open TestUtils + +@decco type i = int + +describe("int", () => { + test("i_encode", () => { + let i = 24 + let json = i_encode(i) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONNumber(i2) => expect(float_of_int(i))->toBe(i2) + | _ => failwith("Not a JSONNumber") + } + }) + + describe("i_decode", () => { + testGoodDecode("good", i_decode, Js.Json.number(414.), 414) + + describe( + "bad", + () => { + let json = Js.Json.string("12.") + testBadDecode( + "not a number", + i_decode, + json, + { + path: "", + message: "Not a number", + value: json, + }, + ) + + let json = Js.Json.number(5.1) + testBadDecode( + "not an int", + i_decode, + json, + { + path: "", + message: "Not an integer", + value: json, + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/JsJson.res b/test/__tests__/JsJson.res new file mode 100644 index 0000000..b806e49 --- /dev/null +++ b/test/__tests__/JsJson.res @@ -0,0 +1,16 @@ +open Jest +open Expect +open TestUtils + +@decco type j = Js.Json.t + +describe("Js.Json.t", () => { + test("j_encode", () => { + let v = Js.Json.string("jay") + let json = j_encode(v) + expect(json)->toBe(v) + }) + + let json = Js.Json.number(12.) + testGoodDecode("j_decode", j_decode, json, json) +}) diff --git a/test/__tests__/Key.res b/test/__tests__/Key.res new file mode 100644 index 0000000..144504c --- /dev/null +++ b/test/__tests__/Key.res @@ -0,0 +1,17 @@ +open Jest +open Expect + +@decco +type record = {@decco.key("customKey") s: string} + +describe("Decco @decco.key", () => { + test("should decode value from custom key", () => { + let json = Js.Json.parseExn(`{"customKey": "value"}`) + let decoded = record_decode(json) + + switch decoded { + | Belt.Result.Ok(record) => expect(record.s)->toEqual("value") + | Belt.Result.Error(_) => fail("Decoding failed") + } + }) +}) diff --git a/test/__tests__/Ldot.res b/test/__tests__/Ldot.res new file mode 100644 index 0000000..d8708d3 --- /dev/null +++ b/test/__tests__/Ldot.res @@ -0,0 +1,32 @@ +open Jest +open Expect +open TestUtils +open TestModFunctor + +describe("Ldot", () => { + test("dependentOnTestMod_encode", () => { + let s = TestMod.mkT("yeah") + let json = dependentOnTestMod_encode(s) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONString(s2) => expect(s)->toBe(TestMod.mkT(s2)) + | _ => failwith("Not a JSONString") + } + }) + + describe("dependentOnTestMod_decode", () => { + testGoodDecode("good", dependentOnTestMod_decode, Js.Json.string("heyy"), TestMod.mkT("heyy")) + + testBadDecode( + "bad", + dependentOnTestMod_decode, + Js.Json.number(12.), + { + path: "", + message: "Not a string", + value: Js.Json.number(12.), + }, + ) + }) +}) diff --git a/test/__tests__/List.res b/test/__tests__/List.res new file mode 100644 index 0000000..98a1662 --- /dev/null +++ b/test/__tests__/List.res @@ -0,0 +1,41 @@ +open Jest +open TestUtils + +@decco type s = string +@decco type l<'a> = list<'a> + +describe("list", () => { + testEncode("l_encode", list{"10", "20"}, l_encode(s_encode, ...), `["10","20"]`) + + describe("l_decode", () => { + let json = Js.Json.array(Js.Array.map(Js.Json.string, ["10", "20"])) + testGoodDecode("good", l_decode(s_decode, ...), json, list{"10", "20"}) + + describe( + "bad", + () => { + testBadDecode( + "non-array", + l_decode(s_decode, ...), + Js.Json.number(12.), + { + message: "Not an array", + path: "", + value: Js.Json.number(12.), + }, + ) + + testBadDecode( + "failed elem", + l_decode(s_decode, ...), + Js.Json.array([Js.Json.string("str"), Js.Json.number(123.)]), + { + message: "Not a string", + path: "[1]", + value: Js.Json.number(123.), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/LongPath.res b/test/__tests__/LongPath.res new file mode 100644 index 0000000..1d71517 --- /dev/null +++ b/test/__tests__/LongPath.res @@ -0,0 +1,31 @@ +open Jest +open Expect +open TestUtils + +@decco type bigV = V(array>>) +@decco type bigR = {bigV: bigV} + +describe("long path", () => { + test("good", () => { + let v = {bigV: V([Some(list{"yes"})])} + let decoded = bigR_decode(bigR_encode(v)) + switch decoded { + | Belt.Result.Error(_) => failwith("Decode failure") + | Belt.Result.Ok(actual) => expect(actual->Js.Json.stringifyAny)->toBe(v->Js.Json.stringifyAny) + } + }) + + describe("bad", () => { + let json = Js.Json.parseExn(`{"bigV":["V",[null,["","",1]]]}`) + testBadDecode( + "bad", + bigR_decode, + json, + { + path: ".bigV[0][1][2]", + message: "Not a string", + value: Js.Json.number(1.), + }, + ) + }) +}) diff --git a/test/__tests__/Magic.res b/test/__tests__/Magic.res new file mode 100644 index 0000000..c53109c --- /dev/null +++ b/test/__tests__/Magic.res @@ -0,0 +1,9 @@ +open Jest +open TestUtils + +@decco type magic = @decco.codec(Decco.Codecs.magic) int + +describe("magic", () => { + let i = 24 + testGoodDecode("", magic_decode, magic_encode(i), i) +}) diff --git a/test/__tests__/OpenBelt.re b/test/__tests__/OpenBelt.re deleted file mode 100644 index 2fc2210..0000000 --- a/test/__tests__/OpenBelt.re +++ /dev/null @@ -1,69 +0,0 @@ -open Jest; -open TestUtils; - -[@warning "-33"] -open Belt; - -[@decco] type variant = A | B(int) | C(int, string); - -describe("variant", () => { - describe("variant_encode", () => { - testEncode("A", A, variant_encode, {|["A"]|}); - testEncode("B", B(5), variant_encode, {|["B",5]|}); - testEncode("C", C(7, "8"), variant_encode, {|["C",7,"8"]|}); - }); - - describe("variant_decode", () => { - describe("good", () => { - let json = {|["A"]|} |> Js.Json.parseExn; - testGoodDecode("A", variant_decode, json, A); - let json = {|["B",5]|} |> Js.Json.parseExn; - testGoodDecode("B", variant_decode, json, B(5)); - let json = {|["C",7,"8"]|} |> Js.Json.parseExn; - testGoodDecode("C", variant_decode, json, C(7, "8")); - }); - - describe("bad", () => { - testBadDecode("non-variant", variant_decode, Js.Json.number(12.), { - path: "", - message: "Not a variant", - value: Js.Json.number(12.) - }); - - let json = {|["D"]|} |> Js.Json.parseExn; - testBadDecode("bad constructor", variant_decode, json, { - path: "", - message: "Invalid variant constructor", - value: Js.Json.string("D") - }); - - let json = {|["A",1]|} |> Js.Json.parseExn; - testBadDecode("too many arguments", variant_decode, json, { - path: "", - message: "Invalid number of arguments to variant constructor", - value: json - }); - - let json = {|[]|} |> Js.Json.parseExn; - testBadDecode("no arguments", variant_decode, json, { - path: "", - message: "Expected variant, found empty array", - value: json - }); - - let json = {|["B"]|} |> Js.Json.parseExn; - testBadDecode("not enough arguments", variant_decode, json, { - path: "", - message: "Invalid number of arguments to variant constructor", - value: json - }); - - let json = {|["B","oh"]|} |> Js.Json.parseExn; - testBadDecode("invalid argument", variant_decode, json, { - path: "[0]", - message: "Not a number", - value: Js.Json.string("oh") - }); - }); - }); -}); diff --git a/test/__tests__/OpenBelt.res b/test/__tests__/OpenBelt.res new file mode 100644 index 0000000..76b625a --- /dev/null +++ b/test/__tests__/OpenBelt.res @@ -0,0 +1,107 @@ +open Jest +open TestUtils + +@warning("-33") +open Belt + +open Decco + +@decco type variant = A | B(int) | C(int, string) + +describe("variant", () => { + describe("variant_encode", () => { + testEncode("A", A, variant_encode, `["A"]`) + testEncode("B", B(5), variant_encode, `["B",5]`) + testEncode("C", C(7, "8"), variant_encode, `["C",7,"8"]`) + }) + + describe("variant_decode", () => { + describe( + "good", + () => { + let json = Js.Json.parseExn(`["A"]`) + testGoodDecode("A", variant_decode, json, A) + let json = Js.Json.parseExn(`["B",5]`) + testGoodDecode("B", variant_decode, json, B(5)) + let json = Js.Json.parseExn(`["C",7,"8"]`) + testGoodDecode("C", variant_decode, json, C(7, "8")) + }, + ) + + describe( + "bad", + () => { + testBadDecode( + "non-variant", + variant_decode, + Js.Json.number(12.), + { + path: "", + message: "Not a variant", + value: Js.Json.number(12.), + }, + ) + + let json = Js.Json.parseExn(`["D"]`) + testBadDecode( + "bad constructor", + variant_decode, + json, + { + path: "", + message: "Invalid variant constructor", + value: Js.Json.string("D"), + }, + ) + + let json = Js.Json.parseExn(`["A",1]`) + testBadDecode( + "too many arguments", + variant_decode, + json, + { + path: "", + message: "Invalid number of arguments to variant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`[]`) + testBadDecode( + "no arguments", + variant_decode, + json, + { + path: "", + message: "Expected variant, found empty array", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B"]`) + testBadDecode( + "not enough arguments", + variant_decode, + json, + { + path: "", + message: "Invalid number of arguments to variant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B","oh"]`) + testBadDecode( + "invalid argument", + variant_decode, + json, + { + path: "[0]", + message: "Not a number", + value: Js.Json.string("oh"), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Option.res b/test/__tests__/Option.res new file mode 100644 index 0000000..e07aada --- /dev/null +++ b/test/__tests__/Option.res @@ -0,0 +1,48 @@ +open Jest +open Expect +open TestUtils + +@decco type s = string +@decco type o<'a> = option<'a> + +describe("option", () => { + describe("o_encode", () => { + test("none", () => expect(Js.Json.classify(o_encode(s_encode, None)))->toBe(Js.Json.JSONNull)) + + test( + "some", + () => { + let v = Some("yeah") + let json = o_encode(s_encode, v) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONString(v2) => expect(v2)->toBe("yeah") + | _ => failwith("Not a JSONString") + } + }, + ) + }) + + describe("o_decode", () => { + describe( + "good", + () => { + testGoodDecode("null", o_decode(s_decode, ...), Js.Json.null, None) + testGoodDecode("undefined", o_decode(s_decode, ...), %raw(`undefined`), None) + testGoodDecode("non-null", o_decode(s_decode, ...), Js.Json.string("heyy"), Some("heyy")) + }, + ) + + testBadDecode( + "bad", + o_decode(s_decode, ...), + Js.Json.number(12.), + { + path: "", + message: "Not a string", + value: Js.Json.number(12.), + }, + ) + }) +}) diff --git a/test/__tests__/OptionList.res b/test/__tests__/OptionList.res new file mode 100644 index 0000000..896601b --- /dev/null +++ b/test/__tests__/OptionList.res @@ -0,0 +1,49 @@ +open Jest +open TestUtils + +@decco type s = string +@decco type l<'a> = list<'a> +@decco type o<'a> = option<'a> +@decco type optionList = l> + +describe("optionList", () => { + testEncode( + "optionList_encode", + list{Some("a"), None, Some("b")}, + optionList_encode, + `["a",null,"b"]`, + ) + + describe("optionList_decode", () => { + let json = Js.Json.parseExn(`["a",null,"b"]`) + testGoodDecode("good", optionList_decode, json, list{Some("a"), None, Some("b")}) + + describe( + "bad", + () => { + testBadDecode( + "non-array", + optionList_decode, + Js.Json.number(12.), + { + path: "", + message: "Not an array", + value: Js.Json.number(12.), + }, + ) + + let json = Js.Json.parseExn(`[null, 3]`) + testBadDecode( + "non-string", + optionList_decode, + json, + { + path: "[1]", + message: "Not a string", + value: Js.Json.number(3.), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Polyvariant.res b/test/__tests__/Polyvariant.res new file mode 100644 index 0000000..502d63d --- /dev/null +++ b/test/__tests__/Polyvariant.res @@ -0,0 +1,95 @@ +open Jest +open TestUtils + +@decco type s = string +@decco type i = int +@decco type polyvariant = [#A | #B(i) | #C(i, s)] + +describe("polyvariant", () => { + describe("polyvariant_encode", () => { + testEncode("A", #A, polyvariant_encode, `["A"]`) + testEncode("B", #B(5), polyvariant_encode, `["B",5]`) + testEncode("C", #C(7, "8"), polyvariant_encode, `["C",7,"8"]`) + }) + + describe("polyvariant_decode", () => { + describe( + "good", + () => { + let json = Js.Json.parseExn(`["A"]`) + testGoodDecode("A", polyvariant_decode, json, #A) + let json = Js.Json.parseExn(`["B",5]`) + testGoodDecode("B", polyvariant_decode, json, #B(5)) + let json = Js.Json.parseExn(`["C",7,"8"]`) + testGoodDecode("C", polyvariant_decode, json, #C(7, "8")) + }, + ) + describe( + "bad", + () => { + testBadDecode( + "non-polyvariant", + polyvariant_decode, + Js.Json.number(12.), + {path: "", message: "Not a polyvariant", value: Js.Json.number(12.)}, + ) + + let json = Js.Json.parseExn(`["D"]`) + testBadDecode( + "bad constructor", + polyvariant_decode, + json, + { + path: "", + message: "Invalid polyvariant constructor", + value: Js.Json.string("D"), + }, + ) + + let json = Js.Json.parseExn(`["A",1]`) + testBadDecode( + "too many arguments", + polyvariant_decode, + json, + { + path: "", + message: "Invalid number of arguments to polyvariant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`[]`) + testBadDecode( + "no arguments", + polyvariant_decode, + json, + { + path: "", + message: "Expected polyvariant, found empty array", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B"]`) + testBadDecode( + "not enough arguments", + polyvariant_decode, + json, + { + path: "", + message: "Invalid number of arguments to polyvariant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B","oh"]`) + testBadDecode( + "invalid argument", + polyvariant_decode, + json, + {path: "[0]", message: "Not a number", value: Js.Json.string("oh")}, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Record.res b/test/__tests__/Record.res new file mode 100644 index 0000000..c2e42d5 --- /dev/null +++ b/test/__tests__/Record.res @@ -0,0 +1,94 @@ +open Jest +open TestUtils + +@decco type s = string +@decco type i = int +@decco type o<'a> = option<'a> +@decco +type record = { + hey: s, + opt: option, + o: o, + @decco.default(1.0) f: float, + @decco.key("other_key") otherKey: string, +} + +describe("record", () => { + testEncode( + "record_encode", + {hey: "hey", opt: Some(100), o: Some(99), f: 1.5, otherKey: "!"}, + record_encode, + `{"hey":"hey","opt":100,"o":99,"f":1.5,"other_key":"!"}`, + ) + + describe("record_decode", () => { + describe( + "good", + () => { + let json = Js.Json.parseExn(`{"hey":"hey","opt":100,"o":99,"f":1.5,"other_key":"!"}`) + testGoodDecode( + "base case", + record_decode, + json, + {hey: "hey", opt: Some(100), o: Some(99), f: 1.5, otherKey: "!"}, + ) + + let json = Js.Json.parseExn(`{"hey":"hey","other_key":"!"}`) + testGoodDecode( + "missing optional", + record_decode, + json, + {hey: "hey", opt: None, o: None, f: 1.0, otherKey: "!"}, + ) + + let json: Js.Json.t = %raw(`{"hey":"hey","other_key":"!","opt": undefined}`) + testGoodDecode( + "optional field set to undefined", + record_decode, + json, + {hey: "hey", opt: None, o: None, f: 1.0, otherKey: "!"}, + ) + }, + ) + + describe( + "bad", + () => { + testBadDecode( + "non-object", + record_decode, + Js.Json.number(12.), + { + path: "", + message: "Not an object", + value: Js.Json.number(12.), + }, + ) + + let json = Js.Json.parseExn(`{"ya":100}`) + testBadDecode( + "missing field", + record_decode, + json, + { + path: ".hey", + message: "Not a string", + value: Js.Json.null, + }, + ) + + let json = Js.Json.parseExn(`{"hey":9,"ya":10}`) + testBadDecode( + "invalid field type", + record_decode, + json, + { + path: ".hey", + message: "Not a string", + value: Js.Json.number(9.), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Recursion.re b/test/__tests__/Recursion.re deleted file mode 100644 index d345f69..0000000 --- a/test/__tests__/Recursion.re +++ /dev/null @@ -1,126 +0,0 @@ -open Jest; -open TestUtils; - -module type Rec = { - [@decco] type basic = Basic(basic) | End; - [@decco] type nested = Nested(option(nested)); - [@decco] type tuple = Tuple((int, tuple)) | End; - [@decco] type record = { r: option(record) }; -}; - -module Rec: Rec = { - [@decco] type basic = Basic(basic) | End; - [@decco] type nested = Nested(option(nested)); - [@decco] type tuple = Tuple((int, tuple)) | End; - [@decco] type record = { r: option(record) }; -}; - -module MutuallyRec = { - [@decco] type inttree = - | Empty - | Node(node) - [@decco] and node = { - value: int, - left: inttree, - right: inttree, - }; -}; - -[@decco] type nonRecVariant = int; -[@decco] type nonRecRecord = int; - -module type NonRec = { - [@decco] type nonrec nonRecVariant = Var(nonRecVariant); - [@decco] type nonrec nonRecRecord = { num: nonRecRecord }; -}; - -module NonRec: NonRec = { - [@decco] type nonrec nonRecVariant = Var(nonRecVariant); - [@decco] type nonrec nonRecRecord = { num: nonRecRecord }; -}; - -describe("variant", () => { - describe("basic", () => { - let v = Rec.Basic(Basic(End)); - let jsonStr = {|["Basic",["Basic",["End"]]]|}; - - testEncode("encode", v, Rec.basic_encode, jsonStr); - testGoodDecode("decode", Rec.basic_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("nested", () => { - let v = Rec.Nested(Some(Nested(None))); - let jsonStr = {|["Nested",["Nested",null]]|}; - - testEncode("encode", v, Rec.nested_encode, jsonStr); - testGoodDecode("decode", Rec.nested_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("tuple", () => { - let v = Rec.Tuple((0, Tuple((1, End)))); - let jsonStr = {|["Tuple",[0,["Tuple",[1,["End"]]]]]|}; - - testEncode("encode", v, Rec.tuple_encode, jsonStr); - testGoodDecode("decode", Rec.tuple_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("nonrec", () => { - let v = NonRec.Var(5); - let jsonStr = {|["Var",5]|}; - - testEncode("encode", v, NonRec.nonRecVariant_encode, jsonStr); - testGoodDecode("decode", NonRec.nonRecVariant_decode, Js.Json.parseExn(jsonStr), v); - }); -}); - -describe("record", () => { - describe("rec", () => { - let v = { Rec.r: Some({ r: None }) }; - let jsonStr = {|{"r":{"r":null}}|}; - - testEncode("encode", v, Rec.record_encode, jsonStr); - testGoodDecode("decode", Rec.record_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("nonrec", () => { - let v = { NonRec.num: 72 }; - let jsonStr = {|{"num":72}|}; - - testEncode("encode", v, NonRec.nonRecRecord_encode, jsonStr); - testGoodDecode("decode", NonRec.nonRecRecord_decode, Js.Json.parseExn(jsonStr), v); - }); -}); - -describe("mutually recursive", () => { - describe("basic", () => { - let v = MutuallyRec.Node({ - value: 0, - left: Empty, - right: Empty, - }); - let jsonStr = {|["Node",{"value":0,"left":["Empty"],"right":["Empty"]}]|}; - - testEncode("encode", v, MutuallyRec.inttree_encode, jsonStr); - testGoodDecode("decode", MutuallyRec.inttree_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("nested", () => { - let v = MutuallyRec.Node({ - value: 0, - left: Node({ - value: 1, - left: Empty, - right: Empty, - }), - right: Node({ - value: 2, - left: Empty, - right: Empty, - }), - }); - let jsonStr = {|["Node",{"value":0,"left":["Node",{"value":1,"left":["Empty"],"right":["Empty"]}],"right":["Node",{"value":2,"left":["Empty"],"right":["Empty"]}]}]|}; - - testEncode("encode", v, MutuallyRec.inttree_encode, jsonStr); - testGoodDecode("decode", MutuallyRec.inttree_decode, Js.Json.parseExn(jsonStr), v); - }); -}); diff --git a/test/__tests__/Recursion.res b/test/__tests__/Recursion.res new file mode 100644 index 0000000..1458764 --- /dev/null +++ b/test/__tests__/Recursion.res @@ -0,0 +1,128 @@ +open Jest +open TestUtils + +module type Rec = { + @decco type rec basic = Basic(basic) | End + @decco type rec nested = Nested(option) + @decco type rec tuple = Tuple((int, tuple)) | End + @decco type rec record = {r: option} +} + +module Rec: Rec = { + @decco type rec basic = Basic(basic) | End + @decco type rec nested = Nested(option) + @decco type rec tuple = Tuple((int, tuple)) | End + @decco type rec record = {r: option} +} + +module MutuallyRec = { + @decco + type rec inttree = + | Empty + | Node(node) + @decco + and node = { + value: int, + left: inttree, + right: inttree, + } +} + +@decco type nonRecVariant = int +@decco type nonRecRecord = int + +module type NonRec = { + @decco type nonRecVariant = Var(nonRecVariant) + @decco type nonRecRecord = {num: nonRecRecord} +} + +module NonRec: NonRec = { + @decco type nonRecVariant = Var(nonRecVariant) + @decco type nonRecRecord = {num: nonRecRecord} +} + +describe("variant", () => { + describe("basic", () => { + let v = Rec.Basic(Basic(End)) + let jsonStr = `["Basic",["Basic",["End"]]]` + + testEncode("encode", v, Rec.basic_encode, jsonStr) + testGoodDecode("decode", Rec.basic_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("nested", () => { + let v = Rec.Nested(Some(Nested(None))) + let jsonStr = `["Nested",["Nested",null]]` + + testEncode("encode", v, Rec.nested_encode, jsonStr) + testGoodDecode("decode", Rec.nested_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("tuple", () => { + let v = Rec.Tuple((0, Tuple((1, End)))) + let jsonStr = `["Tuple",[0,["Tuple",[1,["End"]]]]]` + + testEncode("encode", v, Rec.tuple_encode, jsonStr) + testGoodDecode("decode", Rec.tuple_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("nonrec", () => { + let v = NonRec.Var(5) + let jsonStr = `["Var",5]` + + testEncode("encode", v, NonRec.nonRecVariant_encode, jsonStr) + testGoodDecode("decode", NonRec.nonRecVariant_decode, Js.Json.parseExn(jsonStr), v) + }) +}) + +describe("record", () => { + describe("rec", () => { + let v = {Rec.r: Some({r: None})} + let jsonStr = `{"r":{"r":null}}` + + testEncode("encode", v, Rec.record_encode, jsonStr) + testGoodDecode("decode", Rec.record_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("nonrec", () => { + let v = {NonRec.num: 72} + let jsonStr = `{"num":72}` + + testEncode("encode", v, NonRec.nonRecRecord_encode, jsonStr) + testGoodDecode("decode", NonRec.nonRecRecord_decode, Js.Json.parseExn(jsonStr), v) + }) +}) + +describe("mutually recursive", () => { + describe("basic", () => { + let v = MutuallyRec.Node({ + value: 0, + left: Empty, + right: Empty, + }) + let jsonStr = `["Node",{"value":0,"left":["Empty"],"right":["Empty"]}]` + + testEncode("encode", v, MutuallyRec.inttree_encode, jsonStr) + testGoodDecode("decode", MutuallyRec.inttree_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("nested", () => { + let v = MutuallyRec.Node({ + value: 0, + left: Node({ + value: 1, + left: Empty, + right: Empty, + }), + right: Node({ + value: 2, + left: Empty, + right: Empty, + }), + }) + let jsonStr = `["Node",{"value":0,"left":["Node",{"value":1,"left":["Empty"],"right":["Empty"]}],"right":["Node",{"value":2,"left":["Empty"],"right":["Empty"]}]}]` + + testEncode("encode", v, MutuallyRec.inttree_encode, jsonStr) + testGoodDecode("decode", MutuallyRec.inttree_decode, Js.Json.parseExn(jsonStr), v) + }) +}) diff --git a/test/__tests__/SimpleVar.res b/test/__tests__/SimpleVar.res new file mode 100644 index 0000000..a104f38 --- /dev/null +++ b/test/__tests__/SimpleVar.res @@ -0,0 +1,34 @@ +open Jest +open Expect +open TestUtils + +@decco type s = string +@decco type simpleVar<'a> = 'a + +describe("simpleVar", () => { + test("simpleVar_encode", () => { + let v: simpleVar = "yeah" + let json = simpleVar_encode(s_encode, v) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONString(v2) => expect(v2)->toBe("yeah") + | _ => failwith("Not a JSONString") + } + }) + + describe("simpleVar_decode", () => { + testGoodDecode("good", simpleVar_decode(s_decode, ...), Js.Json.string("yeah"), "yeah") + + testBadDecode( + "bad", + simpleVar_decode(s_decode, ...), + Js.Json.number(12.), + { + path: "", + message: "Not a string", + value: Js.Json.number(12.), + }, + ) + }) +}) diff --git a/test/__tests__/String.res b/test/__tests__/String.res new file mode 100644 index 0000000..476258b --- /dev/null +++ b/test/__tests__/String.res @@ -0,0 +1,33 @@ +open Jest +open Expect +open TestUtils + +@decco type s = string + +describe("string", () => { + test("s_encode", () => { + let s = "yeah" + let json = s_encode(s) + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONString(s2) => expect(s2)->toBe(s) + | _ => failwith("Not a JSONString") + } + }) + + describe("s_decode", () => { + testGoodDecode("good", s_decode, Js.Json.string("heyy"), "heyy") + + testBadDecode( + "bad", + s_decode, + Js.Json.number(12.), + { + path: "", + message: "Not a string", + value: Js.Json.number(12.), + }, + ) + }) +}) diff --git a/test/__tests__/Tuple.res b/test/__tests__/Tuple.res new file mode 100644 index 0000000..ada08ac --- /dev/null +++ b/test/__tests__/Tuple.res @@ -0,0 +1,54 @@ +open Jest +open TestUtils + +@decco type t = (int, string) + +describe("tuple", () => { + testEncode("t_encode", (10, "ten"), t_encode, `[10,"ten"]`) + + describe("t_decode", () => { + let json = Js.Json.parseExn(`[10,"ten"]`) + testGoodDecode("good", t_decode, json, (10, "ten")) + + describe( + "bad", + () => { + let json = Js.Json.number(12.) + testBadDecode( + "non-array", + t_decode, + json, + { + path: "", + message: "Not a tuple", + value: json, + }, + ) + + let json = Js.Json.parseExn(`[10]`) + testBadDecode( + "non-string", + t_decode, + json, + { + path: "", + message: "Incorrect cardinality", + value: json, + }, + ) + + let json = Js.Json.parseExn(`[10,10]`) + testBadDecode( + "non-string", + t_decode, + json, + { + path: "[1]", + message: "Not a string", + value: Js.Json.number(10.), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/Unboxed.re b/test/__tests__/Unboxed.re deleted file mode 100644 index 54a04e5..0000000 --- a/test/__tests__/Unboxed.re +++ /dev/null @@ -1,27 +0,0 @@ -open Jest; -open TestUtils; - -[@unboxed] -[@decco] -type v = V(string); -[@unboxed] -[@decco] -type r = { r: int }; - -describe("unboxed", () => { - describe("variant", () => { - let v = V("xyz"); - let jsonStr = {|"xyz"|}; - - testEncode("encode", v, v_encode, jsonStr); - testGoodDecode("decode", v_decode, Js.Json.parseExn(jsonStr), v); - }); - - describe("record", () => { - let v = { r: 101 }; - let jsonStr = {|101|}; - - testEncode("encode", v, r_encode, jsonStr); - testGoodDecode("decode", r_decode, Js.Json.parseExn(jsonStr), v); - }); -}); diff --git a/test/__tests__/Unboxed.res b/test/__tests__/Unboxed.res new file mode 100644 index 0000000..305d50b --- /dev/null +++ b/test/__tests__/Unboxed.res @@ -0,0 +1,25 @@ +open Jest +open TestUtils + +@unboxed @decco +type v = V(string) +@unboxed @decco +type r = {r: int} + +describe("unboxed", () => { + describe("variant", () => { + let v = V("xyz") + let jsonStr = `"xyz"` + + testEncode("encode", v, v_encode, jsonStr) + testGoodDecode("decode", v_decode, Js.Json.parseExn(jsonStr), v) + }) + + describe("record", () => { + let v = {r: 101} + let jsonStr = `101` + + testEncode("encode", v, r_encode, jsonStr) + testGoodDecode("decode", r_decode, Js.Json.parseExn(jsonStr), v) + }) +}) diff --git a/test/__tests__/Unit.res b/test/__tests__/Unit.res new file mode 100644 index 0000000..7222d6c --- /dev/null +++ b/test/__tests__/Unit.res @@ -0,0 +1,19 @@ +open Jest +open Expect +open TestUtils + +@decco type u = unit + +describe("unit", () => { + test("u_encode", () => { + let json = u_encode() + + @ocaml.warning("-4") + switch Js.Json.classify(json) { + | Js.Json.JSONNumber(n) => expect(n)->toBe(0.) + | _ => failwith("Not a JSONNumber") + } + }) + + testGoodDecode("u_decode", u_decode, Js.Json.number(0.), ()) +}) diff --git a/test/__tests__/VarTypeInsideModule.res b/test/__tests__/VarTypeInsideModule.res new file mode 100644 index 0000000..b9a53a6 --- /dev/null +++ b/test/__tests__/VarTypeInsideModule.res @@ -0,0 +1,20 @@ +open Jest +open TestUtils +open TestModFunctor + +describe("TestMod.varType", () => { + testEncode( + "varType_encode", + TestMod.mkVarType(5, "yay"), + TestMod.varType_encode(Decco.intToJson, Decco.stringToJson, ...), + `[5,"yay"]`, + ) + + let json = Js.Json.parseExn(`[5,"yay"]`) + testGoodDecode( + "varType_decode", + TestMod.varType_decode(Decco.intFromJson, Decco.stringFromJson, ...), + json, + TestMod.mkVarType(5, "yay"), + ) +}) diff --git a/test/__tests__/Variant.res b/test/__tests__/Variant.res new file mode 100644 index 0000000..c7de30e --- /dev/null +++ b/test/__tests__/Variant.res @@ -0,0 +1,104 @@ +open Jest +open TestUtils + +@decco type i = int +@decco type s = string +@decco type variant = A | B(i) | C(i, s) + +describe("variant", () => { + describe("variant_encode", () => { + testEncode("A", A, variant_encode, `["A"]`) + testEncode("B", B(5), variant_encode, `["B",5]`) + testEncode("C", C(7, "8"), variant_encode, `["C",7,"8"]`) + }) + + describe("variant_decode", () => { + describe( + "good", + () => { + let json = Js.Json.parseExn(`["A"]`) + testGoodDecode("A", variant_decode, json, A) + let json = Js.Json.parseExn(`["B",5]`) + testGoodDecode("B", variant_decode, json, B(5)) + let json = Js.Json.parseExn(`["C",7,"8"]`) + testGoodDecode("C", variant_decode, json, C(7, "8")) + }, + ) + + describe( + "bad", + () => { + testBadDecode( + "non-variant", + variant_decode, + Js.Json.number(12.), + { + path: "", + message: "Not a variant", + value: Js.Json.number(12.), + }, + ) + + let json = Js.Json.parseExn(`["D"]`) + testBadDecode( + "bad constructor", + variant_decode, + json, + { + path: "", + message: "Invalid variant constructor", + value: Js.Json.string("D"), + }, + ) + + let json = Js.Json.parseExn(`["A",1]`) + testBadDecode( + "too many arguments", + variant_decode, + json, + { + path: "", + message: "Invalid number of arguments to variant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`[]`) + testBadDecode( + "no arguments", + variant_decode, + json, + { + path: "", + message: "Expected variant, found empty array", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B"]`) + testBadDecode( + "not enough arguments", + variant_decode, + json, + { + path: "", + message: "Invalid number of arguments to variant constructor", + value: json, + }, + ) + + let json = Js.Json.parseExn(`["B","oh"]`) + testBadDecode( + "invalid argument", + variant_decode, + json, + { + path: "[0]", + message: "Not a number", + value: Js.Json.string("oh"), + }, + ) + }, + ) + }) +}) diff --git a/test/__tests__/test.re b/test/__tests__/test.re deleted file mode 100644 index 36b0e5b..0000000 --- a/test/__tests__/test.re +++ /dev/null @@ -1,790 +0,0 @@ -open Jest; -open Expect; -open TestUtils; -/* open Decco; /* Don't open these in order to validate ppx works without it */ -open Belt.Result; */ - -[@decco] type s = string; -[@decco] type i = int; -[@decco] type i64 = int64; -[@decco] type i64Unsafe = [@decco.codec Decco.Codecs.int64Unsafe] int64; -[@decco] type f = float; -[@decco] type b = bool; -[@decco] type u = unit; -[@decco] type t = (int, string); -[@decco] type a('a) = array('a); -[@decco] type l('a) = list('a); -[@decco] type o('a) = option('a); -[@decco] type r('v, 'e) = Belt.Result.t('v, 'e); -[@decco] type d('v) = Js.Dict.t('v); -[@decco] type simpleVar('a) = 'a; -[@decco] type j = Js.Json.t; -[@decco] type optionList = l(o(s)); -[@decco] type dictInt = d(int); -[@decco] type variant = A | B(i) | C(i, s); -[@decco] type polyvariant = [ | `A | `B(i) | `C(i, s)]; -[@decco] type record = { - hey: s, - opt: option(int), - o: o(i), - [@decco.default 1.0] f: float, - [@decco.key "other_key"] otherKey: string, -}; - -[@decco] type bigV = V(array(option(list(string)))); -[@decco] type bigR = { - bigV: bigV -}; - -[@decco] type falseable('a) = [@decco.codec Decco.Codecs.falseable] option('a); -[@decco] type magic = [@decco.codec Decco.Codecs.magic] int; - -module type TestMod = { - [@decco] type t; - [@decco] type varType('a, 'b); - - let mkT : string => t; - let mkVarType : 'a => 'b => varType('a, 'b); -}; - -module TestMod : TestMod = { - [@decco] type t = string; - [@decco] type varType('a, 'b) = ('a, 'b); - - let mkT = (s : string) : t => s; - let mkVarType = (a, b) => (a, b); -}; - -[@decco] type dependentOnTestMod = TestMod.t; - -module type EncOnly = { - [@decco.encode] type t; -}; -module EncOnly : EncOnly = { - let t_decode = 1; - [@decco.encode] type t = int; - t_decode + 1 |> ignore; /** this won't typecheck if t_decode is generated */ -}; - -module type DecOnly = { - [@decco.decode] type t; -}; -module DecOnly : DecOnly = { - let t_encode = 1; - [@decco.decode] type t = int; - t_encode + 1 |> ignore; -}; - -describe("string", () => { - test("s_encode", () => { - let s = "yeah"; - let json = s_encode(s); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONString(s2) => expect(s2) |> toBe(s) - | _ => failwith("Not a JSONString") - }; - }); - - describe("s_decode", () => { - testGoodDecode("good", s_decode, Js.Json.string("heyy"), "heyy"); - - testBadDecode("bad", s_decode, Js.Json.number(12.), { - path: "", - message: "Not a string", - value: Js.Json.number(12.) - }); - }); -}); - -describe("int", () => { - test("i_encode", () => { - let i = 24; - let json = i_encode(i); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONNumber(i2) => expect(i2) |> toBe(float_of_int(i)) - | _ => failwith("Not a JSONNumber") - }; - }); - - describe("i_decode", () => { - testGoodDecode("good", i_decode, Js.Json.number(414.), 414); - - describe("bad", () => { - let json = Js.Json.string("12."); - testBadDecode("not a number", i_decode, json, { - path: "", - message: "Not a number", - value: json - }); - - let json = Js.Json.number(5.1); - testBadDecode("not an int", i_decode, json, { - path: "", - message: "Not an integer", - value: json - }); - }); - }); -}); - -describe("int64", () => { - describe("safe", () => { - let asInt64 = 0x0FFFFFFFFFFFFFFFL; - let asFloat = 1.2882297539194265e-231; - test("i64_encode", () => { - let json = i64_encode(asInt64); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONNumber(f) => expect(f) |> toBe(asFloat) - | _ => failwith("Not a JSONNumber") - }; - }); - - describe("i64_decode", () => { - testGoodDecode("good", i64_decode, Js.Json.number(asFloat), asInt64); - - let json = Js.Json.string("12."); - testBadDecode("bad", i64_decode, json, { - path: "", - message: "Not a number", - value: json - }); - }); - }); - - describe("unsafe", () => { - let v = 11806311374010L; - - testEncode("i64Unsafe_encode", v, i64Unsafe_encode, "11806311374010"); - - describe("i64Unsafe_decode", () => { - let json = Js.Json.number(Int64.to_float(v)); - testGoodDecode("good", i64Unsafe_decode, json, v); - - let json = Js.Json.string("12."); - testBadDecode("bad", i64Unsafe_decode, json, { - path: "", - message: "Not a number", - value: json - }); - }); - }); -}); - -describe("float", () => { - test("f_encode", () => { - let v = 1.; - let json = f_encode(v); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONNumber(v2) => expect(v2) |> toBe(v) - | _ => failwith("Not a JSONNumber") - }; - }); - - describe("f_decode", () => { - testGoodDecode("good", f_decode, Js.Json.number(12.), 12.); - - testBadDecode("bad", f_decode, Js.Json.string("12."), { - path: "", - message: "Not a number", - value: Js.Json.string("12.") - }); - }); -}); - -describe("bool", () => { - test("b_encode", () => - b_encode(true) - |> Js.Json.classify - |> expect - |> toBe(Js.Json.JSONTrue) - ); - - describe("b_decode", () => { - testGoodDecode("good", b_decode, Js.Json.boolean(false), false); - - testBadDecode("bad", b_decode, Js.Json.string("12."), { - path: "", - message: "Not a boolean", - value: Js.Json.string("12.") - }); - }); -}); - -describe("unit", () => { - test("u_encode", () => { - let json = u_encode(); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONNumber(n) => expect(n) |> toBe(0.) - | _ => failwith("Not a JSONNumber") - }; - }); - - testGoodDecode("u_decode", u_decode, Js.Json.number(0.), ()); -}); - -describe("tuple", () => { - testEncode("t_encode", (10, "ten"), t_encode, {|[10,"ten"]|}); - - describe("t_decode", () => { - let json = {|[10,"ten"]|} |> Js.Json.parseExn; - testGoodDecode("good", t_decode, json, (10, "ten")); - - describe("bad", () => { - let json = Js.Json.number(12.); - testBadDecode("non-array", t_decode, json, { - path: "", - message: "Not a tuple", - value: json - }); - - let json = {|[10]|} |> Js.Json.parseExn; - testBadDecode("non-string", t_decode, json, { - path: "", - message: "Incorrect cardinality", - value: json - }); - - let json = {|[10,10]|} |> Js.Json.parseExn; - testBadDecode("non-string", t_decode, json, { - path: "[1]", - message: "Not a string", - value: Js.Json.number(10.) - }); - }); - }); -}); - -describe("array", () => { - testEncode("a_encode", [|"10", "20"|], a_encode(s_encode), {|["10","20"]|}); - - describe("a_decode", () => { - let json = [|"10","20"|] - |> Js.Array.map(Js.Json.string) - |> Js.Json.array; - testGoodDecode("good", a_decode(s_decode),json, [|"10","20"|]); - - describe("bad", () => { - testBadDecode("non-array", a_decode(s_decode), Js.Json.number(12.), { - message: "Not an array", - path: "", - value: Js.Json.number(12.), - }); - - testBadDecode("failed elem", a_decode(s_decode), - Js.Json.array([| - Js.Json.string("str"), Js.Json.number(123.) - |]), { - message: "Not a string", - path: "[1]", - value: Js.Json.number(123.), - } - ); - }); - }); -}); - -describe("list", () => { - testEncode("l_encode", ["10", "20"], l_encode(s_encode), {|["10","20"]|}); - - describe("l_decode", () => { - let json = [|"10", "20"|] - |> Js.Array.map(Js.Json.string) - |> Js.Json.array; - testGoodDecode("good", l_decode(s_decode), json, ["10", "20"]); - - describe("bad", () => { - testBadDecode("non-array", l_decode(s_decode), Js.Json.number(12.), { - message: "Not an array", - path: "", - value: Js.Json.number(12.), - }); - - testBadDecode("failed elem", l_decode(s_decode), - Js.Json.array([| - Js.Json.string("str"), Js.Json.number(123.) - |]), { - message: "Not a string", - path: "[1]", - value: Js.Json.number(123.), - } - ); - }); - }); -}); - -describe("option", () => { - describe("o_encode", () => { - test("none", () => - o_encode(s_encode, None) - |> Js.Json.classify - |> expect - |> toBe(Js.Json.JSONNull) - ); - - test("some", () => { - let v = Some("yeah"); - let json = o_encode(s_encode, v); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONString(v2) => expect(v2) |> toBe("yeah") - | _ => failwith("Not a JSONString") - }; - }); - }); - - describe("o_decode", () => { - describe("good", () => { - testGoodDecode("null", o_decode(s_decode), Js.Json.null, None); - testGoodDecode("undefined", o_decode(s_decode), [%raw {|undefined|}], None); - testGoodDecode("non-null", o_decode(s_decode), Js.Json.string("heyy"), Some("heyy")); - }); - - testBadDecode("bad", o_decode(s_decode), Js.Json.number(12.), { - path: "", - message: "Not a string", - value: Js.Json.number(12.) - }); - }); -}); - -describe("result", () => { - let enc = r_encode(s_encode, i_encode); - let dec = r_decode(s_decode, i_decode); - - describe("r_encode", () => { - testEncode("ok", Belt.Result.Ok("oaky"), enc, {|["Ok","oaky"]|}); - testEncode("error", Belt.Result.Error(404), enc, {|["Error",404]|}); - }); - - describe("r_decode", () => { - describe("good", () => { - let json = "[\"Ok\",\"yess\"]" |> Js.Json.parseExn; - testGoodDecode("ok", dec, json, Ok("yess")); - - let json = "[\"Error\",911]" |> Js.Json.parseExn; - testGoodDecode("error", dec, json, Error(911)); - }); - - describe("bad", () => { - let json = Js.Json.number(12.); - testBadDecode("not an array", dec, json, { - path: "", - message: "Not an array", - value: json - }); - - let json = "[]" |> Js.Json.parseExn; - testBadDecode("length != 2", dec, json, { - path: "", - message: "Expected exactly 2 values in array", - value: json - }); - - let json = "[0,1]" |> Js.Json.parseExn; - testBadDecode("constructor not a string", dec, json, { - path: "", - message: "Not a string", - value: Js.Json.number(0.) - }); - - let json = "[\"bad\",1]" |> Js.Json.parseExn; - testBadDecode("unrecognized constructor", dec, json, { - path: "", - message: "Expected either \"Ok\" or \"Error\"", - value: Js.Json.string("bad") - }); - - let json = "[\"Ok\",1]" |> Js.Json.parseExn; - testBadDecode("bad Ok decode", dec, json, { - path: "", - message: "Not a string", - value: Js.Json.number(1.) - }); - - let json = "[\"Error\",null]" |> Js.Json.parseExn; - testBadDecode("bad Error decode", dec, json, { - path: "", - message: "Not a number", - value: Js.Json.null - }); - }); - }); -}); - -describe("falseable", () => { - describe("falseable_encode", () => { - test("none", () => - falseable_encode(s_encode, None) - |> Js.Json.classify - |> expect - |> toBe(Js.Json.JSONFalse) - ); - - test("some", () => { - let v = Some("yeah"); - let json = falseable_encode(s_encode, v); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONString(v2) => expect(v2) |> toBe("yeah") - | _ => failwith("Not a JSONString") - }; - }); - }); - - describe("falseable_decode", () => { - describe("good", () => { - testGoodDecode("false", falseable_decode(s_decode), Js.Json.boolean(false), None); - testGoodDecode("non-false", falseable_decode(s_decode), Js.Json.string("heyy"), Some("heyy")); - }); - - testBadDecode("bad", falseable_decode(s_decode), Js.Json.null, { - path: "", - message: "Not a string", - value: Js.Json.null - }); - }); -}); - -describe("magic", () => { - let i = 24; - testGoodDecode("", magic_decode, magic_encode(i), i); -}); - -describe("simpleVar", () => { - test("simpleVar_encode", () => { - let v : simpleVar(string) = "yeah"; - let json = simpleVar_encode(s_encode, v); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONString(v2) => expect(v2) |> toBe("yeah") - | _ => failwith("Not a JSONString") - }; - }); - - describe("simpleVar_decode", () => { - testGoodDecode("good", simpleVar_decode(s_decode), Js.Json.string("yeah"), "yeah"); - - testBadDecode("bad", simpleVar_decode(s_decode), Js.Json.number(12.), { - path: "", - message: "Not a string", - value: Js.Json.number(12.) - }); - }); -}); - -describe("optionList", () => { - testEncode( - "optionList_encode", [ Some("a"), None, Some("b") ], - optionList_encode, {|["a",null,"b"]|} - ); - - describe("optionList_decode", () => { - let json = {|["a",null,"b"]|} |> Js.Json.parseExn; - testGoodDecode("good", optionList_decode, json, [Some("a"), None, Some("b")]); - - describe("bad", () => { - testBadDecode("non-array", optionList_decode, Js.Json.number(12.), { - path: "", - message: "Not an array", - value: Js.Json.number(12.) - }); - - let json = {|[null, 3]|} |> Js.Json.parseExn; - testBadDecode("non-string", optionList_decode, json, { - path: "[1]", - message: "Not a string", - value: Js.Json.number(3.) - }); - }); - }); -}); - -describe("dictInt", () => { - testEncode( - "dictInt_encode", Js.Dict.fromArray([|("foo", 1), ("bar", 2)|]), - dictInt_encode, {|{"foo":1,"bar":2}|} - ); - - describe("dictInt_decode", () => { - let json = {|{"foo":1,"bar":2}|} |> Js.Json.parseExn; - testGoodDecode("good", dictInt_decode, json, Js.Dict.fromArray([|("foo", 1), ("bar", 2)|])); - - describe("bad", () => { - let badDict = {|{"foo":1,"bar":"baz"}|} |> Js.Json.parseExn; - testBadDecode("mixed types", dictInt_decode, badDict, { - path: ".bar", - message: "Not a number", - value: Js.Json.string("baz") - }); - }); - }); -}); - -describe("Js.Json.t", () => { - test("j_encode", () => { - let v = Js.Json.string("jay"); - let json = j_encode(v); - expect(json) - |> toEqual(v); - }); - - let json = Js.Json.number(12.); - testGoodDecode("j_decode", j_decode, json, json); -}); - -describe("variant", () => { - describe("variant_encode", () => { - testEncode("A", A, variant_encode, {|["A"]|}); - testEncode("B", B(5), variant_encode, {|["B",5]|}); - testEncode("C", C(7, "8"), variant_encode, {|["C",7,"8"]|}); - }); - - describe("variant_decode", () => { - describe("good", () => { - let json = {|["A"]|} |> Js.Json.parseExn; - testGoodDecode("A", variant_decode, json, A); - let json = {|["B",5]|} |> Js.Json.parseExn; - testGoodDecode("B", variant_decode, json, B(5)); - let json = {|["C",7,"8"]|} |> Js.Json.parseExn; - testGoodDecode("C", variant_decode, json, C(7, "8")); - }); - - describe("bad", () => { - testBadDecode("non-variant", variant_decode, Js.Json.number(12.), { - path: "", - message: "Not a variant", - value: Js.Json.number(12.) - }); - - let json = {|["D"]|} |> Js.Json.parseExn; - testBadDecode("bad constructor", variant_decode, json, { - path: "", - message: "Invalid variant constructor", - value: Js.Json.string("D") - }); - - let json = {|["A",1]|} |> Js.Json.parseExn; - testBadDecode("too many arguments", variant_decode, json, { - path: "", - message: "Invalid number of arguments to variant constructor", - value: json - }); - - let json = {|[]|} |> Js.Json.parseExn; - testBadDecode("no arguments", variant_decode, json, { - path: "", - message: "Expected variant, found empty array", - value: json - }); - - let json = {|["B"]|} |> Js.Json.parseExn; - testBadDecode("not enough arguments", variant_decode, json, { - path: "", - message: "Invalid number of arguments to variant constructor", - value: json - }); - - let json = {|["B","oh"]|} |> Js.Json.parseExn; - testBadDecode("invalid argument", variant_decode, json, { - path: "[0]", - message: "Not a number", - value: Js.Json.string("oh") - }); - }); - }); -}); - -describe("polyvariant", () => { - describe("polyvariant_encode", () => { - testEncode("A", `A, polyvariant_encode, {|["A"]|}); - testEncode("B", `B(5), polyvariant_encode, {|["B",5]|}); - testEncode("C", `C(7, "8"), polyvariant_encode, {|["C",7,"8"]|}); - }); - - describe("polyvariant_decode", () => { - describe("good", () => { - let json = {|["A"]|} |> Js.Json.parseExn; - testGoodDecode("A", polyvariant_decode, json, `A); - let json = {|["B",5]|} |> Js.Json.parseExn; - testGoodDecode("B", polyvariant_decode, json, `B(5)); - let json = {|["C",7,"8"]|} |> Js.Json.parseExn; - testGoodDecode("C", polyvariant_decode, json, `C(7, "8")); - }); - describe("bad", () => { - testBadDecode( - "non-polyvariant", - polyvariant_decode, - Js.Json.number(12.), - {path: "", message: "Not a polyvariant", value: Js.Json.number(12.)}, - ); - - let json = {|["D"]|} |> Js.Json.parseExn; - testBadDecode( - "bad constructor", - polyvariant_decode, - json, - { - path: "", - message: "Invalid polyvariant constructor", - value: Js.Json.string("D"), - }, - ); - - let json = {|["A",1]|} |> Js.Json.parseExn; - testBadDecode( - "too many arguments", - polyvariant_decode, - json, - { - path: "", - message: "Invalid number of arguments to polyvariant constructor", - value: json, - }, - ); - - let json = {|[]|} |> Js.Json.parseExn; - testBadDecode( - "no arguments", - polyvariant_decode, - json, - { - path: "", - message: "Expected polyvariant, found empty array", - value: json, - }, - ); - - let json = {|["B"]|} |> Js.Json.parseExn; - testBadDecode( - "not enough arguments", - polyvariant_decode, - json, - { - path: "", - message: "Invalid number of arguments to polyvariant constructor", - value: json, - }, - ); - - let json = {|["B","oh"]|} |> Js.Json.parseExn; - testBadDecode( - "invalid argument", - polyvariant_decode, - json, - {path: "[0]", message: "Not a number", value: Js.Json.string("oh")}, - ); - }); - }); -}); - -describe("record", () => { - testEncode( - "record_encode", - { hey: "hey", opt: Some(100), o: Some(99), f: 1.5, otherKey: "!" }, - record_encode, {|{"hey":"hey","opt":100,"o":99,"f":1.5,"other_key":"!"}|} - ); - - describe("record_decode", () => { - describe("good", () => { - let json = {|{"hey":"hey","opt":100,"o":99,"f":1.5,"other_key":"!"}|} |> Js.Json.parseExn; - testGoodDecode("base case", record_decode, json, { hey: "hey", opt: Some(100), o: Some(99), f: 1.5, otherKey: "!" }); - - let json = {|{"hey":"hey","other_key":"!"}|} |> Js.Json.parseExn; - testGoodDecode("missing optional", record_decode, json, { hey: "hey", opt: None, o: None, f: 1.0, otherKey: "!" }); - - let json: Js.Json.t = [%raw {|{"hey":"hey","other_key":"!","opt": undefined}|}] - testGoodDecode("optional field set to undefined", record_decode, json, { hey: "hey", opt: None, o: None, f: 1.0, otherKey: "!" }); - }); - - describe("bad", () => { - testBadDecode("non-object", record_decode, Js.Json.number(12.), { - path: "", - message: "Not an object", - value: Js.Json.number(12.) - }); - - let json = {|{"ya":100}|} |> Js.Json.parseExn; - testBadDecode("missing field", record_decode, json, { - path: ".hey", - message: "Not a string", - value: Js.Json.null - }); - - let json = {|{"hey":9,"ya":10}|} |> Js.Json.parseExn; - testBadDecode("invalid field type", record_decode, json, { - path: ".hey", - message: "Not a string", - value: Js.Json.number(9.) - }); - }); - }); -}); - -describe("Ldot", () => { - test("dependentOnTestMod_encode", () => { - let s = TestMod.mkT("yeah"); - let json = dependentOnTestMod_encode(s); - - [@ocaml.warning "-4"] - switch (Js.Json.classify(json)) { - | Js.Json.JSONString(s2) => expect(TestMod.mkT(s2)) |> toBe(s) - | _ => failwith("Not a JSONString") - }; - }); - - describe("dependentOnTestMod_decode", () => { - testGoodDecode("good", dependentOnTestMod_decode, Js.Json.string("heyy"), TestMod.mkT("heyy")); - - testBadDecode("bad", dependentOnTestMod_decode, Js.Json.number(12.), { - path: "", - message: "Not a string", - value: Js.Json.number(12.) - }); - }); -}); - -describe("TestMod.varType", () => { - testEncode( - "varType_encode", TestMod.mkVarType(5, "yay"), - TestMod.varType_encode(Decco.intToJson, Decco.stringToJson), {|[5,"yay"]|} - ); - - let json = {|[5,"yay"]|} |> Js.Json.parseExn; - testGoodDecode("varType_decode", - TestMod.varType_decode(Decco.intFromJson, Decco.stringFromJson), - json, TestMod.mkVarType(5, "yay") - ); -}); - -describe("long path", () => { - test("good", () => { - let v = { bigV: V([|Some(["yes"])|]) }; - let decoded = bigR_decode(bigR_encode(v)); - switch decoded { - | Belt.Result.Error(_) => failwith("Decode failure") - | Belt.Result.Ok(actual) => expect(actual) |> toEqual(v) - }; - }); - - describe("bad", () => { - let json = {|{"bigV":["V",[null,["","",1]]]}|} |> Js.Json.parseExn; - testBadDecode("bad", bigR_decode, json, { - path: ".bigV[0][1][2]", - message: "Not a string", - value: Js.Json.number(1.) - }); - }); -}); diff --git a/test/functors/DecOnlyFunctor.res b/test/functors/DecOnlyFunctor.res new file mode 100644 index 0000000..baf620d --- /dev/null +++ b/test/functors/DecOnlyFunctor.res @@ -0,0 +1,8 @@ +module type DecOnly = { + @decco.decode type t +} +module DecOnly: DecOnly = { + let t_encode = 1 + @decco.decode type t = int + ignore(t_encode + 1) +} diff --git a/test/functors/EncOnlyFunctor.res b/test/functors/EncOnlyFunctor.res new file mode 100644 index 0000000..798ea33 --- /dev/null +++ b/test/functors/EncOnlyFunctor.res @@ -0,0 +1,9 @@ +module type EncOnly = { + @decco.encode type t +} +module EncOnly: EncOnly = { + let t_decode = 1 + @decco.encode type t = int + ignore(t_decode + 1) + @@ocaml.doc(" this won't typecheck if t_decode is generated ") +} diff --git a/test/functors/TestModFunctor.res b/test/functors/TestModFunctor.res new file mode 100644 index 0000000..3b7bf3d --- /dev/null +++ b/test/functors/TestModFunctor.res @@ -0,0 +1,17 @@ +module type TestMod = { + @decco type t + @decco type varType<'a, 'b> + + let mkT: string => t + let mkVarType: ('a, 'b) => varType<'a, 'b> +} + +module TestMod: TestMod = { + @decco type t = string + @decco type varType<'a, 'b> = ('a, 'b) + + let mkT = (s: string): t => s + let mkVarType = (a, b) => (a, b) +} + +@decco type dependentOnTestMod = TestMod.t diff --git a/yarn.lock b/yarn.lock index c5b7ed4..6a1f6c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,14 @@ # yarn lockfile v1 +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -9,12 +17,25 @@ dependencies: "@babel/highlight" "^7.12.13" +"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== + dependencies: + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" + "@babel/compat-data@^7.13.15": version "7.13.15" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.15.tgz#7e8eea42d0b64fda2b375b22d06c605222e848f4" integrity sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA== -"@babel/core@^7.1.0", "@babel/core@^7.7.5": +"@babel/compat-data@^7.23.5": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" + integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== + +"@babel/core@^7.1.0": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.16.tgz#7756ab24396cc9675f1c3fcd5b79fcce192ea96a" integrity sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q== @@ -35,6 +56,27 @@ semver "^6.3.0" source-map "^0.5.0" +"@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" + integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.2" + "@babel/generator" "^7.24.4" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.24.4" + "@babel/parser" "^7.24.4" + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.13.16": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.16.tgz#0befc287031a201d84cdfc173b46b320ae472d14" @@ -44,6 +86,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" + integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== + dependencies: + "@babel/types" "^7.24.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-compilation-targets@^7.13.16": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" @@ -54,6 +106,22 @@ browserslist "^4.14.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-function-name@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" @@ -63,6 +131,14 @@ "@babel/template" "^7.12.13" "@babel/types" "^7.12.13" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -70,6 +146,13 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" @@ -84,6 +167,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-module-imports@^7.22.15": + version "7.24.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" + integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== + dependencies: + "@babel/types" "^7.24.0" + "@babel/helper-module-transforms@^7.13.14": version "7.13.14" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz#e600652ba48ccb1641775413cb32cfa4e8b495ef" @@ -98,6 +188,17 @@ "@babel/traverse" "^7.13.13" "@babel/types" "^7.13.14" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -110,6 +211,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== +"@babel/helper-plugin-utils@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" + integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== + "@babel/helper-replace-supers@^7.13.12": version "7.13.12" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" @@ -127,6 +233,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" @@ -134,16 +247,38 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" + integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + "@babel/helpers@^7.13.16": version "7.13.17" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.17.tgz#b497c7a00e9719d5b613b8982bda6ed3ee94caf6" @@ -153,6 +288,15 @@ "@babel/traverse" "^7.13.17" "@babel/types" "^7.13.17" +"@babel/helpers@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" + integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== + dependencies: + "@babel/template" "^7.24.0" + "@babel/traverse" "^7.24.1" + "@babel/types" "^7.24.0" + "@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" @@ -162,11 +306,26 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.16": version "7.13.16" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.16.tgz#0f18179b0448e6939b1f3f5c4c355a3a9bcdfd37" integrity sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw== +"@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" + integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -251,6 +410,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" + integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.0" + "@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" @@ -260,7 +426,16 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": +"@babel/template@^7.22.15", "@babel/template@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" + integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.24.0" + "@babel/types" "^7.24.0" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.13", "@babel/traverse@^7.13.15", "@babel/traverse@^7.13.17": version "7.13.17" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.17.tgz#c85415e0c7d50ac053d758baec98b28b2ecfeea3" integrity sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg== @@ -274,6 +449,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.24.1", "@babel/traverse@^7.7.2": + version "7.24.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" + integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== + dependencies: + "@babel/code-frame" "^7.24.1" + "@babel/generator" "^7.24.1" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.24.1" + "@babel/types" "^7.24.0" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.12", "@babel/types@^7.13.14", "@babel/types@^7.13.16", "@babel/types@^7.13.17", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.13.17" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.17.tgz#48010a115c9fba7588b4437dd68c9469012b38b4" @@ -282,25 +473,26 @@ "@babel/helper-validator-identifier" "^7.12.11" to-fast-properties "^2.0.0" +"@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" + integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== - dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" - -"@glennsl/bs-jest@0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@glennsl/bs-jest/-/bs-jest-0.6.0.tgz#b914f4fb9cf4b4562d16a5d527f0e99f476e9358" - integrity sha512-yOHJE/VFaX6tW5UKtM8yNsaneLYWYWlNGuXDjxsT9hfedGN7AO8G/viCxxG684iJbWDidwugoMaY36WQimcVnQ== +"@glennsl/rescript-jest@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@glennsl/rescript-jest/-/rescript-jest-0.11.0.tgz#0e07e0b1bfb3272bc644b57e78514220489605e9" + integrity sha512-eQLKqin80v7wviUu0ZX3zZreKkllYet3YqC1QC6Sap8tLltfBiR7U3nAA8LAkM6K+uFVsTAtOjZt6dy2TrujEQ== dependencies: - jest "^26.5.2" + jest "^27.3.1" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -318,345 +510,207 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.5.0.tgz#770800799d510f37329c508a9edd0b7b447d9abb" - integrity sha512-T48kZa6MK1Y6k4b89sexwmSF4YLeZS/Udqg3Jj3jG/cHH+N/sLFCEoXEDMOKugJQ9FxPN1osxIknvKkxt6MKyw== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-message-util "^25.5.0" - jest-util "^25.5.0" - slash "^3.0.0" - -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.5.4.tgz#3ef7412f7339210f003cdf36646bbca786efe7b4" - integrity sha512-3uSo7laYxF00Dg/DMgbn4xMJKmDdWvZnf89n8Xj/5/AeQ2dOQmn6b6Hkj/MleyzZWXpwv+WSdYWl4cLsy2JsoA== - dependencies: - "@jest/console" "^25.5.0" - "@jest/reporters" "^25.5.1" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^25.5.0" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-resolve-dependencies "^25.5.4" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - jest-watcher "^25.5.0" - micromatch "^4.0.2" - p-each-series "^2.1.0" - realpath-native "^2.0.0" - rimraf "^3.0.0" + jest-message-util "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" - strip-ansi "^6.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" + micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" - integrity sha512-U2VXPEqL07E/V7pSZMSQCvV5Ea4lqOlT+0ZFijl/i316cRMHvZ4qC+jBdryd+lmRetjQo0YIQr6cVPNxxK87mA== - dependencies: - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.5.0.tgz#46352e00533c024c90c2bc2ad9f2959f7f114185" - integrity sha512-9y2+uGnESw/oyOI3eww9yaxdZyHq7XvprfP/eeoCsjqKYts2yRlsHS/SgjPDV8FyMfn2nbMy8YzUk6nyvdLOpQ== - dependencies: - "@jest/types" "^25.5.0" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - lolex "^5.0.0" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^25.5.2": - version "25.5.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-25.5.2.tgz#5e45e9de8d228716af3257eeb3991cc2e162ca88" - integrity sha512-AgAS/Ny7Q2RCIj5kZ+0MuKM1wbF0WMLxbCVl/GOMoCNbODRdJ541IxJ98xnZdVSZXivKpJlNPIWa3QmY0l4CXA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/types" "^25.5.0" - expect "^25.5.0" + jest-mock "^27.5.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/types" "^27.5.1" + "@sinonjs/fake-timers" "^8.0.1" + "@types/node" "*" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/reporters@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.5.1.tgz#cb686bcc680f664c2dbaf7ed873e93aa6811538b" - integrity sha512-3jbd8pPDTuhYJ7vqiHXbSwTJQNavczPs+f1kRprRDxETeE3u6srJ+f0NPuwvOmk+lmunZzPkYWIFZDLHQPkviw== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^25.5.1" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-worker "^25.5.0" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^3.1.0" - terminal-link "^2.0.0" - v8-to-istanbul "^4.1.3" - optionalDependencies: - node-notifier "^6.0.0" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.5.0.tgz#df5c20d6050aa292c2c6d3f0d2c7606af315bd1b" - integrity sha512-eIGx0xN12yVpMcPaVpjXPnn3N30QGJCJQSkEDUt9x1fI1Gdvb07Ml6K5iN2hG7NmMP6FDmtPEssE3z6doOYUwQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + v8-to-istanbul "^8.1.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.5.0.tgz#139a043230cdeffe9ba2d8341b27f2efc77ce87c" - integrity sha512-oV+hPJgXN7IQf/fHWkcS99y0smKLU2czLBJ9WA0jHITLst58HpQMtzSYxzaBvYc6U5U6jfoMthqsUlUlbRXs0A== - dependencies: - "@jest/console" "^25.5.0" - "@jest/types" "^25.5.0" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^25.5.4": - version "25.5.4" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.5.4.tgz#9b4e685b36954c38d0f052e596d28161bdc8b737" - integrity sha512-pTJGEkSeg1EkCO2YWq6hbFvKNXk8ejqlxiOg1jBNLnWrgXOkdY6UmqZpwGFXNnRt9B8nO1uWMzLLZ4eCmhkPNA== - dependencies: - "@jest/test-result" "^25.5.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-runner "^25.5.4" - jest-runtime "^25.5.4" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^25.5.1": - version "25.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.5.1.tgz#0469ddc17699dd2bf985db55fa0fb9309f5c2db3" - integrity sha512-Y8CEoVwXb4QwA6Y/9uDkn0Xfz0finGkieuV0xkdF9UtZGJeLukD5nLkaVrVsODB1ojRWlaoD0AJZpVHCSnJEvg== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^25.5.0" - babel-plugin-istanbul "^6.0.0" - chalk "^3.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^25.5.1" - jest-regex-util "^25.2.6" - jest-util "^25.5.0" - micromatch "^4.0.2" - pirates "^4.0.1" - realpath-native "^2.0.0" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" + "@jest/types" "^27.5.1" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" + micromatch "^4.0.4" + pirates "^4.0.4" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" - "@types/yargs" "^15.0.0" + "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -664,14 +718,19 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@sinonjs/fake-timers@^8.0.1": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" + integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== dependencies: "@sinonjs/commons" "^1.7.0" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/babel__core@^7.0.0": version "7.1.14" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.14.tgz#faaeefc4185ec71c389f4501ee5ec84b170cc402" integrity sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g== @@ -682,6 +741,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.2" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" @@ -723,14 +793,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -743,25 +805,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615" integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/prettier@^1.19.0": - version "1.19.1" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" - integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== - -"@types/prettier@^2.0.0": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.3.tgz#ef65165aea2924c9359205bf748865b8881753c0" - integrity sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA== - -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/prettier@^2.1.5": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/stack-utils@^2.0.0": version "2.0.0" @@ -773,26 +820,18 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== -"@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== +"@types/yargs@^16.0.0": + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== dependencies: "@types/yargs-parser" "*" -abab@^2.0.0, abab@^2.0.3, abab@^2.0.5: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -acorn-globals@^4.3.2: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -801,40 +840,27 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.0.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.0, acorn@^7.1.1: +acorn@^7.1.1: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.1.tgz#fb0026885b9ac9f48bac1e185e4af472971149ff" - integrity sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g== +acorn@^8.2.4: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -ajv@^6.12.3: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" + debug "4" ansi-escapes@^4.2.1: version "4.3.2" @@ -843,16 +869,16 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.21.3" -ansi-regex@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" - integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -867,13 +893,10 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== anymatch@^3.0.3: version "3.1.2" @@ -890,148 +913,46 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== - -babel-jest@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.5.1.tgz#bc2e6101f849d6f6aec09720ffc7bc5332e62853" - integrity sha512-9dA9+GmMjIzgPnYtkhBg73gOo/RHqPmLruP3BaGL4KEX3Dwz6pI8auSN8G8+iuEG90+GSswyKvslN+JYSaacaQ== - dependencies: - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" + istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.5.0.tgz#129c80ba5c7fc75baf3a45b93e2e372d57ca2677" - integrity sha512-u+/W+WAjMlvoocYGTwthAiQSxDcJAyHpQ6oWlHdFZaaN+Rlk8Q7iiwDPg2lN/FyJtAYnKjFxbn7xus4HCFkg5g== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__traverse" "^7.0.6" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-preset-current-node-syntax@^0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.4.tgz#826f1f8e7245ad534714ba001f84f7e906c3b615" - integrity sha512-5/INNCYhUGqw7VbVjT/hb3ucjgkVHKXY7lX3ZjlN4gm565VyFmJUrJ/h+h16ECVB38R/9SF6aACydpKMLZ/c9w== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - babel-preset-current-node-syntax@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" @@ -1050,20 +971,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.5.0.tgz#c1d7f191829487a907764c65307faa0e66590b49" - integrity sha512-8ZczygctQkBU+63DtSOKGh7tFL0CeCuz+1ieud9lJ1WPQ9O6A1a/r+LGn6Y705PA6whHQ3T1XuB/PmpfNYf8Fw== - dependencies: - babel-plugin-jest-hoist "^25.5.0" - babel-preset-current-node-syntax "^0.1.2" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - babel-plugin-jest-hoist "^26.6.2" + babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -1071,26 +984,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1099,23 +992,7 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: +braces@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1127,13 +1004,6 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - browserslist@^4.14.5: version "4.16.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.5.tgz#952825440bca8913c62d0021334cbe928ef062ae" @@ -1145,10 +1015,15 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.71" -bs-platform@9: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-9.0.2.tgz#a6eac70eb8924a322556dacaccbfbc9b2a0d3a37" - integrity sha512-Ye9JqJ4Oa7mcjjoOVRYI8Uc2Cf8N7jQLWDcdUplY7996d/YErSR7WitmV7XnSwr4EvdrbwjEsg1NxNjUQv3ChA== +browserslist@^4.22.2: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" bser@2.1.1: version "2.1.1" @@ -1162,54 +1037,32 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.0.0, camelcase@^5.3.1: +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== -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001214: version "1.0.30001214" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz#70f153c78223515c6d37a9fde6cd69250da9d872" integrity sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +caniuse-lite@^1.0.30001587: + version "1.0.30001612" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001612.tgz#d34248b4ec1f117b70b24ad9ee04c90e0b8a14ae" + integrity sha512-lFgnZ07UhaCcsSZgWW0K5j4e69dK1u/ltrL9lTUiFOwNHs12S3UMIEYgBV0Z6C6hRDev7iRnMzzYmKabYdXF9g== -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1218,14 +1071,6 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" @@ -1239,34 +1084,24 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" co@^4.6.0: version "4.6.0" @@ -1278,14 +1113,6 @@ collect-v8-coverage@^1.0.0: resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1315,18 +1142,13 @@ colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -combined-stream@^1.0.6, combined-stream@~1.0.6: +combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1339,28 +1161,12 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cross-spawn@^7.0.0: +cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1369,7 +1175,7 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.1, cssom@^0.4.4: +cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== @@ -1379,29 +1185,13 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.0.0, cssstyle@^2.3.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== dependencies: cssom "~0.3.6" -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -1411,12 +1201,12 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +debug@4, debug@^4.3.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: - ms "2.0.0" + ms "2.1.2" debug@^4.1.0, debug@^4.1.1: version "4.3.1" @@ -1425,20 +1215,15 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -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: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-is@~0.1.3: version "0.1.3" @@ -1450,28 +1235,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1482,22 +1245,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== domexception@^2.0.1: version "2.0.1" @@ -1506,36 +1257,26 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - electron-to-chromium@^1.3.719: version "1.3.720" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.720.tgz#f5d66df8754d993006b7b2ded15ff7738c58bd94" integrity sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw== -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +electron-to-chromium@^1.4.668: + version "1.4.747" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.747.tgz#e37fa5b7b7e4c22607c5f59b5cf78f947266e77d" + integrity sha512-+FnSWZIAvFHbsNVmUxhEqWiaOiPMcfum1GQzlWCg/wLigVtshOsjXHyEFfmt6cFK6+HkS3QOJBv6/3OPumbBfw== + +emittery@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1558,18 +1299,6 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escodegen@^1.11.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -1587,11 +1316,6 @@ esprima@^4.0.0, esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" @@ -1602,58 +1326,19 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -esy@^0.6.10: - version "0.6.10" - resolved "https://registry.yarnpkg.com/esy/-/esy-0.6.10.tgz#918de2ad7e40793978c63b8216563408527cc25e" - integrity sha512-O+mWNPB9NJqDr3CA1PUbWUO1ZSy53ksZWivGrvbquATR5INlp3CYguwkq4BzZACg1s1bVYyhr7byjB/l1nuGRA== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" exit@^0.1.2: @@ -1661,91 +1346,15 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expect@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-25.5.0.tgz#f07f848712a2813bb59167da3fb828ca21f58bba" - integrity sha512-w7KAXo0+6qqZZhovCaBVPSIqQp7/UTcx4M9uKt2m6pd2VB1voyC8JizLRqeEqud3AAVP02g+hbErDu5gu64tlA== - dependencies: - "@jest/types" "^25.5.0" - ansi-styles "^4.0.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-regex-util "^25.2.6" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -1764,16 +1373,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1789,53 +1388,36 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.6" + combined-stream "^1.0.8" mime-types "^2.1.12" -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -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== @@ -1845,31 +1427,10 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" @@ -1888,28 +1449,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== has-flag@^3.0.0: version "3.0.0" @@ -1921,55 +1464,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - whatwg-encoding "^1.0.1" + function-bind "^1.1.2" html-encoding-sniffer@^2.0.1: version "2.0.1" @@ -1983,19 +1483,27 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= +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== dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + "@tootallnate/once" "1" + agent-base "6" + debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@0.4.24: version "0.4.24" @@ -2030,97 +1538,17 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" + hasown "^2.0.0" is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -2132,97 +1560,50 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.0: +is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.1.1, is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - istanbul-lib-coverage@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - 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== +istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: - "@babel/core" "^7.7.5" + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" + istanbul-lib-coverage "^3.2.0" semver "^6.3.0" istanbul-lib-report@^3.0.0: @@ -2243,745 +1624,418 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-changed-files@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.5.0.tgz#141cc23567ceb3f534526f8614ba39421383634c" - integrity sha512-EOw9QEqapsDT7mKF162m8HFzRPbmP8qJQny6ldVOdOVBz3ACgPm/1nAn5fPQ/NDaYhX/AHkrGwwkCncpAVSXcw== - dependencies: - "@jest/types" "^25.5.0" - execa "^3.2.0" - throat "^5.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.5.4.tgz#b9f1a84d1301a92c5c217684cb79840831db9f0d" - integrity sha512-rG8uJkIiOUpnREh1768/N3n27Cm+xPFkSNFO91tgg+8o2rXeVLStz+vkXkGr4UtzH6t1SNbjwoiswd7p4AhHTw== - dependencies: - "@jest/core" "^25.5.4" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^25.5.4" - jest-util "^25.5.0" - jest-validate "^25.5.0" - prompts "^2.0.1" - realpath-native "^2.0.0" - yargs "^15.3.1" +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== + dependencies: + "@jest/types" "^27.5.1" + execa "^5.0.0" + throat "^6.0.1" + +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + expect "^27.5.1" + is-generator-fn "^2.0.0" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + throat "^6.0.1" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^16.2.0" -jest-config@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.5.4.tgz#38e2057b3f976ef7309b2b2c8dcd2a708a67f02c" - integrity sha512-SZwR91SwcdK6bz7Gco8qL7YY2sx8tFJYzvg216DLihTWf+LKY/DoJXpM9nTzYakSyfblbqeU48p/p7Jzy05Atg== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^25.5.4" - "@jest/types" "^25.5.0" - babel-jest "^25.5.1" - chalk "^3.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^25.5.0" - jest-environment-node "^25.5.0" - jest-get-type "^25.2.6" - jest-jasmine2 "^25.5.4" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - micromatch "^4.0.2" - pretty-format "^25.5.0" - realpath-native "^2.0.0" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^27.5.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" -jest-docblock@^25.3.0: - version "25.3.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.3.0.tgz#8b777a27e3477cd77a168c05290c471a575623ef" - integrity sha512-aktF0kCar8+zxRHxQZwxMy70stc9R1mOmrLsT5VO3pIT0uzGRSDAXxSlz4NqQWpuLjPpuMhPRl7H+5FRsvIQAg== +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== dependencies: - detect-newline "^3.0.0" + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.5.0.tgz#0c3c2797e8225cb7bec7e4d249dcd96b934be516" - integrity sha512-QBogUxna3D8vtiItvn54xXde7+vuzqRrEeaw8r1s+1TG9eZLVJE5ZkKoSUlqFwRjnlaA4hyKGiu9OlkFIuKnjA== - dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - jest-get-type "^25.2.6" - jest-util "^25.5.0" - pretty-format "^25.5.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.5.0.tgz#dcbe4da2ea997707997040ecf6e2560aec4e9834" - integrity sha512-7Jr02ydaq4jaWMZLY+Skn8wL5nVIYpWvmeatOHL3tOcV3Zw8sjnPpx+ZdeBfc457p8jCR9J6YCc+Lga0oIy62A== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - jsdom "^15.2.1" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.5.0.tgz#0f55270d94804902988e64adca37c6ce0f7d07a1" - integrity sha512-iuxK6rQR2En9EID+2k+IBs5fCFd919gVVK5BeND82fYeLWPqvRcFNPKu9+gxTwfB5XwBGBvZ0HFQa+cHtIoslA== - dependencies: - "@jest/environment" "^25.5.0" - "@jest/fake-timers" "^25.5.0" - "@jest/types" "^25.5.0" - jest-mock "^25.5.0" - jest-util "^25.5.0" - semver "^6.3.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" + jsdom "^16.6.0" + +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.5.1.tgz#1df10f716c1d94e60a1ebf7798c9fb3da2620943" - integrity sha512-dddgh9UZjV7SCDQUrQ+5t9yy8iEgKc1AKqZR9YDww8xsVOtzPQSMVLDChc21+g29oTRexb9/B0bIlZL+sWmvAQ== +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" + "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-serializer "^25.5.0" - jest-util "^25.5.0" - jest-worker "^25.5.0" - micromatch "^4.0.2" - sane "^4.0.3" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" + micromatch "^4.0.4" walker "^1.0.7" - which "^2.0.2" optionalDependencies: - fsevents "^2.1.2" + fsevents "^2.3.2" -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.5.4.tgz#66ca8b328fb1a3c5364816f8958f6970a8526968" - integrity sha512-9acbWEfbmS8UpdcfqnDO+uBUgKa/9hcRh983IHdM+pKmJPL77G0sWAAK0V0kr5LK3a8cSBfkFSoncXwQlRZfkQ== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^25.5.0" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - co "^4.6.0" - expect "^25.5.0" - is-generator-fn "^2.0.0" - jest-each "^25.5.0" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-runtime "^25.5.4" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - pretty-format "^25.5.0" - throat "^5.0.0" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^26.6.2" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.5.0.tgz#2291c6294b0ce404241bb56fe60e2d0c3e34f0bb" - integrity sha512-rV7JdLsanS8OkdDpZtgBf61L5xZ4NnYLBq72r6ldxahJWWczZjXawRsoHyXzibM5ed7C2QRjpp6ypgwGdKyoVA== - dependencies: - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.5.0.tgz#fbc98a12d730e5d2453d7f1ed4a4d948e34b7867" - integrity sha512-VWI269+9JS5cpndnpCwm7dy7JtGQT30UHfrnM3mXl22gHGt/b7NkjBqXfbhZ8V4B7ANUsjK18PlSBmG0YH7gjw== - dependencies: - chalk "^3.0.0" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + throat "^6.0.1" + +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-message-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.5.0.tgz#ea11d93204cc7ae97456e1d8716251185b8880ea" - integrity sha512-ezddz3YCT/LT0SKAmylVyWWIGYoKHOFOFXx3/nA4m794lfVUskMcwhip6vTgdVrOtYdjeQeis2ypzes9mZb4EA== +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/stack-utils" "^1.0.1" - chalk "^3.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - slash "^3.0.0" - stack-utils "^1.0.1" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" + "@babel/code-frame" "^7.12.13" + "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" slash "^3.0.0" - stack-utils "^2.0.2" + stack-utils "^2.0.3" -jest-mock@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.5.0.tgz#a91a54dabd14e37ecd61665d6b6e06360a55387a" - integrity sha512-eXWuTV8mKzp/ovHc5+3USJMYsTBhyQ+5A1Mak35dey/RG8GlM4YWVylZuGgVXinaW6tpvk/RSecmF37FKUlpXA== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^25.5.0" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" -jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: +jest-pnp-resolver@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== -jest-regex-util@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.6.tgz#d847d38ba15d2118d3b06390056028d0f2fd3964" - integrity sha512-KQqf7a0NrtCkYmZZzodPftn7fL1cq3GQAFVMn5Hg8uKx/fIenLEobNanUxb7abQ1sjADHBseG/2FGpsv/wr+Qw== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.5.4.tgz#85501f53957c8e3be446e863a74777b5a17397a7" - integrity sha512-yFmbPd+DAQjJQg88HveObcGBA32nqNZ02fjYmtL16t1xw9bAttSn5UGRRhzMHIQbsep7znWvAvnD4kDqOFM0Uw== - dependencies: - "@jest/types" "^25.5.0" - jest-regex-util "^25.2.6" - jest-snapshot "^25.5.1" - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.5.1.tgz#0e6fbcfa7c26d2a5fe8f456088dc332a79266829" - integrity sha512-Hc09hYch5aWdtejsUZhA+vSzcotf7fajSlPA6EZPE1RmPBAD39XtJhvHWFStid58iit4IPDLI/Da4cwdDmAHiQ== - dependencies: - "@jest/types" "^25.5.0" - browser-resolve "^1.11.3" - chalk "^3.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.1" - read-pkg-up "^7.0.1" - realpath-native "^2.0.0" - resolve "^1.17.0" - slash "^3.0.0" +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" + +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== + dependencies: + "@jest/types" "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + resolve "^1.20.0" + resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.5.4.tgz#ffec5df3875da5f5c878ae6d0a17b8e4ecd7c71d" - integrity sha512-V/2R7fKZo6blP8E9BL9vJ8aTU4TH2beuqGNxHbxi6t14XzTb+x90B3FRgdvuHm41GY8ch4xxvf0ATH4hdpjTqg== +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - chalk "^3.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-docblock "^25.3.0" - jest-haste-map "^25.5.1" - jest-jasmine2 "^25.5.4" - jest-leak-detector "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - jest-runtime "^25.5.4" - jest-util "^25.5.0" - jest-worker "^25.5.0" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" + emittery "^0.8.1" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^25.5.4: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.5.4.tgz#dc981fe2cb2137abcd319e74ccae7f7eeffbfaab" - integrity sha512-RWTt8LeWh3GvjYtASH2eezkc8AehVoWKK20udV6n3/gC87wlTbE1kIA+opCvNWyyPeBs6ptYsc6nyHUb1GlUVQ== - dependencies: - "@jest/console" "^25.5.0" - "@jest/environment" "^25.5.0" - "@jest/globals" "^25.5.2" - "@jest/source-map" "^25.5.0" - "@jest/test-result" "^25.5.0" - "@jest/transform" "^25.5.1" - "@jest/types" "^25.5.0" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^25.5.4" - jest-haste-map "^25.5.1" - jest-message-util "^25.5.0" - jest-mock "^25.5.0" - jest-regex-util "^25.2.6" - jest-resolve "^25.5.1" - jest-snapshot "^25.5.1" - jest-util "^25.5.0" - jest-validate "^25.5.0" - realpath-native "^2.0.0" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.3.1" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + throat "^6.0.1" + +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" + execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.5.0.tgz#a993f484e769b4ed54e70e0efdb74007f503072b" - integrity sha512-LxD8fY1lByomEPflwur9o4e2a5twSQ7TaVNLlFUuToIdoJuBt8tzHfCsZ42Ok6LkKXWzFWf3AGmheuLAA7LcCA== - dependencies: - graceful-fs "^4.2.4" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" -jest-snapshot@^25.5.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.5.1.tgz#1a2a576491f9961eb8d00c2e5fd479bc28e5ff7f" - integrity sha512-C02JE1TUe64p2v1auUJ2ze5vcuv32tkv9PyhEb318e8XOKF7MOyXdJ7kdjbvrp3ChPLU2usI7Rjxs97Dj5P0uQ== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: + "@babel/core" "^7.7.2" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/types" "^25.5.0" - "@types/prettier" "^1.19.0" - chalk "^3.0.0" - expect "^25.5.0" - graceful-fs "^4.2.4" - jest-diff "^25.5.0" - jest-get-type "^25.2.6" - jest-matcher-utils "^25.5.0" - jest-message-util "^25.5.0" - jest-resolve "^25.5.1" - make-dir "^3.0.0" - natural-compare "^1.4.0" - pretty-format "^25.5.0" - semver "^6.3.0" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^26.6.2" + pretty-format "^27.5.1" semver "^7.3.2" -jest-util@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" - integrity sha512-KVlX+WWg1zUTB9ktvhsg2PXZVdkI1NBevOJSkTKYAyXyH4QSvh+Lay/e/v+bmaFfrkfx43xD8QTfgobzlEXdIA== +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^25.5.0" - chalk "^3.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - make-dir "^3.0.0" - -jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== - dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-validate@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" - integrity sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ== - dependencies: - "@jest/types" "^25.5.0" - camelcase "^5.3.1" - chalk "^3.0.0" - jest-get-type "^25.2.6" - leven "^3.1.0" - pretty-format "^25.5.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^27.5.1" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^26.6.2" - -jest-watcher@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.5.0.tgz#d6110d101df98badebe435003956fd4a465e8456" - integrity sha512-XrSfJnVASEl+5+bb51V0Q7WQx65dTSk7NL4yDdVjPnRNpM0hG+ncFmDYJo9O8jaSRcAitVbuVawyXCRoxGrT5Q== - dependencies: - "@jest/test-result" "^25.5.0" - "@jest/types" "^25.5.0" - ansi-escapes "^4.2.1" - chalk "^3.0.0" - jest-util "^25.5.0" - string-length "^3.1.0" + pretty-format "^27.5.1" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + jest-util "^27.5.1" string-length "^4.0.1" -jest-worker@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest@^25.1.0: - version "25.5.4" - resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" - integrity sha512-hHFJROBTqZahnO+X+PMtT6G2/ztqAZJveGqz//FnWWHurizkD05PQGzRZOhF3XP6z7SJmL+5tCfW8qV06JypwQ== - dependencies: - "@jest/core" "^25.5.4" - import-local "^3.0.2" - jest-cli "^25.5.4" + supports-color "^8.0.0" -jest@^26.5.2: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +jest@^27.3.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^27.5.1" js-tokens@^4.0.0: version "4.0.0" @@ -2996,50 +2050,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^15.2.1: - version "15.2.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" - integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== - dependencies: - abab "^2.0.0" - acorn "^7.1.0" - acorn-globals "^4.3.2" - array-equal "^1.0.0" - cssom "^0.4.1" - cssstyle "^2.0.0" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.1" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.2.0" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.7" - saxes "^3.1.9" - symbol-tree "^3.2.2" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.1.2" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^7.0.0" - xml-name-validator "^3.0.0" - -jsdom@^16.4.0: - version "16.5.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.3.tgz#13a755b3950eb938b4482c407238ddf16f0d2136" - integrity sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA== +jsdom@^16.6.0: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== dependencies: abab "^2.0.5" - acorn "^8.1.0" + acorn "^8.2.4" acorn-globals "^6.0.0" cssom "^0.4.4" cssstyle "^2.3.0" @@ -3047,12 +2064,13 @@ jsdom@^16.4.0: decimal.js "^10.2.1" domexception "^2.0.1" escodegen "^2.0.0" + form-data "^3.0.0" html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" nwsapi "^2.2.0" parse5 "6.0.1" - request "^2.88.2" - request-promise-native "^1.0.9" saxes "^5.0.1" symbol-tree "^3.2.4" tough-cookie "^4.0.0" @@ -3062,7 +2080,7 @@ jsdom@^16.4.0: whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^8.5.0" - ws "^7.4.4" + ws "^7.4.6" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -3075,21 +2093,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^2.1.2: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -3097,39 +2100,10 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== kleur@^3.0.3: version "3.0.3" @@ -3161,22 +2135,17 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash@^4.17.19, lodash@^4.7.0: +lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lolex@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: - "@sinonjs/commons" "^1.7.0" + yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" @@ -3199,56 +2168,25 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" mime-db@1.47.0: version "1.47.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== -mime-types@^2.1.12, mime-types@~2.1.19: +mime-types@^2.1.12: version "2.1.30" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== @@ -3267,124 +2205,42 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" - integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== - dependencies: - growly "^1.3.0" - is-wsl "^2.1.1" - semver "^6.3.0" - shellwords "^0.1.1" - which "^1.3.1" - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^1.1.71: version "1.1.71" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -3396,42 +2252,14 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -3450,21 +2278,6 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -3484,7 +2297,7 @@ 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== -parse-json@^5.0.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -3494,21 +2307,11 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -3519,37 +2322,35 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^4.2.0: version "4.2.0" @@ -3558,39 +2359,18 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== - dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" - -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" react-is "^17.0.1" prompts@^2.0.1: @@ -3601,137 +2381,30 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -psl@^1.1.28, psl@^1.1.33: +psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -react-is@^16.12.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - react-is@^17.0.1: version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -realpath-native@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" - integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.7, request-promise-native@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -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== +rescript@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/rescript/-/rescript-11.1.0.tgz#68dec0b3cbc456c1f9c8e4f10bda6fae49bf7f92" + integrity sha512-9la2Dv+ACylQ77I8s4spPu1JnLZXbH5WgxcLHLLUBWgFFSiv0wXqgzWztrBIZqwFgVX5BYcwldUqUVcEzdCyHg== resolve-cwd@^3.0.0: version "3.0.0" @@ -3745,28 +2418,19 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.20.0: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" rimraf@^3.0.0: version "3.0.2" @@ -3775,55 +2439,16 @@ rimraf@^3.0.0: dependencies: glob "^7.1.3" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^3.1.9: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -3831,16 +2456,16 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.3.2: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -3848,28 +2473,6 @@ semver@^7.3.2: dependencies: lru-cache "^6.0.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3877,26 +2480,21 @@ shebang-command@^2.0.0: dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -3907,47 +2505,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - source-map-support@^0.5.6: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -3956,12 +2513,7 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -3976,94 +2528,18 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== - -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" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - -stack-utils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-length@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" - integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== - dependencies: - astral-regex "^1.0.0" - strip-ansi "^5.2.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -4081,13 +2557,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -4100,16 +2569,16 @@ strip-bom@^4.0.0: resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -4124,6 +2593,13 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-hyperlinks@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" @@ -4132,7 +2608,12 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -symbol-tree@^3.2.2, symbol-tree@^3.2.4: +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== @@ -4154,10 +2635,10 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throat@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== tmpl@1.0.x: version "1.0.5" @@ -4169,21 +2650,6 @@ to-fast-properties@^2.0.0: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -4191,33 +2657,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== - dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -4227,13 +2666,6 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" @@ -4241,18 +2673,6 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -4270,16 +2690,6 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.6.0: - version "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: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -4287,107 +2697,35 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -uuid@^3.3.2: - 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.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-to-istanbul@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.4.tgz#b97936f21c0e2d9996d4985e5c5156e9d4e49cd6" - integrity sha512-Rw6vJHj1mbdK8edjR7+zuJrpDtKIgNdAvTSAcpYfgMIw+u2dPDntD3dgN4XQFLU2/fvFQdzj+EeSGfd/jnY5fQ== +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + escalade "^3.1.1" + picocolors "^1.0.0" -v8-to-istanbul@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz#04bfd1026ba4577de5472df4f5e89af49de5edda" - integrity sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA== +v8-to-istanbul@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.1, w3c-hr-time@^1.0.2: +w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" -w3c-xmlserializer@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - w3c-xmlserializer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" @@ -4395,18 +2733,13 @@ w3c-xmlserializer@^2.0.0: dependencies: xml-name-validator "^3.0.0" -walker@^1.0.7, walker@~1.0.5: +walker@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -4417,27 +2750,18 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: +whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: +whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.5.0.tgz#7752b8464fc0903fec89aa9846fc9efe07351fd3" @@ -4447,19 +2771,7 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.0.2" webidl-conversions "^6.1.0" -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" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== @@ -4471,10 +2783,10 @@ word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -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== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" @@ -4495,52 +2807,50 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.0.0, ws@^7.4.4: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlchars@^2.1.1, xmlchars@^2.2.0: +xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -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-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@^15.3.1, yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" 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" + y18n "^5.0.5" + yargs-parser "^20.2.2"