From f1fa5ee92d77fd0d5fb0fafa14060ed36e9423c0 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 27 Aug 2020 18:49:52 -0700 Subject: [PATCH 01/36] feat: rm agent-js and bootstrap. nix pulls them from new repo --- assets.nix | 2 +- default.nix | 9 ++++-- nix/agent-js/agent-js-monorepo.nix | 49 ++++++++++++++++++++++++++++++ nix/agent-js/agent-js.nix | 24 +++++++++++++++ nix/agent-js/bootstrap-js.nix | 24 +++++++++++++++ nix/default.nix | 9 ++---- nix/sources.json | 6 ++++ nix/sources.nix | 12 ++++++++ 8 files changed, 124 insertions(+), 11 deletions(-) create mode 100644 nix/agent-js/agent-js-monorepo.nix create mode 100644 nix/agent-js/agent-js.nix create mode 100644 nix/agent-js/bootstrap-js.nix create mode 100644 nix/sources.nix diff --git a/assets.nix b/assets.nix index a519a789ec..56d88b10ae 100644 --- a/assets.nix +++ b/assets.nix @@ -1,5 +1,5 @@ { pkgs ? import ./nix {} -, bootstrap-js ? import ./src/bootstrap { inherit pkgs; } +, bootstrap-js ? import ./nix/agent-js/bootstrap-js.nix { inherit pkgs; } , distributed-canisters ? import ./distributed-canisters.nix { inherit pkgs; } }: pkgs.runCommandNoCCLocal "assets" {} '' diff --git a/default.nix b/default.nix index 78c55573a3..b2eee80f7b 100644 --- a/default.nix +++ b/default.nix @@ -13,15 +13,18 @@ rec { e2e-tests-ic-ref = import ./e2e/bats { inherit pkgs dfx; use_ic_ref = true; }; node-e2e-tests = import ./e2e/node { inherit pkgs dfx; }; + agent-js-monorepo = import ./nix/agent-js/agent-js-monorepo.nix { inherit system pkgs; }; + # Agents in varous languages - agent-js = import ./src/agent/javascript { inherit pkgs; }; + # agent-js = pkgs.agent-js; # Bootstrap frontend. - bootstrap-js = import ./src/bootstrap { inherit pkgs agent-js; }; + bootstrap-js = import ./nix/agent-js/bootstrap-js.nix { inherit system pkgs; }; + agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; cargo-audit = import ./cargo-audit.nix { inherit pkgs RustSec-advisory-db; }; - assets = import ./assets.nix { inherit pkgs bootstrap-js distributed-canisters; }; + assets = import ./assets.nix { inherit pkgs distributed-canisters; }; distributed-canisters = import ./distributed-canisters.nix { inherit pkgs; }; diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix new file mode 100644 index 0000000000..cf49f2df14 --- /dev/null +++ b/nix/agent-js/agent-js-monorepo.nix @@ -0,0 +1,49 @@ +{ pkgs ? import ../. { inherit system; } +, system ? builtins.currentSystem +, sources ? import ../sources.nix { inherit system; } +}: +let + src = sources.agent-js-monorepo; +in + +pkgs.stdenv.mkDerivation { + name = "agent-js-monorepo"; + src = src; + outputs = [ + "out" + "lib" + ]; + buildPhase = '' + # # npm is not found :( + # npm install; + ''; + installPhase = '' + mkdir -p $out + + cp -R ./* $out/ + + # Copy node_modules to be reused elsewhere. + mkdir -p $lib + # cp -R node_modules $lib + ''; +} + +# # This does not work. napalm doesn't like how `npm install` triggers lerna bootstrap. +# pkgs.napalm.buildPackage src { +# name = "agent-js-monorepo"; +# outputs = [ "out" "lib" ]; +# # ci script now does everything CI should do. Bundle is needed because it's the output +# # of the nix derivation. +# npmCommands = [ +# "npm install" +# ]; +# installPhase = '' +# mkdir -p $out + +# cp -R ./* $out/ + +# # Copy node_modules to be reused elsewhere. +# mkdir -p $lib +# cp -R node_modules $lib +# ''; +# } diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix new file mode 100644 index 0000000000..31e9311270 --- /dev/null +++ b/nix/agent-js/agent-js.nix @@ -0,0 +1,24 @@ +{ pkgs ? import ../. { inherit system; } +, system ? builtins.currentSystem +, sources ? import ../sources.nix { inherit system; } +, monorepo ? import ./agent-js-monorepo.nix { inherit system pkgs; } +}: +pkgs.stdenv.mkDerivation { + name = "agent-js"; + src = "${monorepo}/packages/agent/"; + outputs = [ + "out" + "lib" + ]; + buildPhase = '' + ''; + installPhase = '' + mkdir -p $out + + cp -R ./* $out/ + + # Copy node_modules to be reused elsewhere. + mkdir -p $lib + test -d node_modules && cp -R node_modules $lib || true + ''; +} diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix new file mode 100644 index 0000000000..d80e12dd43 --- /dev/null +++ b/nix/agent-js/bootstrap-js.nix @@ -0,0 +1,24 @@ +{ pkgs ? import ../. { inherit system; } +, system ? builtins.currentSystem +, sources ? import ../sources.nix { inherit system; } +, monorepo ? import ./agent-js-monorepo.nix { inherit system pkgs; } +}: +pkgs.stdenv.mkDerivation { + name = "bootstrap-js"; + src = "${monorepo}/packages/bootstrap/"; + outputs = [ + "out" + "lib" + ]; + buildPhase = '' + ''; + installPhase = '' + mkdir -p $out + + cp -R ./* $out/ + + # Copy node_modules to be reused elsewhere. + mkdir -p $lib + test -d node_modules && cp -R node_modules $lib || true + ''; +} diff --git a/nix/default.nix b/nix/default.nix index b1ee8c3cd7..01ca93a1cc 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -3,6 +3,7 @@ { system ? builtins.currentSystem , isMaster ? true , labels ? {} +, sources ? import ./sources.nix { inherit system; } }: let # The `common` repo provides code (mostly Nix) that is used in the @@ -20,13 +21,6 @@ let then localCommonSrc else sources.common; - sources = import sourcesnix { sourcesFile = ./sources.json; inherit pkgs; }; - - sourcesnix = builtins.fetchurl { - url = https://raw.githubusercontent.com/nmattia/niv/d13bf5ff11850f49f4282d59b25661c45a851936/nix/sources.nix; - sha256 = "0a2rhxli7ss4wixppfwks0hy3zpazwm9l3y2v9krrnyiska3qfrw"; - }; - pkgs = import (commonSrc + "/pkgs") { inherit system isMaster labels; extraSources = sources; @@ -43,6 +37,7 @@ let napalm = self.callPackage self.sources.napalm { pkgs = self // { nodejs = self.nodejs-12_x; }; }; + ic-ref = (import self.sources.ic-ref { inherit (self) system; }).ic-ref; nix-fmt = nixFmt.fmt; diff --git a/nix/sources.json b/nix/sources.json index 8e41f4780f..987d09a420 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -12,6 +12,12 @@ "url": "https://github.com/RustSec/advisory-db/archive/47d125073886d0a7891e6a33a2db4e69b2accaf0.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, + "agent-js-monorepo": { + "ref": "master", + "repo": "git@github.com:dfinity-lab/agent-js", + "rev": "c20f937f2acb4c08b63c84405c97bafe0294bb80", + "type": "git" + }, "bats-support": { "branch": "v0.3.0", "builtin": false, diff --git a/nix/sources.nix b/nix/sources.nix new file mode 100644 index 0000000000..b321dfece1 --- /dev/null +++ b/nix/sources.nix @@ -0,0 +1,12 @@ +# Returns the nixpkgs set overridden and extended with DFINITY specific +# packages. +{ system ? builtins.currentSystem +}: +let + sourcesnix = builtins.fetchurl { + url = https://raw.githubusercontent.com/nmattia/niv/d13bf5ff11850f49f4282d59b25661c45a851936/nix/sources.nix; + sha256 = "0a2rhxli7ss4wixppfwks0hy3zpazwm9l3y2v9krrnyiska3qfrw"; + }; + sources = import sourcesnix { sourcesFile = ./sources.json; }; +in + sources From 3a5e7892062a44bb9f4ddf40e5a013de1de71bfb Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 27 Aug 2020 19:14:00 -0700 Subject: [PATCH 02/36] agent-js-monorepo uses napalm, but fails on lerna bootstrap (help me hans) --- default.nix | 3 +-- nix/agent-js/agent-js-monorepo.nix | 36 +++++------------------------- 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/default.nix b/default.nix index b2eee80f7b..b026dfe561 100644 --- a/default.nix +++ b/default.nix @@ -16,11 +16,10 @@ rec { agent-js-monorepo = import ./nix/agent-js/agent-js-monorepo.nix { inherit system pkgs; }; # Agents in varous languages - # agent-js = pkgs.agent-js; + agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; # Bootstrap frontend. bootstrap-js = import ./nix/agent-js/bootstrap-js.nix { inherit system pkgs; }; - agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; cargo-audit = import ./cargo-audit.nix { inherit pkgs RustSec-advisory-db; }; diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index cf49f2df14..079e32049f 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -6,17 +6,13 @@ let src = sources.agent-js-monorepo; in -pkgs.stdenv.mkDerivation { +# This does not work. napalm doesn't like how `npm install` triggers lerna bootstrap. +pkgs.napalm.buildPackage src { name = "agent-js-monorepo"; - src = src; - outputs = [ - "out" - "lib" + outputs = [ "out" "lib" ]; + npmCommands = [ + "npm install" ]; - buildPhase = '' - # # npm is not found :( - # npm install; - ''; installPhase = '' mkdir -p $out @@ -24,26 +20,6 @@ pkgs.stdenv.mkDerivation { # Copy node_modules to be reused elsewhere. mkdir -p $lib - # cp -R node_modules $lib + test -d node_modules && cp -R node_modules $lib || true ''; } - -# # This does not work. napalm doesn't like how `npm install` triggers lerna bootstrap. -# pkgs.napalm.buildPackage src { -# name = "agent-js-monorepo"; -# outputs = [ "out" "lib" ]; -# # ci script now does everything CI should do. Bundle is needed because it's the output -# # of the nix derivation. -# npmCommands = [ -# "npm install" -# ]; -# installPhase = '' -# mkdir -p $out - -# cp -R ./* $out/ - -# # Copy node_modules to be reused elsewhere. -# mkdir -p $lib -# cp -R node_modules $lib -# ''; -# } From c59f97391606e4ff5a2390e05e66eeb5c33f23c2 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 27 Aug 2020 19:48:12 -0700 Subject: [PATCH 03/36] Fix agent-js-monorepo.nix to properly npm install --- default.nix | 2 -- nix/agent-js/agent-js-monorepo.nix | 17 ++++++++++++----- nix/agent-js/agent-js.nix | 2 ++ nix/agent-js/bootstrap-js.nix | 1 + 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/default.nix b/default.nix index b026dfe561..a948d6722e 100644 --- a/default.nix +++ b/default.nix @@ -13,8 +13,6 @@ rec { e2e-tests-ic-ref = import ./e2e/bats { inherit pkgs dfx; use_ic_ref = true; }; node-e2e-tests = import ./e2e/node { inherit pkgs dfx; }; - agent-js-monorepo = import ./nix/agent-js/agent-js-monorepo.nix { inherit system pkgs; }; - # Agents in varous languages agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 079e32049f..6c3c120ecc 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -6,13 +6,20 @@ let src = sources.agent-js-monorepo; in -# This does not work. napalm doesn't like how `npm install` triggers lerna bootstrap. -pkgs.napalm.buildPackage src { +pkgs.stdenv.mkDerivation { name = "agent-js-monorepo"; - outputs = [ "out" "lib" ]; - npmCommands = [ - "npm install" + src = src; + buildInputs = [ pkgs.nodejs ]; + outputs = [ + "out" + "lib" ]; + buildPhase = '' + mkdir -p .npm-cache + # without this, npm install will try to write to ~/.npm, which isn't writable in nix + export NPM_CONFIG_CACHE=.npm-cache; + npm install; + ''; installPhase = '' mkdir -p $out diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index 31e9311270..ffab16a819 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -6,11 +6,13 @@ pkgs.stdenv.mkDerivation { name = "agent-js"; src = "${monorepo}/packages/agent/"; + buildInputs = [ pkgs.nodejs ]; outputs = [ "out" "lib" ]; buildPhase = '' + npm run build --if-present ''; installPhase = '' mkdir -p $out diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index d80e12dd43..eecb165c14 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -11,6 +11,7 @@ pkgs.stdenv.mkDerivation { "lib" ]; buildPhase = '' + npm run build --if-present ''; installPhase = '' mkdir -p $out From c834a4f53f2a1ed94dd96a20b2848f9326180a96 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Thu, 27 Aug 2020 20:05:06 -0700 Subject: [PATCH 04/36] fix nix --- nix/agent-js/agent-js-monorepo.nix | 1 + nix/agent-js/bootstrap-js.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 6c3c120ecc..3d95b4d6bb 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -19,6 +19,7 @@ pkgs.stdenv.mkDerivation { # without this, npm install will try to write to ~/.npm, which isn't writable in nix export NPM_CONFIG_CACHE=.npm-cache; npm install; + npx lerna bootstrap --nohoist '*'; ''; installPhase = '' mkdir -p $out diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index eecb165c14..4c818e4515 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -6,6 +6,7 @@ pkgs.stdenv.mkDerivation { name = "bootstrap-js"; src = "${monorepo}/packages/bootstrap/"; + buildInputs = [ pkgs.nodejs ]; outputs = [ "out" "lib" From 436a065463101b9150147798da9c68e5c3c70ff0 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Fri, 28 Aug 2020 09:09:24 -0700 Subject: [PATCH 05/36] Adjust agent-js pkgs --- default.nix | 2 +- nix/agent-js/agent-js-monorepo.nix | 8 ++++---- nix/agent-js/agent-js.nix | 4 +--- nix/agent-js/bootstrap-js.nix | 4 +--- nix/default.nix | 13 +++++++++++-- nix/sources.nix | 12 ------------ 6 files changed, 18 insertions(+), 25 deletions(-) delete mode 100644 nix/sources.nix diff --git a/default.nix b/default.nix index a948d6722e..7773f97f1b 100644 --- a/default.nix +++ b/default.nix @@ -21,7 +21,7 @@ rec { cargo-audit = import ./cargo-audit.nix { inherit pkgs RustSec-advisory-db; }; - assets = import ./assets.nix { inherit pkgs distributed-canisters; }; + assets = import ./assets.nix { inherit pkgs bootstrap-js distributed-canisters; }; distributed-canisters = import ./distributed-canisters.nix { inherit pkgs; }; diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 3d95b4d6bb..69e0a9d7e0 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -1,11 +1,11 @@ { pkgs ? import ../. { inherit system; } , system ? builtins.currentSystem -, sources ? import ../sources.nix { inherit system; } +# This should be via sourcesnix for the git monorepo +, agent-js-monorepo-src }: let - src = sources.agent-js-monorepo; + src = agent-js-monorepo-src; in - pkgs.stdenv.mkDerivation { name = "agent-js-monorepo"; src = src; @@ -18,7 +18,7 @@ pkgs.stdenv.mkDerivation { mkdir -p .npm-cache # without this, npm install will try to write to ~/.npm, which isn't writable in nix export NPM_CONFIG_CACHE=.npm-cache; - npm install; + # npm install; npx lerna bootstrap --nohoist '*'; ''; installPhase = '' diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index ffab16a819..0c76b5e279 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -1,11 +1,9 @@ { pkgs ? import ../. { inherit system; } , system ? builtins.currentSystem -, sources ? import ../sources.nix { inherit system; } -, monorepo ? import ./agent-js-monorepo.nix { inherit system pkgs; } }: pkgs.stdenv.mkDerivation { name = "agent-js"; - src = "${monorepo}/packages/agent/"; + src = "${pkgs.agent-js-monorepo}/packages/agent/"; buildInputs = [ pkgs.nodejs ]; outputs = [ "out" diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index 4c818e4515..53686a5fb9 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -1,11 +1,9 @@ { pkgs ? import ../. { inherit system; } , system ? builtins.currentSystem -, sources ? import ../sources.nix { inherit system; } -, monorepo ? import ./agent-js-monorepo.nix { inherit system pkgs; } }: pkgs.stdenv.mkDerivation { name = "bootstrap-js"; - src = "${monorepo}/packages/bootstrap/"; + src = "${pkgs.agent-js-monorepo}/packages/bootstrap/"; buildInputs = [ pkgs.nodejs ]; outputs = [ "out" diff --git a/nix/default.nix b/nix/default.nix index 01ca93a1cc..2108b1afd6 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -3,7 +3,6 @@ { system ? builtins.currentSystem , isMaster ? true , labels ? {} -, sources ? import ./sources.nix { inherit system; } }: let # The `common` repo provides code (mostly Nix) that is used in the @@ -21,6 +20,13 @@ let then localCommonSrc else sources.common; + sources = import sourcesnix { sourcesFile = ./sources.json; inherit pkgs; }; + + sourcesnix = builtins.fetchurl { + url = https://raw.githubusercontent.com/nmattia/niv/d13bf5ff11850f49f4282d59b25661c45a851936/nix/sources.nix; + sha256 = "0a2rhxli7ss4wixppfwks0hy3zpazwm9l3y2v9krrnyiska3qfrw"; + }; + pkgs = import (commonSrc + "/pkgs") { inherit system isMaster labels; extraSources = sources; @@ -37,7 +43,10 @@ let napalm = self.callPackage self.sources.napalm { pkgs = self // { nodejs = self.nodejs-12_x; }; }; - + agent-js-monorepo = import ./agent-js/agent-js-monorepo.nix { + inherit system; + agent-js-monorepo-src = self.sources.agent-js-monorepo; + }; ic-ref = (import self.sources.ic-ref { inherit (self) system; }).ic-ref; nix-fmt = nixFmt.fmt; diff --git a/nix/sources.nix b/nix/sources.nix deleted file mode 100644 index b321dfece1..0000000000 --- a/nix/sources.nix +++ /dev/null @@ -1,12 +0,0 @@ -# Returns the nixpkgs set overridden and extended with DFINITY specific -# packages. -{ system ? builtins.currentSystem -}: -let - sourcesnix = builtins.fetchurl { - url = https://raw.githubusercontent.com/nmattia/niv/d13bf5ff11850f49f4282d59b25661c45a851936/nix/sources.nix; - sha256 = "0a2rhxli7ss4wixppfwks0hy3zpazwm9l3y2v9krrnyiska3qfrw"; - }; - sources = import sourcesnix { sourcesFile = ./sources.json; }; -in - sources From f3aade55bc232911e7267fba1258c48c1c3333ce Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Fri, 28 Aug 2020 10:36:46 -0700 Subject: [PATCH 06/36] update ref to agent-js-monorepo latest master --- assets.nix | 9 +++++++-- nix/agent-js/agent-js-monorepo.nix | 3 +-- nix/agent-js/agent-js.nix | 5 ++++- nix/agent-js/bootstrap-js.nix | 5 ++++- nix/default.nix | 2 +- nix/sources.json | 4 ++-- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/assets.nix b/assets.nix index 56d88b10ae..9ad7287a46 100644 --- a/assets.nix +++ b/assets.nix @@ -1,5 +1,7 @@ -{ pkgs ? import ./nix {} -, bootstrap-js ? import ./nix/agent-js/bootstrap-js.nix { inherit pkgs; } +{ system ? builtins.currentSystem +, pkgs ? import ./nix {} +, bootstrap-js ? import ./nix/agent-js/bootstrap-js.nix { inherit system pkgs; } +, agent-js ? import ./nix/agent-js/agent-js.nix { inherit system pkgs; } , distributed-canisters ? import ./distributed-canisters.nix { inherit pkgs; } }: pkgs.runCommandNoCCLocal "assets" {} '' @@ -17,5 +19,8 @@ pkgs.runCommandNoCCLocal "assets" {} '' mkdir $out/bootstrap cp -R ${bootstrap-js.out}/* $out/bootstrap/ + mkdir $out/agent-js + cp -R ${agent-js.out}/* $out/agent-js/ + cp -R ${distributed-canisters} $out/canisters '' diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 69e0a9d7e0..7c88814b45 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -18,8 +18,7 @@ pkgs.stdenv.mkDerivation { mkdir -p .npm-cache # without this, npm install will try to write to ~/.npm, which isn't writable in nix export NPM_CONFIG_CACHE=.npm-cache; - # npm install; - npx lerna bootstrap --nohoist '*'; + npm install; ''; installPhase = '' mkdir -p $out diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index 0c76b5e279..608367a753 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -10,7 +10,10 @@ pkgs.stdenv.mkDerivation { "lib" ]; buildPhase = '' - npm run build --if-present + # Don't run `npm run build` here, which will call `tsc -b`. + # `tsc -b` will use typescrpit project references to build things, + # which may try to read from other packages. But nix will error on read from those dirs. + # Let all building happen on the monorepo package. ''; installPhase = '' mkdir -p $out diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index 53686a5fb9..83f190eda3 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -10,7 +10,10 @@ pkgs.stdenv.mkDerivation { "lib" ]; buildPhase = '' - npm run build --if-present + # Don't run `npm run build` here, which will call `tsc -b`. + # `tsc -b` will use typescrpit project references to build things, + # which may try to read from other packages. But nix will error on read from those dirs. + # Let all building happen on the monorepo package. ''; installPhase = '' mkdir -p $out diff --git a/nix/default.nix b/nix/default.nix index 2108b1afd6..0b766936bf 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -44,7 +44,7 @@ let pkgs = self // { nodejs = self.nodejs-12_x; }; }; agent-js-monorepo = import ./agent-js/agent-js-monorepo.nix { - inherit system; + inherit system pkgs; agent-js-monorepo-src = self.sources.agent-js-monorepo; }; ic-ref = (import self.sources.ic-ref { inherit (self) system; }).ic-ref; diff --git a/nix/sources.json b/nix/sources.json index 987d09a420..b51244738a 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -14,8 +14,8 @@ }, "agent-js-monorepo": { "ref": "master", - "repo": "git@github.com:dfinity-lab/agent-js", - "rev": "c20f937f2acb4c08b63c84405c97bafe0294bb80", + "repo": "ssh://git@github.com/dfinity-lab/agent-js", + "rev": "804318e3e5ec91e5a681497b559ab6a4c719450f", "type": "git" }, "bats-support": { From 11831268b194618291a038e8969e8ca4c8d9b583 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Fri, 28 Aug 2020 11:46:22 -0700 Subject: [PATCH 07/36] try re-enabling napalm buildPackage for agent-js-monorepo --- 71 | 0 foo.sh | 3 + nix/agent-js/agent-js-monorepo.nix | 89 ++++++++++++++++++++++-------- package-lock.json | 3 + 4 files changed, 71 insertions(+), 24 deletions(-) create mode 100644 71 create mode 100755 foo.sh create mode 100644 package-lock.json diff --git a/71 b/71 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/foo.sh b/foo.sh new file mode 100755 index 0000000000..54654964ff --- /dev/null +++ b/foo.sh @@ -0,0 +1,3 @@ +#echo hi &> /dev/null; +#$@ &> /dev/null; +$@ diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 7c88814b45..18f8e5a09b 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -1,32 +1,73 @@ { pkgs ? import ../. { inherit system; } , system ? builtins.currentSystem -# This should be via sourcesnix for the git monorepo + # This should be via sourcesnix for the git monorepo , agent-js-monorepo-src }: let src = agent-js-monorepo-src; -in -pkgs.stdenv.mkDerivation { - name = "agent-js-monorepo"; - src = src; - buildInputs = [ pkgs.nodejs ]; - outputs = [ - "out" - "lib" - ]; - buildPhase = '' - mkdir -p .npm-cache - # without this, npm install will try to write to ~/.npm, which isn't writable in nix - export NPM_CONFIG_CACHE=.npm-cache; - npm install; - ''; - installPhase = '' - mkdir -p $out + # Ideally this is a function that takes a directory path (e.g. to the monorepo), + # and returns a path to a JSON file shaped like ./package-lock.json. + # But the package-lock.json should have all the .dependencies of subpackages in ./packages/*/ too. + # Without something like this, napalm will only install deps of the top-level package, + # and not deps of subpackages. + lernaPackageLock = dir: + let + packageLock = (builtins.fromJSON (builtins.readFile "${dir}/package-lock.json")); + packageNames = (builtins.attrNames (builtins.readDir "${dir}/packages")); + packagePaths = (builtins.map (packageName: "${dir}/packages/${packageName}") packageNames); + subpackageLockJsonPaths = (builtins.map (packagePath: "${packagePath}/package-lock.json") packagePaths); + subpackageJsons = (builtins.map (file: (builtins.fromJSON (builtins.readFile file))) subpackageLockJsonPaths); + packagesFoo = (builtins.trace "packages: ${packageNames}" packageNames); + mergedDependencies = { }; + mergedPackageLock = (builtins.toJSON (pkgs.lib.attrsets.recursiveUpdate packageLock { + dependencies = mergedDependencies; + })); + ret = (builtins.trace "packages: ${builtins.toJSON packageNames}" mergedPackageLock); + in + ret; + mergedPackageLock = (lernaPackageLock src); + mergedPackageLockFilename = "merged-packge-lock.json"; + mergedPackageLockFile = (pkgs.writeText mergedPackageLockFilename mergedPackageLock); + src_with_merged = pkgs.stdenv.mkDerivation { + name = "agent-js-monorepo-with-merged-package-lock-json"; + src = src; + buildPhase = '' + cp ${mergedPackageLockFile} merged-packge-lock.json; + ''; + installPhase = '' + mkdir -p $out + cp -R ./* $out/ + ''; + }; + monorepo = pkgs.napalm.buildPackage src_with_merged { + name = "agent-js-monorepo"; + packageLock = (src_with_merged + "/" + mergedPackageLockFilename); + buildInputs = [ + pkgs.nodejs + pkgs.jq + ]; + outputs = [ + "out" + "lib" + ]; + HUSKY_DEBUG = "1"; + HUSKY_SKIP_INSTALL = "1"; + npmCommands = [ + "echo ${mergedPackageLockFilename}" + "cat ${mergedPackageLockFilename}" + "npm install --ignore-scripts" + "patchShebangs ./node_modules/lerna/cli.js" + "npm i" + ]; + installPhase = '' + mkdir -p $out - cp -R ./* $out/ + cp -R ./* $out/ - # Copy node_modules to be reused elsewhere. - mkdir -p $lib - test -d node_modules && cp -R node_modules $lib || true - ''; -} + # Copy node_modules to be reused elsewhere. + mkdir -p $lib + test -d node_modules && cp -R node_modules $lib || true + ''; + }; +in +monorepo diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..48e341a095 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3 @@ +{ + "lockfileVersion": 1 +} From 0c4d7b1e72692678d25670c0a61fe5f946682263 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Mon, 31 Aug 2020 16:39:46 -0700 Subject: [PATCH 08/36] chore: remove hacky nix trying to make napalm work with lerna. update agent-js niv ref to lernaless latest --- nix/agent-js/agent-js-monorepo.nix | 58 +++++++----------------------- nix/sources.json | 2 +- 2 files changed, 14 insertions(+), 46 deletions(-) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 18f8e5a09b..1dc7e59a3c 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -5,59 +5,27 @@ }: let src = agent-js-monorepo-src; - # Ideally this is a function that takes a directory path (e.g. to the monorepo), - # and returns a path to a JSON file shaped like ./package-lock.json. - # But the package-lock.json should have all the .dependencies of subpackages in ./packages/*/ too. - # Without something like this, napalm will only install deps of the top-level package, - # and not deps of subpackages. - lernaPackageLock = dir: - let - packageLock = (builtins.fromJSON (builtins.readFile "${dir}/package-lock.json")); - packageNames = (builtins.attrNames (builtins.readDir "${dir}/packages")); - packagePaths = (builtins.map (packageName: "${dir}/packages/${packageName}") packageNames); - subpackageLockJsonPaths = (builtins.map (packagePath: "${packagePath}/package-lock.json") packagePaths); - subpackageJsons = (builtins.map (file: (builtins.fromJSON (builtins.readFile file))) subpackageLockJsonPaths); - packagesFoo = (builtins.trace "packages: ${packageNames}" packageNames); - mergedDependencies = { }; - mergedPackageLock = (builtins.toJSON (pkgs.lib.attrsets.recursiveUpdate packageLock { - dependencies = mergedDependencies; - })); - ret = (builtins.trace "packages: ${builtins.toJSON packageNames}" mergedPackageLock); - in - ret; - mergedPackageLock = (lernaPackageLock src); - mergedPackageLockFilename = "merged-packge-lock.json"; - mergedPackageLockFile = (pkgs.writeText mergedPackageLockFilename mergedPackageLock); - src_with_merged = pkgs.stdenv.mkDerivation { - name = "agent-js-monorepo-with-merged-package-lock-json"; - src = src; - buildPhase = '' - cp ${mergedPackageLockFile} merged-packge-lock.json; - ''; - installPhase = '' - mkdir -p $out - cp -R ./* $out/ - ''; - }; - monorepo = pkgs.napalm.buildPackage src_with_merged { + agentPackagePath = (src + "/packages/agent"); + monorepo = pkgs.napalm.buildPackage src { name = "agent-js-monorepo"; - packageLock = (src_with_merged + "/" + mergedPackageLockFilename); buildInputs = [ - pkgs.nodejs - pkgs.jq + pkgs.python3 + ]; + propagatedNativeBuildInputs = [ + # Required by node-gyp + pkgs.python3 ]; + propagatedBuildInputs = pkgs.lib.optional pkgs.stdenv.isDarwin + # Required by fsevents + pkgs.darwin.apple_sdk.frameworks.CoreServices; outputs = [ "out" "lib" ]; - HUSKY_DEBUG = "1"; - HUSKY_SKIP_INSTALL = "1"; + # HUSKY_DEBUG = "1"; + # HUSKY_SKIP_INSTALL = "1"; npmCommands = [ - "echo ${mergedPackageLockFilename}" - "cat ${mergedPackageLockFilename}" - "npm install --ignore-scripts" - "patchShebangs ./node_modules/lerna/cli.js" - "npm i" + "npm install" ]; installPhase = '' mkdir -p $out diff --git a/nix/sources.json b/nix/sources.json index b51244738a..c48fd0c0b3 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "804318e3e5ec91e5a681497b559ab6a4c719450f", + "rev": "49f773142830030da6ce34e5a1957ecd9af940c0", "type": "git" }, "bats-support": { From 124478d4c5985fdc31740495cd7c3d966df5be8e Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Mon, 31 Aug 2020 19:20:43 -0700 Subject: [PATCH 09/36] bump nix/sources.json ref to agent-js --- nix/agent-js/agent-js-monorepo.nix | 10 ++++++++++ nix/sources.json | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 1dc7e59a3c..f812c2a414 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -20,6 +20,8 @@ let pkgs.darwin.apple_sdk.frameworks.CoreServices; outputs = [ "out" + "agent" + "bootstrap" "lib" ]; # HUSKY_DEBUG = "1"; @@ -35,6 +37,14 @@ let # Copy node_modules to be reused elsewhere. mkdir -p $lib test -d node_modules && cp -R node_modules $lib || true + + mkdir -p $agent + cp -R node_modules $agent/ + cp -R ./packages/agent/* $agent/ + + mkdir -p $bootstrap + cp -R node_modules $bootstrap/ + cp -R ./packages/bootstrap/* $bootstrap/ ''; }; in diff --git a/nix/sources.json b/nix/sources.json index c48fd0c0b3..f7b3056cbf 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "49f773142830030da6ce34e5a1957ecd9af940c0", + "rev": "e577cd2abb8f188448dbc54e362a328794017a8c", "type": "git" }, "bats-support": { From b603cd305d70438114fb833b1f802a6457107ff9 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Mon, 31 Aug 2020 19:37:01 -0700 Subject: [PATCH 10/36] bump nix/sources.json ref to agent-js --- foo.sh | 3 --- nix/sources.json | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) delete mode 100755 foo.sh diff --git a/foo.sh b/foo.sh deleted file mode 100755 index 54654964ff..0000000000 --- a/foo.sh +++ /dev/null @@ -1,3 +0,0 @@ -#echo hi &> /dev/null; -#$@ &> /dev/null; -$@ diff --git a/nix/sources.json b/nix/sources.json index f7b3056cbf..9a9a2f4b40 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "e577cd2abb8f188448dbc54e362a328794017a8c", + "rev": "c8a44f04bede186abc7c99e3a892a247dea05690", "type": "git" }, "bats-support": { From 9bc2689623e125b82258d168d5f54ac9235c91cd Mon Sep 17 00:00:00 2001 From: DFINITY bot <58022693+dfinity-bot@users.noreply.github.com> Date: Fri, 28 Aug 2020 18:03:58 +0200 Subject: [PATCH 11/36] build: niv advisory-db: update 47d12507 -> c341943a (#970) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changelog for advisory-db: Branch: Commits: [RustSec/advisory-db@47d12507...c341943a](https://github.com/RustSec/advisory-db/compare/47d125073886d0a7891e6a33a2db4e69b2accaf0...c341943a3c52a20ae5ca4c103d3a075e28d35106) * [`91aeb3b0`](https://github.com/RustSec/advisory-db/commit/91aeb3b093f99dfa83b4764772295e92dfe1be16) Suggest lz-fear as an alternative to lz4-compress * [`002af101`](https://github.com/RustSec/advisory-db/commit/002af101a9974d3369b57daf7685f7588eabd87c) failure: add informational "unmaintained" advisory ([RustSec/advisory-db⁠#368](http://r.duckduckgo.com/l/?uddg=https://github.com/RustSec/advisory-db/issues/368)) * [`1d3ca115`](https://github.com/RustSec/advisory-db/commit/1d3ca11526a81d65638a5da34f8e8148596da0d5) Assigned RUSTSEC-2020-0036 to failure ([RustSec/advisory-db⁠#369](http://r.duckduckgo.com/l/?uddg=https://github.com/RustSec/advisory-db/issues/369)) * [`df8a0c46`](https://github.com/RustSec/advisory-db/commit/df8a0c466a14b2e953d19fa73b69192fc261c975) RUSTSEC-2020-0036: add fehler ([RustSec/advisory-db⁠#370](http://r.duckduckgo.com/l/?uddg=https://github.com/RustSec/advisory-db/issues/370)) --- nix/sources.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix/sources.json b/nix/sources.json index 9a9a2f4b40..5e09ec34dd 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -6,10 +6,10 @@ "homepage": "https://rustsec.org", "owner": "RustSec", "repo": "advisory-db", - "rev": "47d125073886d0a7891e6a33a2db4e69b2accaf0", - "sha256": "1k625x2hha8dmfbl0csvwvnalpzmxfqlf6b17rbwqmgggs76i0dg", + "rev": "c341943a3c52a20ae5ca4c103d3a075e28d35106", + "sha256": "0l1iw3pgszc4k2g8plgcql45rqav890y93mz8mp8fjyzhgl137dw", "type": "tarball", - "url": "https://github.com/RustSec/advisory-db/archive/47d125073886d0a7891e6a33a2db4e69b2accaf0.tar.gz", + "url": "https://github.com/RustSec/advisory-db/archive/c341943a3c52a20ae5ca4c103d3a075e28d35106.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "agent-js-monorepo": { From d450b16b9457e44233c0bd7fafe759be3ce9cb82 Mon Sep 17 00:00:00 2001 From: Eric Swanson <64809312+ericswanson-dfinity@users.noreply.github.com> Date: Fri, 28 Aug 2020 14:07:54 -0700 Subject: [PATCH 12/36] fix: intermittent failure in dfx start (#968) This fixes https://github.com/dfinity-lab/sdk/issues/971 The `dfx start` process was sleeping for 3 seconds and then checking the replica status once. Sometimes locally, but more often on CI, this was not long enough. This PR changes the startup process to check the replica status once per second for up to 30 seconds before reporting an error. The first commit in this PR added 200 CI tests that just ran the following: ``` dfx new dfx start dfx stop ``` Please see the failures in the CI build for the first commit in this PR, which failed 4 times: - [build log](https://hydra.dfinity.systems/build/1299621/nixlog/1) The CI error in the second commit was due to formatting. Notice that all subsequent commits, which incorporated the fix, did not exhibit any failures during `dfx start`. Thanks to @hansl for pointing out the likely cause and suggesting an approach. Intermittent errors looked similar to this: ``` # An error occured: # AgentError( # ReqwestError( # reqwest::Error { # kind: Request, # url: "http://127.0.0.1:8000/api/v1/status", # source: hyper::Error( # Connect, # ConnectError( # "tcp connect error", # Os { # code: 61, # kind: ConnectionRefused, # message: "Connection refused", # }, # ), # ), # }, # ), # ) ``` --- src/dfx/src/commands/start.rs | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/dfx/src/commands/start.rs b/src/dfx/src/commands/start.rs index affe6d54c5..8dc1ffbc9b 100644 --- a/src/dfx/src/commands/start.rs +++ b/src/dfx/src/commands/start.rs @@ -10,6 +10,7 @@ use crate::lib::replica_config::ReplicaConfig; use clap::{App, Arg, ArgMatches, SubCommand}; use crossbeam::channel::{Receiver, Sender}; use crossbeam::unbounded; +use delay::{Delay, Waiter}; use futures::future::Future; use ic_agent::{Agent, AgentConfig}; use indicatif::{ProgressBar, ProgressDrawTarget}; @@ -56,14 +57,24 @@ fn ping_and_wait(frontend_url: &str) -> DfxResult { })?; // wait for frontend to come up - use std::{thread, time}; - let three_secs = time::Duration::from_secs(3); - thread::sleep(three_secs); - - runtime - .block_on(agent.status()) - .map(|_| ()) - .map_err(DfxError::from) + let mut waiter = Delay::builder() + .timeout(std::time::Duration::from_secs(30)) + .throttle(std::time::Duration::from_secs(1)) + .build(); + + runtime.block_on(async { + waiter.start(); + loop { + let status = agent.status().await; + if status.is_ok() { + break; + } + waiter + .wait() + .map_err(|_| DfxError::AgentError(status.unwrap_err()))?; + } + Ok(()) + }) } // TODO(eftychis)/In progress: Rename to replica. From 55dbd7b60133f0367fb4d7c093ce764ad04afc16 Mon Sep 17 00:00:00 2001 From: Prithvi Shahi <50885601+p-shahi@users.noreply.github.com> Date: Sat, 29 Aug 2020 15:32:16 -0700 Subject: [PATCH 13/36] chore: update replica to release-2020-08-26.RC00 (#959) * chore: replica e2d43c58 compat * Update print.bash * skip this test to unblock tungsten release * fix * remove unused id command * Update sources.json * release-2020-08-28.RC00 Co-authored-by: Prithvi Shahi --- e2e/bats/print.bash | 4 ++-- nix/sources.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/e2e/bats/print.bash b/e2e/bats/print.bash index 974897a6e4..a49c78cc41 100644 --- a/e2e/bats/print.bash +++ b/e2e/bats/print.bash @@ -22,6 +22,6 @@ teardown() { dfx build dfx canister install e2e_project dfx canister call e2e_project hello - run cat stderr.txt - assert_match "debug.print: Hello, World! from DFINITY" + run tail -2 stderr.txt + assert_match "Hello, World! from DFINITY" } diff --git a/nix/sources.json b/nix/sources.json index 5e09ec34dd..6647b07b58 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -38,9 +38,9 @@ "type": "git" }, "dfinity": { + "tag": "release-2020-08-28.RC00", "repo": "ssh://git@github.com/dfinity-lab/dfinity", - "rev": "4402d73e4470e8eccbe6b69b6218a9c098f4beb1", - "tag": "release-2020-08-17.RC00", + "rev": "9091dc6baa1bde728e96229294043650680dee33", "type": "git" }, "ic-ref": { From d8bcbddba8609e7dfe1d1e9ca16b76720c2e8b21 Mon Sep 17 00:00:00 2001 From: Nicolas Mattia Date: Mon, 31 Aug 2020 14:34:00 +0200 Subject: [PATCH 14/36] INF-1483: Update niv-updater-action (#975) The upstream updater was using an incorrect attribute: https://github.com/knl/niv-updater-action/pull/32 The new version is new released and tagged as v7. --- .github/workflows/niv-updater.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/niv-updater.yml b/.github/workflows/niv-updater.yml index 6bb3a2bc7c..f262603b44 100644 --- a/.github/workflows/niv-updater.yml +++ b/.github/workflows/niv-updater.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: niv-updater-action - uses: knl/niv-updater-action@v6 + uses: knl/niv-updater-action@v7 with: whitelist: 'common,advisory-db,napalm' title_prefix: 'build: ' From 34eedb04f58c8418c3514b9161ba5db376ec181c Mon Sep 17 00:00:00 2001 From: DFINITY bot <58022693+dfinity-bot@users.noreply.github.com> Date: Mon, 31 Aug 2020 15:05:14 +0200 Subject: [PATCH 15/36] build: niv motoko: update 7e436c2e -> 36478fa9 (#935) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changelog for motoko: Branch: release Commits: [dfinity-lab/motoko@7e436c2e...36478fa9](https://github.com/dfinity-lab/motoko/compare/7e436c2e095b63a8131b1cc7d19a59114b01db97...36478fa99ebad67faff154d051f3f44fe2765bbc) * [`ddafc26a`](https://github.com/dfinity-lab/motoko/commit/ddafc26afa3a4f221397518d1802cdb13feda074) Building.md: Say that versions contains three components ([dfinity-lab/motoko⁠#1833](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1833)) * [`01ba0480`](https://github.com/dfinity-lab/motoko/commit/01ba0480290f26ca9536f5abc7a2411d50a3fde9) Uses the same regex dfx uses ([dfinity-lab/motoko⁠#1834](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1834)) * [`0fb808d1`](https://github.com/dfinity-lab/motoko/commit/0fb808d1dc6885cd1a37a3c4a1ad6168d4be186f) Simplify and fix handling of byte escapes ([dfinity-lab/motoko⁠#1835](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1835)) * [`1a25dd2c`](https://github.com/dfinity-lab/motoko/commit/1a25dd2cc0ccba5b3b1d35f336341f0229d66c40) Structural equality frontend ([dfinity-lab/motoko⁠#1812](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1812)) * [`10974879`](https://github.com/dfinity-lab/motoko/commit/10974879a20b207076f4ddbcf9ba327ce750fc61) .did parser: Handle byte sequences correctly ([dfinity-lab/motoko⁠#1831](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1831)) * [`3fcb21f3`](https://github.com/dfinity-lab/motoko/commit/3fcb21f30df678529439c198e0f50b89bcb514af) niv common: update e4bf8183 -> 17b35f83 ([dfinity-lab/motoko⁠#1839](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1839)) * [`93db0a72`](https://github.com/dfinity-lab/motoko/commit/93db0a72b4f15d9bc38b3c7f3f9110161a3e8aef) Candid parser: Make func annotations proper keywords ([dfinity-lab/motoko⁠#1843](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1843)) * [`ef0e2597`](https://github.com/dfinity-lab/motoko/commit/ef0e2597e1ed276094970a298e99b697bc3a9830) Bump niv to allow overriding of dependencies. ([dfinity-lab/motoko⁠#1842](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1842)) * [`c58334f1`](https://github.com/dfinity-lab/motoko/commit/c58334f10a0ec91aad2cc51a4d9586924a70cefd) Compares actor references in the interpreter ([dfinity-lab/motoko⁠#1844](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1844)) * [`89b7490c`](https://github.com/dfinity-lab/motoko/commit/89b7490c5e1eb3dc594009146bdf83cd037e8a91) Structural equality (backend) ([dfinity-lab/motoko⁠#1821](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1821)) * [`bd1185e2`](https://github.com/dfinity-lab/motoko/commit/bd1185e225dd11395a13bd5e7d2071d4e2bec6a8) niv common: update 17b35f83 -> ef25d4d5 ([dfinity-lab/motoko⁠#1848](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1848)) * [`7d9b099d`](https://github.com/dfinity-lab/motoko/commit/7d9b099db3b8cd67be0a8ddeb39f3d802e600b85) niv dfinity: update a408ca38 -> 7885cd5d ([dfinity-lab/motoko⁠#1850](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1850)) * [`3b87587b`](https://github.com/dfinity-lab/motoko/commit/3b87587bcc602e3deaca821ab38bcc7e8efd0ce9) test and workaround for issue [dfinity-lab/motoko⁠#1847](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1847) * [`e4208d02`](https://github.com/dfinity-lab/motoko/commit/e4208d0207293aabeae40beb509e908b1559d28c) Adds a Changelog entry for structural equality ([dfinity-lab/motoko⁠#1846](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1846)) * [`78bc8c81`](https://github.com/dfinity-lab/motoko/commit/78bc8c81a1f88262d6305b2ef7133b8c68683b03) niv common: update ef25d4d5 -> c6e7bd53 ([dfinity-lab/motoko⁠#1853](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1853)) * [`4a174638`](https://github.com/dfinity-lab/motoko/commit/4a17463826eba9997cb39db5cd7901707dc1b854) Support GOT.func imports in mo-ld ([dfinity-lab/motoko⁠#1811](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1811)) * [`36478fa9`](https://github.com/dfinity-lab/motoko/commit/36478fa99ebad67faff154d051f3f44fe2765bbc) Release 0.4.2 ([dfinity-lab/motoko⁠#1855](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/motoko/issues/1855)) --- nix/sources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/sources.json b/nix/sources.json index 6647b07b58..5d1a5e2124 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -52,7 +52,7 @@ "motoko": { "branch": "release", "repo": "ssh://git@github.com/dfinity-lab/motoko", - "rev": "7e436c2e095b63a8131b1cc7d19a59114b01db97", + "rev": "36478fa99ebad67faff154d051f3f44fe2765bbc", "type": "git" }, "napalm": { From 34ea215970322ed6552136fe56fb577197a49b7a Mon Sep 17 00:00:00 2001 From: DFINITY bot <58022693+dfinity-bot@users.noreply.github.com> Date: Mon, 31 Aug 2020 18:03:46 +0200 Subject: [PATCH 16/36] build: niv common: update 01f876ed -> 2a0a8ef1 (#976) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Changelog for common: Branch: master Commits: [dfinity-lab/common@01f876ed...2a0a8ef1](https://github.com/dfinity-lab/common/compare/01f876edfbafbaa2b4740489a3a179ebddda062e...2a0a8ef1f7591300ad6cfc807548376734660ace) * [`8f122bb4`](https://github.com/dfinity-lab/common/commit/8f122bb4312313e8a5143d92e34f106c1c8405d9) Revert "Revert "[INF-1384] rustc: 1.43 => 1.45, add rust-analyzer" ([dfinity-lab/common⁠#244](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/common/issues/244))" ([dfinity-lab/common⁠#245](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/common/issues/245)) * [`5b875a02`](https://github.com/dfinity-lab/common/commit/5b875a0212f52e9372b166eafd3fecfec195af71) Add yotam to accounts * [`3097a75b`](https://github.com/dfinity-lab/common/commit/3097a75b9bc7d7bc7c139d042bce7e7cc4d64a95) add bogdan to accounts * [`8c1d0bf5`](https://github.com/dfinity-lab/common/commit/8c1d0bf508df2c253f18b5ce4588379bfffb9e80) add rahul to accounts * [`ac2e4383`](https://github.com/dfinity-lab/common/commit/ac2e438342c614b91030607407ab15fadb0d872d) niv niv: update 89ae775e -> fad2a6cb * [`f0a9530e`](https://github.com/dfinity-lab/common/commit/f0a9530eda23667d337a1ac501e0e6edb0ef20a7) INF-1483: Update niv-updater-action * [`b079b6d5`](https://github.com/dfinity-lab/common/commit/b079b6d52ecef4a7930d9dad562a07e0f840f8ea) Revert "Revert "Revert "[INF-1384] rustc: 1.43 => 1.45, add rust-analyzer" ([dfinity-lab/common⁠#244](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/common/issues/244))" ([dfinity-lab/common⁠#245](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/common/issues/245))" ([dfinity-lab/common⁠#261](http://r.duckduckgo.com/l/?uddg=https://github.com/dfinity-lab/common/issues/261)) * [`2a0a8ef1`](https://github.com/dfinity-lab/common/commit/2a0a8ef1f7591300ad6cfc807548376734660ace) INF-1486: Document how to perform a rustc upgrade [INF-1384]: https://dfinity.atlassian.net/browse/INF-1384 [INF-1384]: https://dfinity.atlassian.net/browse/INF-1384 --- nix/sources.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nix/sources.json b/nix/sources.json index 5d1a5e2124..49821eed7b 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -34,13 +34,13 @@ "common": { "branch": "master", "repo": "ssh://git@github.com/dfinity-lab/common", - "rev": "01f876edfbafbaa2b4740489a3a179ebddda062e", + "rev": "2a0a8ef1f7591300ad6cfc807548376734660ace", "type": "git" }, "dfinity": { - "tag": "release-2020-08-28.RC00", "repo": "ssh://git@github.com/dfinity-lab/dfinity", "rev": "9091dc6baa1bde728e96229294043650680dee33", + "tag": "release-2020-08-28.RC00", "type": "git" }, "ic-ref": { From 08db43ee4949fb42dd6eef012763681fcba5b6ff Mon Sep 17 00:00:00 2001 From: Hans Date: Mon, 31 Aug 2020 14:04:54 -0700 Subject: [PATCH 17/36] chore: update install script to not warn on MacOS Big Sur (#969) The official version is 11.0. --- public/install/200_downloader.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/public/install/200_downloader.sh b/public/install/200_downloader.sh index 35f2d07b5a..59286f18d8 100644 --- a/public/install/200_downloader.sh +++ b/public/install/200_downloader.sh @@ -13,11 +13,16 @@ check_help_for() { # If we're running on OS-X, older than 10.13, then we always # fail to find these options to force fallback if check_cmd sw_vers; then - if [ "$(sw_vers -productVersion | cut -d. -f2)" -lt 13 ]; then - # Older than 10.13 - echo "Warning: Detected OS X platform older than 10.13" - _ok="n" - fi + case "$(sw_vers -productVersion)" in + 10.13) ;; # High Sierra + 10.14) ;; # Mojave + 10.15) ;; # Catalina + 11.*) ;; # Big Sur + *) + warn "Detected OS X platform older than 10.13 (High Sierra)" + _ok="n" + ;; + esac fi for _arg in "$@"; do From 11aaafe1364645083b93006ef572f0fe2ab8d475 Mon Sep 17 00:00:00 2001 From: DFINITY bot <58022693+dfinity-bot@users.noreply.github.com> Date: Tue, 1 Sep 2020 18:03:21 +0200 Subject: [PATCH 18/36] build: niv advisory-db: update c341943a -> 68e0e1f7 (#979) ## Changelog for advisory-db: Branch: master Commits: [RustSec/advisory-db@c341943a...68e0e1f7](https://github.com/RustSec/advisory-db/compare/c341943a3c52a20ae5ca4c103d3a075e28d35106...68e0e1f7c0ea65eb8e306522a7aac5fc428020b5) * [`484d0022`](https://github.com/RustSec/advisory-db/commit/484d0022136e3dc1bb2620859fe88a390b836e74) Initial report for 0010-crayon * [`fe430023`](https://github.com/RustSec/advisory-db/commit/fe43002372cf5a3541b805aacc2d2b708a5e3b81) Assigned RUSTSEC-2020-0037 to crayon --- nix/sources.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix/sources.json b/nix/sources.json index 49821eed7b..d8ebad6918 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -6,10 +6,10 @@ "homepage": "https://rustsec.org", "owner": "RustSec", "repo": "advisory-db", - "rev": "c341943a3c52a20ae5ca4c103d3a075e28d35106", - "sha256": "0l1iw3pgszc4k2g8plgcql45rqav890y93mz8mp8fjyzhgl137dw", + "rev": "68e0e1f7c0ea65eb8e306522a7aac5fc428020b5", + "sha256": "03xykmwip8sz9w6r88l4kx9439cxdgjzqqv989q6gz67mj1p654c", "type": "tarball", - "url": "https://github.com/RustSec/advisory-db/archive/c341943a3c52a20ae5ca4c103d3a075e28d35106.tar.gz", + "url": "https://github.com/RustSec/advisory-db/archive/68e0e1f7c0ea65eb8e306522a7aac5fc428020b5.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "agent-js-monorepo": { From 164490b6e6bb6dbb87ffba69cf339d519028546d Mon Sep 17 00:00:00 2001 From: DFINITY bot <58022693+dfinity-bot@users.noreply.github.com> Date: Tue, 1 Sep 2020 18:31:16 +0200 Subject: [PATCH 19/36] build: niv napalm: update 47e8d246 -> 3b687c6b (#980) ## Changelog for napalm: Branch: master Commits: [nmattia/napalm@47e8d246...3b687c6b](https://github.com/nmattia/napalm/compare/47e8d246cba57a346db15f6a33ba61c54d3b5c05...3b687c6b0190559d484d0602e7a28ab00eb6e212) * [`14fe15e4`](https://github.com/nmattia/napalm/commit/14fe15e40a47bcb272701a1e53401f963d860be6) Fix typo 'Runnig npm command' -> 'Running npm command' --- nix/sources.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix/sources.json b/nix/sources.json index d8ebad6918..d4612b89cc 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -62,10 +62,10 @@ "homepage": "", "owner": "nmattia", "repo": "napalm", - "rev": "47e8d246cba57a346db15f6a33ba61c54d3b5c05", - "sha256": "1dxj8jqi0292s1xalis0mr1p3ck3zxqxx0xwlvx856kcnp317x8b", + "rev": "3b687c6b0190559d484d0602e7a28ab00eb6e212", + "sha256": "0c85v8cjb4x3xfizywv8087ch9f5b9bw2ykc819zf6b0d9zjvviw", "type": "tarball", - "url": "https://github.com/nmattia/napalm/archive/47e8d246cba57a346db15f6a33ba61c54d3b5c05.tar.gz", + "url": "https://github.com/nmattia/napalm/archive/3b687c6b0190559d484d0602e7a28ab00eb6e212.tar.gz", "url_template": "https://github.com///archive/.tar.gz" } } From 8b0f2ffad39d34175f120a865a946d33a7fdb631 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 14:00:43 -0700 Subject: [PATCH 20/36] reset assets.nix to master --- assets.nix | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/assets.nix b/assets.nix index 9ad7287a46..a519a789ec 100644 --- a/assets.nix +++ b/assets.nix @@ -1,7 +1,5 @@ -{ system ? builtins.currentSystem -, pkgs ? import ./nix {} -, bootstrap-js ? import ./nix/agent-js/bootstrap-js.nix { inherit system pkgs; } -, agent-js ? import ./nix/agent-js/agent-js.nix { inherit system pkgs; } +{ pkgs ? import ./nix {} +, bootstrap-js ? import ./src/bootstrap { inherit pkgs; } , distributed-canisters ? import ./distributed-canisters.nix { inherit pkgs; } }: pkgs.runCommandNoCCLocal "assets" {} '' @@ -19,8 +17,5 @@ pkgs.runCommandNoCCLocal "assets" {} '' mkdir $out/bootstrap cp -R ${bootstrap-js.out}/* $out/bootstrap/ - mkdir $out/agent-js - cp -R ${agent-js.out}/* $out/agent-js/ - cp -R ${distributed-canisters} $out/canisters '' From 363842403e4e77d98c249f910e717a8a4da92a81 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 14:22:47 -0700 Subject: [PATCH 21/36] fix: rm accidental file '71' --- 71 | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 71 diff --git a/71 b/71 deleted file mode 100644 index e69de29bb2..0000000000 From c10cdbf466d9c121a4fbb9bcd66effd2e296c650 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 14:23:34 -0700 Subject: [PATCH 22/36] fix: clean up nix/agent-js/agent-js-monorepo.nix --- default.nix | 1 + nix/agent-js/agent-js-monorepo.nix | 46 +++++++++++++++++++----------- nix/agent-js/agent-js.nix | 19 ++++++------ nix/agent-js/bootstrap-js.nix | 17 ++++++----- package-lock.json | 3 -- 5 files changed, 51 insertions(+), 35 deletions(-) delete mode 100644 package-lock.json diff --git a/default.nix b/default.nix index 7773f97f1b..0ceb068e0e 100644 --- a/default.nix +++ b/default.nix @@ -14,6 +14,7 @@ rec { node-e2e-tests = import ./e2e/node { inherit pkgs dfx; }; # Agents in varous languages + agent-js-monorepo = pkgs.agent-js-monorepo; agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; # Bootstrap frontend. diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index f812c2a414..548fb21dec 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -1,47 +1,59 @@ { pkgs ? import ../. { inherit system; } , system ? builtins.currentSystem - # This should be via sourcesnix for the git monorepo + # This should be a fs path to a checked-out agent-js git repo. + # e.g. via niv at `nix-instantiate nix -A sources.agent-js-monorepo --eval` , agent-js-monorepo-src }: let src = agent-js-monorepo-src; agentPackagePath = (src + "/packages/agent"); - monorepo = pkgs.napalm.buildPackage src { - name = "agent-js-monorepo"; - buildInputs = [ - pkgs.python3 - ]; + # derivation that has all system dependencies required to build the npm monorepo: + # * npm requires python3 to build with gyp + # * on mac, npm may try to use fsevents + monorepoSystemRequirements = pkgs.stdenv.mkDerivation { + inherit src; + name = "agent-js-monorepo-systemRequirements"; propagatedNativeBuildInputs = [ # Required by node-gyp pkgs.python3 ]; - propagatedBuildInputs = pkgs.lib.optional pkgs.stdenv.isDarwin - # Required by fsevents - pkgs.darwin.apple_sdk.frameworks.CoreServices; + propagatedBuildInputs = [ + ( + pkgs.lib.optional pkgs.stdenv.isDarwin + # Required by fsevents + pkgs.darwin.apple_sdk.frameworks.CoreServices + ) + ]; + installPhase = '' + mkdir -p $out + ''; + }; + monorepo = pkgs.napalm.buildPackage src { + name = "agent-js-monorepo"; + propagatedBuildInputs = [ + monorepoSystemRequirements + ]; outputs = [ "out" + "lib" "agent" "bootstrap" - "lib" - ]; - # HUSKY_DEBUG = "1"; - # HUSKY_SKIP_INSTALL = "1"; - npmCommands = [ - "npm install" ]; installPhase = '' + # $out: Everything! mkdir -p $out - cp -R ./* $out/ - # Copy node_modules to be reused elsewhere. + # $lib/node_modules: fetched npm dependencies mkdir -p $lib test -d node_modules && cp -R node_modules $lib || true + # $agent: npm subpackage @dfinity/agent mkdir -p $agent cp -R node_modules $agent/ cp -R ./packages/agent/* $agent/ + # $bootstrap: npm subpackage @dfinity/bootstrap mkdir -p $bootstrap cp -R node_modules $bootstrap/ cp -R ./packages/bootstrap/* $bootstrap/ diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index 608367a753..7b735c9798 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -2,8 +2,8 @@ , system ? builtins.currentSystem }: pkgs.stdenv.mkDerivation { - name = "agent-js"; - src = "${pkgs.agent-js-monorepo}/packages/agent/"; + name = "agent-js-monorepo-package-agent"; + src = "${pkgs.agent-js-monorepo}/packages/agent"; buildInputs = [ pkgs.nodejs ]; outputs = [ "out" @@ -11,17 +11,20 @@ pkgs.stdenv.mkDerivation { ]; buildPhase = '' # Don't run `npm run build` here, which will call `tsc -b`. - # `tsc -b` will use typescrpit project references to build things, - # which may try to read from other packages. But nix will error on read from those dirs. - # Let all building happen on the monorepo package. + # `tsc -b` will use typescript project references to build things, + # which may try to read from other packages, which will fail due to writing in an external nix store. + # We expect pkgs.agent-js-monorepo to have already taken care of the `npm install` part of fetching deps. ''; installPhase = '' + # $out: everything mkdir -p $out - cp -R ./* $out/ - # Copy node_modules to be reused elsewhere. + # $lib/node_modules: node_modules dir that must be resolvable by npm + # for future build steps to work (e.g. at ../../node_modules) mkdir -p $lib - test -d node_modules && cp -R node_modules $lib || true + if test -d node_modules; then + cp -R node_modules $lib; + fi ''; } diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index 83f190eda3..fc1d4c25bc 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -2,7 +2,7 @@ , system ? builtins.currentSystem }: pkgs.stdenv.mkDerivation { - name = "bootstrap-js"; + name = "agent-js-monorepo-package-bootstrap"; src = "${pkgs.agent-js-monorepo}/packages/bootstrap/"; buildInputs = [ pkgs.nodejs ]; outputs = [ @@ -11,17 +11,20 @@ pkgs.stdenv.mkDerivation { ]; buildPhase = '' # Don't run `npm run build` here, which will call `tsc -b`. - # `tsc -b` will use typescrpit project references to build things, - # which may try to read from other packages. But nix will error on read from those dirs. - # Let all building happen on the monorepo package. + # `tsc -b` will use typescript project references to build things, + # which may try to read from other packages, which will fail due to writing in an external nix store. + # We expect pkgs.agent-js-monorepo to have already taken care of the `npm install` part of fetching deps. ''; installPhase = '' + # $out: everything mkdir -p $out - cp -R ./* $out/ - # Copy node_modules to be reused elsewhere. + # $lib/node_modules: node_modules dir that must be resolvable by npm + # for future build steps to work (e.g. at ../../node_modules) mkdir -p $lib - test -d node_modules && cp -R node_modules $lib || true + if test -d node_modules; then + cp -R node_modules $lib; + fi ''; } diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 48e341a095..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "lockfileVersion": 1 -} From 281ff1be06975e8f0ecb9bc0396a52ec0c4ea68e Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 15:08:46 -0700 Subject: [PATCH 23/36] chore: update niv ref to agent-js-monorepo@e017c90eeb982536caf6e5341b43ee6da8598181 --- nix/sources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/sources.json b/nix/sources.json index d4612b89cc..4f7424dee6 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "c8a44f04bede186abc7c99e3a892a247dea05690", + "rev": "e017c90eeb982536caf6e5341b43ee6da8598181", "type": "git" }, "bats-support": { From 0e7fc90edd12dd648c7e0a239588016588025ded Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 15:21:13 -0700 Subject: [PATCH 24/36] chore: update niv ref to agent-js-monorepo@e017c90eeb982536caf6e5341b43ee6da8598181 --- nix/sources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/sources.json b/nix/sources.json index 4f7424dee6..5ce833a059 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "e017c90eeb982536caf6e5341b43ee6da8598181", + "rev": "373eb2e0ee1e3b71a3a3cca58fa91db18fab8b9b", "type": "git" }, "bats-support": { From 68e0f3e17f1603f78b7a9fbc284d27fab997b4e9 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 16:51:23 -0700 Subject: [PATCH 25/36] chore: rm src/{bootstrap,agent/javascript} --- default.nix | 1 - src/agent/javascript/.gitignore | 14 - src/agent/javascript/.npmignore | 12 - src/agent/javascript/.prettierrc | 11 - src/agent/javascript/INTERNAL.adoc | 20 - src/agent/javascript/README.md | 7 - src/agent/javascript/default.nix | 39 - src/agent/javascript/jest.config.js | 16 - src/agent/javascript/package-lock.json | 5238 ----------- src/agent/javascript/package.json | 40 - src/agent/javascript/shell.nix | 10 - src/agent/javascript/src/actor.test.ts | 208 - src/agent/javascript/src/actor.ts | 352 - src/agent/javascript/src/agent/api.ts | 46 - src/agent/javascript/src/agent/http.ts | 348 - src/agent/javascript/src/agent/index.ts | 3 - src/agent/javascript/src/agent/proxy.ts | 236 - src/agent/javascript/src/auth.ts | 81 - .../javascript/src/candid/candid-core.ts | 254 - src/agent/javascript/src/candid/candid-ui.ts | 248 - src/agent/javascript/src/candid/index.ts | 2 - src/agent/javascript/src/canisters/asset.ts | 17 - .../javascript/src/canisters/asset_idl.ts | 11 - .../javascript/src/canisters/management.ts | 28 - .../src/canisters/management_idl.ts | 31 - src/agent/javascript/src/cbor.test.ts | 63 - src/agent/javascript/src/cbor.ts | 80 - src/agent/javascript/src/http_agent.test.ts | 243 - .../javascript/src/http_agent_transforms.ts | 10 - src/agent/javascript/src/http_agent_types.ts | 197 - src/agent/javascript/src/idl.test.ts | 416 - src/agent/javascript/src/idl.ts | 1619 ---- src/agent/javascript/src/index.ts | 35 - src/agent/javascript/src/principal.ts | 68 - src/agent/javascript/src/reject_code.ts | 7 - src/agent/javascript/src/request_id.test.ts | 80 - src/agent/javascript/src/request_id.ts | 76 - src/agent/javascript/src/types.ts | 32 - src/agent/javascript/src/utils/getCrc.ts | 5 - src/agent/javascript/src/utils/hash.test.ts | 27 - src/agent/javascript/src/utils/hash.ts | 25 - src/agent/javascript/src/utils/leb128.test.ts | 73 - src/agent/javascript/src/utils/leb128.ts | 162 - src/agent/javascript/src/utils/sha224.ts | 8 - src/agent/javascript/test-setup.js | 12 - src/agent/javascript/tsconfig.json | 75 - src/agent/javascript/tslint.json | 34 - src/agent/javascript/types/base32.d.ts | 23 - src/agent/javascript/types/borc.d.ts | 17 - src/agent/javascript/types/buffer-pipe.d.ts | 46 - src/bootstrap/.gitignore | 18 - src/bootstrap/.prettierrc | 11 - src/bootstrap/README.adoc | 46 - src/bootstrap/README.html | 560 -- src/bootstrap/default.nix | 49 - src/bootstrap/package-lock.json | 7974 ----------------- src/bootstrap/package.json | 45 - src/bootstrap/src/candid/candid.css | 74 - src/bootstrap/src/candid/candid.html | 16 - src/bootstrap/src/candid/candid.ts | 167 - src/bootstrap/src/dfinity.png | Bin 18240 -> 0 bytes src/bootstrap/src/host.ts | 84 - src/bootstrap/src/index.html | 14 - src/bootstrap/src/index.ts | 85 - src/bootstrap/src/login.html | 18 - src/bootstrap/src/login.ts | 29 - src/bootstrap/src/site.ts | 201 - src/bootstrap/src/storage.ts | 29 - src/bootstrap/src/worker.html | 8 - src/bootstrap/src/worker.ts | 43 - src/bootstrap/tsconfig.json | 28 - src/bootstrap/tslint.json | 34 - src/bootstrap/types/base32.d.ts | 23 - src/bootstrap/types/borc.d.ts | 17 - src/bootstrap/types/buffer-pipe.d.ts | 46 - src/bootstrap/webpack.config.js | 85 - 76 files changed, 20410 deletions(-) delete mode 100644 src/agent/javascript/.gitignore delete mode 100644 src/agent/javascript/.npmignore delete mode 100644 src/agent/javascript/.prettierrc delete mode 100644 src/agent/javascript/INTERNAL.adoc delete mode 100644 src/agent/javascript/README.md delete mode 100644 src/agent/javascript/default.nix delete mode 100644 src/agent/javascript/jest.config.js delete mode 100644 src/agent/javascript/package-lock.json delete mode 100644 src/agent/javascript/package.json delete mode 100644 src/agent/javascript/shell.nix delete mode 100644 src/agent/javascript/src/actor.test.ts delete mode 100644 src/agent/javascript/src/actor.ts delete mode 100644 src/agent/javascript/src/agent/api.ts delete mode 100644 src/agent/javascript/src/agent/http.ts delete mode 100644 src/agent/javascript/src/agent/index.ts delete mode 100644 src/agent/javascript/src/agent/proxy.ts delete mode 100644 src/agent/javascript/src/auth.ts delete mode 100644 src/agent/javascript/src/candid/candid-core.ts delete mode 100644 src/agent/javascript/src/candid/candid-ui.ts delete mode 100644 src/agent/javascript/src/candid/index.ts delete mode 100644 src/agent/javascript/src/canisters/asset.ts delete mode 100644 src/agent/javascript/src/canisters/asset_idl.ts delete mode 100644 src/agent/javascript/src/canisters/management.ts delete mode 100644 src/agent/javascript/src/canisters/management_idl.ts delete mode 100644 src/agent/javascript/src/cbor.test.ts delete mode 100644 src/agent/javascript/src/cbor.ts delete mode 100644 src/agent/javascript/src/http_agent.test.ts delete mode 100644 src/agent/javascript/src/http_agent_transforms.ts delete mode 100644 src/agent/javascript/src/http_agent_types.ts delete mode 100644 src/agent/javascript/src/idl.test.ts delete mode 100644 src/agent/javascript/src/idl.ts delete mode 100644 src/agent/javascript/src/index.ts delete mode 100644 src/agent/javascript/src/principal.ts delete mode 100644 src/agent/javascript/src/reject_code.ts delete mode 100644 src/agent/javascript/src/request_id.test.ts delete mode 100644 src/agent/javascript/src/request_id.ts delete mode 100644 src/agent/javascript/src/types.ts delete mode 100644 src/agent/javascript/src/utils/getCrc.ts delete mode 100644 src/agent/javascript/src/utils/hash.test.ts delete mode 100644 src/agent/javascript/src/utils/hash.ts delete mode 100644 src/agent/javascript/src/utils/leb128.test.ts delete mode 100644 src/agent/javascript/src/utils/leb128.ts delete mode 100644 src/agent/javascript/src/utils/sha224.ts delete mode 100644 src/agent/javascript/test-setup.js delete mode 100644 src/agent/javascript/tsconfig.json delete mode 100644 src/agent/javascript/tslint.json delete mode 100644 src/agent/javascript/types/base32.d.ts delete mode 100644 src/agent/javascript/types/borc.d.ts delete mode 100644 src/agent/javascript/types/buffer-pipe.d.ts delete mode 100644 src/bootstrap/.gitignore delete mode 100644 src/bootstrap/.prettierrc delete mode 100644 src/bootstrap/README.adoc delete mode 100644 src/bootstrap/README.html delete mode 100644 src/bootstrap/default.nix delete mode 100644 src/bootstrap/package-lock.json delete mode 100644 src/bootstrap/package.json delete mode 100644 src/bootstrap/src/candid/candid.css delete mode 100644 src/bootstrap/src/candid/candid.html delete mode 100644 src/bootstrap/src/candid/candid.ts delete mode 100644 src/bootstrap/src/dfinity.png delete mode 100644 src/bootstrap/src/host.ts delete mode 100644 src/bootstrap/src/index.html delete mode 100644 src/bootstrap/src/index.ts delete mode 100644 src/bootstrap/src/login.html delete mode 100644 src/bootstrap/src/login.ts delete mode 100644 src/bootstrap/src/site.ts delete mode 100644 src/bootstrap/src/storage.ts delete mode 100644 src/bootstrap/src/worker.html delete mode 100644 src/bootstrap/src/worker.ts delete mode 100644 src/bootstrap/tsconfig.json delete mode 100644 src/bootstrap/tslint.json delete mode 100644 src/bootstrap/types/base32.d.ts delete mode 100644 src/bootstrap/types/borc.d.ts delete mode 100644 src/bootstrap/types/buffer-pipe.d.ts delete mode 100644 src/bootstrap/webpack.config.js diff --git a/default.nix b/default.nix index 0ceb068e0e..e94d956c8e 100644 --- a/default.nix +++ b/default.nix @@ -35,7 +35,6 @@ rec { # `shell.nix` in the root to provide an environment which is the composition # of all the shells here. shells = { - js-user-library = import ./src/agent/javascript/shell.nix { inherit pkgs agent-js; }; rust-workspace = dfx.shell; }; diff --git a/src/agent/javascript/.gitignore b/src/agent/javascript/.gitignore deleted file mode 100644 index d0ead26ec0..0000000000 --- a/src/agent/javascript/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -build_info.json -node_modules/ -dist/ -**/*.js -**/*.js.map -**/*.d.ts - -# Cannot ignore .d.ts files in types/ -!types/**/*.d.ts - -# Cannot ignore setup files for webpack and jest, which are still JavaScript. -!webpack.config.js -!jest.config.js -!test-setup.js diff --git a/src/agent/javascript/.npmignore b/src/agent/javascript/.npmignore deleted file mode 100644 index 903cf392c9..0000000000 --- a/src/agent/javascript/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -# We work with a safelist here, so block everything that's not permitted, and add packages -# that are. -** - -!src/**/*.d.ts -!src/**/*.js -!types/**/*.d.ts -!package.json -!README.md - -# The following line further removes all test files (which matches .js and .d.ts). -src/**/*.test.* diff --git a/src/agent/javascript/.prettierrc b/src/agent/javascript/.prettierrc deleted file mode 100644 index 4592d0205d..0000000000 --- a/src/agent/javascript/.prettierrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "trailingComma": "all", - "tabWidth": 2, - "printWidth": 100, - "semi": true, - "bracketSpacing": true, - "useTabs": false, - "singleQuote": true, - "quoteProps": "consistent", - "arrowParens": "avoid" -} diff --git a/src/agent/javascript/INTERNAL.adoc b/src/agent/javascript/INTERNAL.adoc deleted file mode 100644 index ab0811a27a..0000000000 --- a/src/agent/javascript/INTERNAL.adoc +++ /dev/null @@ -1,20 +0,0 @@ -= JavaScript User Library - -This is an internal document and is not published to NPM. The public facing README is in -`./README.md`. This file can be safely removed once we are open sourced. - -Package: `@dfinity/agent` - -== Development - -=== How to build and use locally - -In this repo: - -[source,bash] -cd src/agent/javascript # You are here -npm install -npm run bundle -JS_AGENT_PATH=$(pwd) -cd MY_PROJECT_PATH ## <<<<< Put in the project you want to test. -npm install ${JS_AGENT_PATH} ## This will likely create a symlink. diff --git a/src/agent/javascript/README.md b/src/agent/javascript/README.md deleted file mode 100644 index fdba619a8f..0000000000 --- a/src/agent/javascript/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# JavaScript User Library - -Package: `@dfinity/agent` - -## API - -TBD. diff --git a/src/agent/javascript/default.nix b/src/agent/javascript/default.nix deleted file mode 100644 index aabcb44b7e..0000000000 --- a/src/agent/javascript/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ pkgs ? import ../../../nix { inherit system; } -, system ? builtins.currentSystem -}: -let - src = pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.); -in -pkgs.napalm.buildPackage src { - root = ./.; - name = "dfinity-sdk-agent-js"; - - outputs = [ "out" "lib" ]; - - propagatedNativeBuildInputs = [ - # Required by node-gyp - pkgs.python3 - ]; - propagatedBuildInputs = pkgs.lib.optional pkgs.stdenv.isDarwin - # Required by fsevents - pkgs.darwin.apple_sdk.frameworks.CoreServices; - - # ci script now does everything CI should do. Bundle is needed because it's the output - # of the nix derivation. - npmCommands = [ - "npm install" - "npm run ci" - "npm run bundle" - ]; - - installPhase = '' - npm pack - mkdir -p $out - - cp dfinity-*.tgz $out - - # Copy node_modules to be reused elsewhere. - mkdir -p $lib - cp -R node_modules $lib - ''; -} diff --git a/src/agent/javascript/jest.config.js b/src/agent/javascript/jest.config.js deleted file mode 100644 index f3d719b728..0000000000 --- a/src/agent/javascript/jest.config.js +++ /dev/null @@ -1,16 +0,0 @@ -module.exports = { - bail: false, - setupFiles: [ - "./test-setup", - ], - setupFilesAfterEnv: [ - "jest-expect-message", - ], - testPathIgnorePatterns: [ - "/node_modules/", - "/out/", - ], - transform: { - "^.+\\.ts$": "ts-jest" - } -}; diff --git a/src/agent/javascript/package-lock.json b/src/agent/javascript/package-lock.json deleted file mode 100644 index f7e3ce0a03..0000000000 --- a/src/agent/javascript/package-lock.json +++ /dev/null @@ -1,5238 +0,0 @@ -{ - "name": "@dfinity/agent", - "version": "0.6.5", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.2.tgz", - "integrity": "sha512-eeD7VEZKfhK1KUXGiyPFettgF3m513f8FoBSWiQ1xTvl1RAopLs42Wp9+Ze911I6H0N9lNqJMDgoZT7gHsipeQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.2", - "@babel/helpers": "^7.7.0", - "@babel/parser": "^7.7.2", - "@babel/template": "^7.7.0", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.7.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz", - "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz", - "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.0", - "@babel/template": "^7.7.0", - "@babel/types": "^7.7.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz", - "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==", - "dev": true, - "requires": { - "@babel/types": "^7.7.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz", - "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.0" - } - }, - "@babel/helpers": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz", - "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==", - "dev": true, - "requires": { - "@babel/template": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0" - } - }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz", - "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==", - "dev": true - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } - }, - "@babel/template": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", - "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/types": "^7.7.0" - } - }, - "@babel/traverse": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz", - "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.2", - "@babel/helper-function-name": "^7.7.0", - "@babel/helper-split-export-declaration": "^7.7.0", - "@babel/parser": "^7.7.2", - "@babel/types": "^7.7.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz", - "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz", - "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@trust/keyto": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@trust/keyto/-/keyto-0.3.7.tgz", - "integrity": "sha512-t5kWWCTkPgg24JWVuCTPMx7l13F7YHdxBeJkT1vmoHjROgiOIEAN8eeY+iRmP1Hwsx+S7U55HyuqSsECr08a8A==", - "dev": true, - "requires": { - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "elliptic": "^6.4.1" - } - }, - "@trust/webcrypto": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@trust/webcrypto/-/webcrypto-0.9.2.tgz", - "integrity": "sha512-5iMAVcGYKhqLJGjefB1nzuQSqUJTru0nG4CytpBT/GGp1Piz/MVnj2jORdYf4JBYzggCIa8WZUr2rchP2Ngn/w==", - "dev": true, - "requires": { - "@trust/keyto": "^0.3.4", - "base64url": "^3.0.0", - "elliptic": "^6.4.0", - "node-rsa": "^0.4.0", - "text-encoding": "^0.6.1" - }, - "dependencies": { - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - } - } - }, - "@types/babel__core": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", - "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz", - "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", - "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/crc": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/crc/-/crc-3.4.0.tgz", - "integrity": "sha1-I2a+tDmc1zSzPkLHrICVduYX1Io=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.0.23", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.23.tgz", - "integrity": "sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==", - "dev": true, - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/node": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.9.0.tgz", - "integrity": "sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz", - "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.2.0.tgz", - "integrity": "sha512-Q7hnYGGNYbcmGrCPulXfkEw7oW7qjWeM4ZTALmgpuIcZLxyqqKYWxCZg2UBm8bklrnB4m2mGyJPWfoktdORD8A==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=" - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - } - } - }, - "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "borc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/borc/-/borc-2.1.1.tgz", - "integrity": "sha512-vPLLC2/gS0QN4O3cnPh+8jLshkMMD4qIfs+B1TPGPh30WrtcfItaO6j4k9alsqu/hIgKi8dVdmMvTcbq4tIF7A==", - "requires": { - "bignumber.js": "^9.0.0", - "commander": "^2.15.0", - "ieee754": "^1.1.8", - "iso-url": "~0.4.4", - "json-text-sequence": "~0.1.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-pipe": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/buffer-pipe/-/buffer-pipe-0.0.4.tgz", - "integrity": "sha512-8cHio1V6wgX+LIX6+af4tCn0+Ljl2vQd9JZdZ8vDJZdDf8x5p2DneKaq1dWxSswJG+sK4Inok9aqoqILG5kQVQ==", - "requires": { - "safe-buffer": "^5.1.2" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "requires": { - "buffer": "^5.1.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delimit-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/delimit-stream/-/delimit-stream-0.1.0.tgz", - "integrity": "sha1-m4MZR3wOX4rrPONXrjBfwl6hzSs=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", - "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.0", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-inspect": "^1.6.0", - "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "iso-url": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-0.4.6.tgz", - "integrity": "sha512-YQO7+aIe6l1aSJUKOx+Vrv08DlhZeLFIVfehG2L29KLSEb9RszqPXilxJRVpp57px36BddKR5ZsebacO5qG0tg==" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-expect-message": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz", - "integrity": "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==", - "dev": true - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json-text-sequence": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.1.1.tgz", - "integrity": "sha1-py8hfcSvxGKf/1/rME3BvVGi89I=", - "requires": { - "delimit-stream": "0.1.0" - } - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - } - }, - "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", - "dev": true, - "requires": { - "mime-db": "1.42.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-rsa": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.4.2.tgz", - "integrity": "sha1-1jkXKewWqDDtWjgEKzFX0tXXJTA=", - "dev": true, - "requires": { - "asn1": "0.2.3" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "prompts": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", - "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.3" - } - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", - "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@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" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-cbor": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/simple-cbor/-/simple-cbor-0.4.0.tgz", - "integrity": "sha512-2oeucfnjm6V3ngHLQuWSy6QT5dRtma5xZzTa5g+OLz6mlJGoxzE6fe+OT1fRwmpdHAapPm+o7PTiRNJpUuTgQA==" - }, - "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - } - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "dev": true - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "ts-jest": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.2.0.tgz", - "integrity": "sha512-Yc+HLyldlIC9iIK8xEN7tV960Or56N49MDP7hubCZUeI7EbIOTsas6rXCMB4kQjLACJ7eDOF4xWEO5qumpKsag==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", - "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "typescript": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", - "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/src/agent/javascript/package.json b/src/agent/javascript/package.json deleted file mode 100644 index 442cebce6f..0000000000 --- a/src/agent/javascript/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@dfinity/agent", - "version": "0.6.5", - "main": "src/index.js", - "scripts": { - "build": "tsc -p tsconfig.json", - "bundle": "npm run build", - "ci": "npm run prettier && npm run lint && npm run build && npm run test", - "lint": "tslint --project tsconfig.json --config tslint.json", - "lint:fix": "npm run lint -- --fix", - "prettier": "npx prettier --check \"src/**/*.ts\"", - "prettier:write": "npm run prettier -- --write", - "test": "jest --verbose" - }, - "dependencies": { - "base32.js": "^0.1.0", - "bignumber.js": "^9.0.0", - "borc": "^2.1.1", - "buffer": "^5.4.3", - "buffer-pipe": "0.0.4", - "crc": "3.8.0", - "js-sha256": "0.9.0", - "simple-cbor": "^0.4.0", - "tweetnacl": "^1.0.1" - }, - "devDependencies": { - "@trust/webcrypto": "^0.9.2", - "@types/crc": "^3.4.0", - "@types/jest": "^24.0.18", - "jest": "^24.9.0", - "jest-expect-message": "^1.0.2", - "node-fetch": "2.6.0", - "prettier": "^2.0.5", - "text-encoding": "^0.7.0", - "ts-jest": "^24.2.0", - "tslint": "^5.20.0", - "typescript": "^3.6.3", - "whatwg-fetch": "^3.0.0" - } -} diff --git a/src/agent/javascript/shell.nix b/src/agent/javascript/shell.nix deleted file mode 100644 index bf74735a7f..0000000000 --- a/src/agent/javascript/shell.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ pkgs ? import ../../../nix { inherit system; } -, system ? builtins.currentSystem -, agent-js ? import ./. { inherit pkgs; } -}: -pkgs.mkCiShell { - name = "dfinity-js-user-library-env"; - inputsFrom = [ - agent-js - ]; -} diff --git a/src/agent/javascript/src/actor.test.ts b/src/agent/javascript/src/actor.test.ts deleted file mode 100644 index 44af029c0d..0000000000 --- a/src/agent/javascript/src/actor.test.ts +++ /dev/null @@ -1,208 +0,0 @@ -import { Buffer } from 'buffer/'; -import { makeActorFactory } from './actor'; -import { HttpAgent } from './agent'; -import { makeAuthTransform, SenderPubKey, SenderSecretKey, SenderSig } from './auth'; -import * as cbor from './cbor'; -import { makeNonceTransform } from './http_agent_transforms'; -import { CallRequest, Signed, SubmitRequestType } from './http_agent_types'; -import * as IDL from './idl'; -import { Principal } from './principal'; -import { requestIdOf } from './request_id'; -import { blobFromHex, Nonce } from './types'; - -test('makeActor', async () => { - const actorInterface = () => { - return IDL.Service({ - greet: IDL.Func([IDL.Text], [IDL.Text]), - }); - }; - - const expectedReplyArg = blobFromHex(IDL.encode([IDL.Text], ['Hello, World!']).toString('hex')); - - const mockFetch: jest.Mock = jest - .fn() - .mockImplementationOnce((/*resource, init*/) => { - return Promise.resolve( - new Response(null, { - status: 202, - }), - ); - }) - .mockImplementationOnce((resource, init) => { - const body = cbor.encode({ status: 'unknown' }); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }) - .mockImplementationOnce((resource, init) => { - const body = cbor.encode({ status: 'received' }); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }) - .mockImplementationOnce((resource, init) => { - const body = cbor.encode({ status: 'processing' }); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }) - .mockImplementationOnce((resource, init) => { - const body = cbor.encode({ - status: 'replied', - reply: { - arg: expectedReplyArg, - }, - }); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }); - - const methodName = 'greet'; - const argValue = 'Name'; - - const arg = blobFromHex(IDL.encode([IDL.Text], [argValue]).toString('hex')); - - const canisterId = Principal.fromText('2chl6-4hpzw-vqaaa-aaaaa-c'); - const senderPubKey = Buffer.alloc(32, 0) as SenderPubKey; - const senderSecretKey = Buffer.alloc(32, 0) as SenderSecretKey; - const senderSig = Buffer.from([0]) as SenderSig; - const principal = await Principal.selfAuthenticating(senderPubKey); - const sender = principal.toBlob(); - - const nonces = [ - Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]) as Nonce, - Buffer.from([1, 2, 3, 4, 5, 6, 7, 8]) as Nonce, - Buffer.from([2, 3, 4, 5, 6, 7, 8, 9]) as Nonce, - Buffer.from([3, 4, 5, 6, 7, 8, 9, 0]) as Nonce, - Buffer.from([4, 5, 6, 7, 8, 9, 0, 1]) as Nonce, - ]; - - const expectedCallRequest = { - content: { - request_type: SubmitRequestType.Call, - canister_id: canisterId, - method_name: methodName, - arg, - nonce: nonces[0], - sender, - }, - sender_pubkey: senderPubKey, - sender_sig: senderSig, - } as Signed; - - const expectedCallRequestId = await requestIdOf(expectedCallRequest.content); - - let nonceCount = 0; - - const httpAgent = new HttpAgent({ - fetch: mockFetch, - principal, - }); - httpAgent.addTransform(makeNonceTransform(() => nonces[nonceCount++])); - httpAgent.setAuthTransform( - makeAuthTransform( - { - publicKey: senderPubKey, - secretKey: senderSecretKey, - }, - - () => Buffer.from([0]) as SenderSig, - ), - ); - - const actor = makeActorFactory(actorInterface)({ canisterId, agent: httpAgent }); - const reply = await actor.greet(argValue); - - expect(reply).toEqual(IDL.decode([IDL.Text], expectedReplyArg)[0]); - - const { calls, results } = mockFetch.mock; - - expect(calls.length).toBe(5); - expect(calls[0]).toEqual([ - 'http://localhost/api/v1/submit', - { - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode(expectedCallRequest), - }, - ]); - - expect(calls[1]).toEqual([ - 'http://localhost/api/v1/read', - { - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode({ - content: { - request_type: 'request_status', - request_id: expectedCallRequestId, - }, - sender_pubkey: senderPubKey, - sender_sig: senderSig, - }), - }, - ]); - - expect(calls[2][0]).toBe('http://localhost/api/v1/read'); - expect(calls[2][1]).toEqual({ - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode({ - content: { - request_type: 'request_status', - request_id: expectedCallRequestId, - }, - sender_pubkey: senderPubKey, - sender_sig: senderSig, - }), - }); - - expect(calls[3][0]).toBe('http://localhost/api/v1/read'); - expect(calls[3][1]).toEqual({ - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode({ - content: { - request_type: 'request_status', - request_id: expectedCallRequestId, - }, - sender_pubkey: senderPubKey, - sender_sig: senderSig, - }), - }); - - expect(calls[4][0]).toBe('http://localhost/api/v1/read'); - expect(calls[4][1]).toEqual({ - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode({ - content: { - request_type: 'request_status', - request_id: expectedCallRequestId, - }, - sender_pubkey: senderPubKey, - sender_sig: senderSig, - }), - }); -}); - -// TODO: tests for rejected, unknown time out diff --git a/src/agent/javascript/src/actor.ts b/src/agent/javascript/src/actor.ts deleted file mode 100644 index fac3cb22ac..0000000000 --- a/src/agent/javascript/src/actor.ts +++ /dev/null @@ -1,352 +0,0 @@ -import { Buffer } from 'buffer/'; -import { Agent } from './agent'; -import { getManagementCanister } from './canisters/management'; -import { - QueryResponseStatus, - RequestStatusResponseReplied, - RequestStatusResponseStatus, -} from './http_agent_types'; -import * as IDL from './idl'; -import { GlobalInternetComputer } from './index'; -import { Principal } from './principal'; -import { RequestId, toHex as requestIdToHex } from './request_id'; -import { BinaryBlob } from './types'; - -declare const window: GlobalInternetComputer; -declare const global: GlobalInternetComputer; -declare const self: GlobalInternetComputer; - -function getDefaultAgent(): Agent { - const agent = - typeof window === 'undefined' - ? typeof global === 'undefined' - ? typeof self === 'undefined' - ? undefined - : self.ic.agent - : global.ic.agent - : window.ic.agent; - - if (!agent) { - throw new Error('No Agent could be found.'); - } - - return agent; -} - -/** - * Configuration to make calls to the Replica. - */ -export interface CallConfig { - agent?: Agent; - maxAttempts?: number; - throttleDurationInMSecs?: number; -} - -/** - * Configuration that can be passed to customize the Actor behaviour. - */ -export interface ActorConfig extends CallConfig { - canisterId: string | Principal; -} - -// TODO: move this to proper typing when Candid support TypeScript. -/** - * A subclass of an actor. Actor class itself is meant to be a based class. - */ -export type ActorSubclass Promise>> = Actor & T; - -/** - * The mode used when installing a canister. - */ -export enum CanisterInstallMode { - Install = 'install', - Reinstall = 'reinstall', - Upgrade = 'upgrade', -} - -/** - * Internal metadata for actors. It's an enhanced version of ActorConfig with - * some fields marked as required (as they are defaulted) and canisterId as - * a Principal type. - */ -interface ActorMetadata { - canisterId: Principal; - service: IDL.ServiceClass; - agent?: Agent; - maxAttempts: number; - throttleDurationInMSecs: number; -} - -const metadataSymbol = Symbol.for('ic-agent-metadata'); - -/** - * An actor base class. An actor is an object containing only functions that will - * return a promise. These functions are derived from the IDL definition. - */ -export class Actor { - /** - * Get the interface of an actor, in the form of an instance of a Service. - * @param actor The actor to get the interface of. - */ - public static interfaceOf(actor: Actor): IDL.ServiceClass { - return actor[metadataSymbol].service; - } - - public static canisterIdOf(actor: Actor): Principal { - return actor[metadataSymbol].canisterId; - } - - public static async install( - fields: { - module: BinaryBlob; - mode?: CanisterInstallMode; - arg?: BinaryBlob; - computerAllocation?: number; - memoryAllocation?: number; - }, - config: ActorConfig, - ): Promise { - const mode = fields.mode === undefined ? CanisterInstallMode.Install : fields.mode; - // Need to transform the arg into a number array. - const arg = fields.arg ? [...fields.arg] : []; - // Same for module. - const wasmModule = [...fields.module]; - const canisterId = - typeof config.canisterId === 'string' - ? Principal.fromText(config.canisterId) - : config.canisterId; - const computerAllocation: [number] | [] = - fields.computerAllocation !== undefined ? [fields.computerAllocation] : []; - const memoryAllocation: [number] | [] = - fields.memoryAllocation !== undefined ? [fields.memoryAllocation] : []; - - await getManagementCanister(config).install_code({ - mode: { [mode]: null } as any, - arg, - wasm_module: wasmModule, - canister_id: canisterId, - compute_allocation: computerAllocation, - memory_allocation: memoryAllocation, - }); - } - - public static async createCanister(config?: CallConfig): Promise { - const { canister_id: canisterId } = await getManagementCanister(config || {}).create_canister(); - - return canisterId; - } - - public static async createAndInstallCanister( - interfaceFactory: IDL.InterfaceFactory, - fields: { - module: BinaryBlob; - arg?: BinaryBlob; - }, - config?: CallConfig, - ): Promise { - const canisterId = await this.createCanister(config); - await this.install( - { - ...fields, - }, - { ...config, canisterId }, - ); - - return this.createActor(interfaceFactory, { ...config, canisterId }); - } - - public static createActorClass(interfaceFactory: IDL.InterfaceFactory): ActorConstructor { - const service = interfaceFactory({ IDL }); - - class CanisterActor extends Actor { - [x: string]: (...args: unknown[]) => Promise; - - constructor(config: ActorConfig) { - const canisterId = - typeof config.canisterId === 'string' - ? Principal.fromText(config.canisterId) - : config.canisterId; - - super({ - ...DEFAULT_ACTOR_CONFIG, - ...config, - canisterId, - service, - }); - } - } - - for (const [methodName, func] of service._fields) { - CanisterActor.prototype[methodName] = _createActorMethod(methodName, func); - } - - return CanisterActor; - } - - public static createActor< - T = Record Promise>> - >(interfaceFactory: IDL.InterfaceFactory, configuration: ActorConfig): ActorSubclass { - return (new (this.createActorClass(interfaceFactory))( - configuration, - ) as unknown) as ActorSubclass; - } - - private [metadataSymbol]: ActorMetadata; - - protected constructor(metadata: ActorMetadata) { - this[metadataSymbol] = metadata; - } -} - -// IDL functions can have multiple return values, so decoding always -// produces an array. Ensure that functions with single or zero return -// values behave as expected. -function decodeReturnValue(types: IDL.Type[], msg: BinaryBlob) { - const returnValues = IDL.decode(types, Buffer.from(msg)); - switch (returnValues.length) { - case 0: - return undefined; - case 1: - return returnValues[0]; - default: - return returnValues; - } -} - -const REQUEST_STATUS_RETRY_WAIT_DURATION_IN_MSECS = 500; -const DEFAULT_ACTOR_CONFIG = { - maxAttempts: 30, - throttleDurationInMSecs: REQUEST_STATUS_RETRY_WAIT_DURATION_IN_MSECS, -}; - -export type ActorConstructor = new (config: ActorConfig) => ActorSubclass; -export type ActorFactory = (config: ActorConfig) => ActorSubclass; - -function _createActorMethod( - methodName: string, - func: IDL.FuncClass, -): (...args: unknown[]) => Promise { - if (func.annotations.includes('query')) { - return async function (this: Actor, ...args: unknown[]) { - const agent = this[metadataSymbol].agent || getDefaultAgent(); - const cid = this[metadataSymbol].canisterId; - const arg = IDL.encode(func.argTypes, args) as BinaryBlob; - - const result = await agent.query(cid, { methodName, arg }); - - switch (result.status) { - case QueryResponseStatus.Rejected: - throw new Error( - `Query failed:\n` + - ` Status: ${result.status}\n` + - ` Message: ${result.reject_message}\n`, - ); - - case QueryResponseStatus.Replied: - return decodeReturnValue(func.retTypes, result.reply.arg); - } - }; - } else { - return async function (this: Actor, ...args: unknown[]) { - const agent = this[metadataSymbol].agent || getDefaultAgent(); - const cid = this[metadataSymbol].canisterId; - - const { maxAttempts, throttleDurationInMSecs } = this[metadataSymbol]; - const arg = IDL.encode(func.argTypes, args) as BinaryBlob; - const { requestId, response } = await agent.call(cid, { methodName, arg }); - - if (!response.ok) { - throw new Error( - [ - 'Call failed:', - ` Method: ${methodName}(${args})`, - ` Canister ID: ${cid.toHex()}`, - ` Request ID: ${requestIdToHex(requestId)}`, - ` HTTP status code: ${response.status}`, - ` HTTP status text: ${response.statusText}`, - ].join('\n'), - ); - } - - return _requestStatusAndLoop( - agent, - requestId, - status => { - if (status.reply.arg !== undefined) { - return decodeReturnValue(func.retTypes, status.reply.arg); - } else if (func.retTypes.length === 0) { - return undefined; - } else { - throw new Error(`Call was returned undefined, but type [${func.retTypes.join(',')}].`); - } - }, - maxAttempts, - maxAttempts, - throttleDurationInMSecs, - ); - }; - } -} - -async function _requestStatusAndLoop( - agent: Agent, - requestId: RequestId, - decoder: (response: RequestStatusResponseReplied) => T, - attempts: number, - maxAttempts: number, - throttle: number, -): Promise { - const status = await agent.requestStatus({ requestId }); - - switch (status.status) { - case RequestStatusResponseStatus.Replied: { - return decoder(status); - } - - case RequestStatusResponseStatus.Unknown: - case RequestStatusResponseStatus.Received: - case RequestStatusResponseStatus.Processing: - if (--attempts === 0) { - throw new Error( - `Failed to retrieve a reply for request after ${maxAttempts} attempts:\n` + - ` Request ID: ${requestIdToHex(requestId)}\n` + - ` Request status: ${status.status}\n`, - ); - } - - // Wait a little, then retry. - return new Promise(resolve => setTimeout(resolve, throttle)).then(() => - _requestStatusAndLoop(agent, requestId, decoder, attempts, maxAttempts, throttle), - ); - - case RequestStatusResponseStatus.Rejected: - throw new Error( - `Call was rejected:\n` + - ` Request ID: ${requestIdToHex(requestId)}\n` + - ` Reject code: ${status.reject_code}\n` + - ` Reject text: ${status.reject_message}\n`, - ); - } -} - -// Make an actor from an actor interface. -// -// Allows for one HTTP agent for the lifetime of the actor: -// -// ``` -// const actor = makeActor(actorInterface)({ agent }); -// const reply = await actor.greet(); -// ``` -// -// or using a different HTTP agent for the same actor if necessary: -// -// ``` -// const actor = makeActor(actorInterface); -// const reply1 = await actor(agent1).greet(); -// const reply2 = await actor(agent2).greet(); -// ``` -export function makeActorFactory(actorInterfaceFactory: IDL.InterfaceFactory): ActorFactory { - return (config: ActorConfig) => { - return Actor.createActor(actorInterfaceFactory, config); - }; -} diff --git a/src/agent/javascript/src/agent/api.ts b/src/agent/javascript/src/agent/api.ts deleted file mode 100644 index 9ec5803266..0000000000 --- a/src/agent/javascript/src/agent/api.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { ActorFactory } from '../actor'; -import { - QueryFields, - QueryResponse, - RequestStatusFields, - RequestStatusResponse, - SubmitResponse, -} from '../http_agent_types'; -import * as IDL from '../idl'; -import { Principal } from '../principal'; -import { BinaryBlob, JsonObject } from '../types'; - -// An Agent able to make calls and queries to a Replica. -export interface Agent { - requestStatus(fields: RequestStatusFields, principal?: Principal): Promise; - - call( - canisterId: Principal | string, - fields: { - methodName: string; - arg: BinaryBlob; - }, - principal?: Principal | Promise, - ): Promise; - - createCanister(principal?: Principal): Promise; - - status(): Promise; - - install( - canisterId: Principal | string, - fields: { - module: BinaryBlob; - arg?: BinaryBlob; - }, - principal?: Principal, - ): Promise; - - query( - canisterId: Principal | string, - fields: QueryFields, - principal?: Principal, - ): Promise; - - makeActorFactory(actorInterfaceFactory: IDL.InterfaceFactory): ActorFactory; -} diff --git a/src/agent/javascript/src/agent/http.ts b/src/agent/javascript/src/agent/http.ts deleted file mode 100644 index c793c411ca..0000000000 --- a/src/agent/javascript/src/agent/http.ts +++ /dev/null @@ -1,348 +0,0 @@ -import { Buffer } from 'buffer/'; -import { ActorFactory } from '../actor'; -import * as actor from '../actor'; -import { Agent } from '../agent'; -import * as cbor from '../cbor'; -import { - AuthHttpAgentRequestTransformFn, - Endpoint, - HttpAgentReadRequest, - HttpAgentRequest, - HttpAgentRequestTransformFn, - HttpAgentSubmitRequest, - QueryFields, - QueryResponse, - ReadRequest, - ReadRequestType, - ReadResponse, - RequestStatusFields, - RequestStatusResponse, - SignedHttpAgentRequest, - SubmitRequest, - SubmitRequestType, - SubmitResponse, -} from '../http_agent_types'; -import * as IDL from '../idl'; -import { Principal } from '../principal'; -import { requestIdOf } from '../request_id'; -import { BinaryBlob, blobFromHex, JsonObject } from '../types'; - -const API_VERSION = 'v1'; - -// HttpAgent options that can be used at construction. -export interface HttpAgentOptions { - // Another HttpAgent to inherit configuration (pipeline and fetch) of. This - // is only used at construction. - source?: HttpAgent; - - // A surrogate to the global fetch function. Useful for testing. - fetch?: typeof fetch; - - // The host to use for the client. By default, uses the same host as - // the current page. - host?: string; - - // The principal used to send messages. This cannot be empty at the request - // time (will throw). - principal?: Principal | Promise; - - credentials?: { - name: string; - password?: string; - }; -} - -declare const window: Window & { fetch: typeof fetch }; -declare const global: { fetch: typeof fetch }; -declare const self: { fetch: typeof fetch }; - -function getDefaultFetch(): typeof fetch { - const result = - typeof window === 'undefined' - ? typeof global === 'undefined' - ? typeof self === 'undefined' - ? undefined - : self.fetch.bind(self) - : global.fetch.bind(global) - : window.fetch.bind(window); - - if (!result) { - throw new Error('Could not find default `fetch` implementation.'); - } - - return result; -} - -// A HTTP agent allows users to interact with a client of the internet computer -// using the available methods. It exposes an API that closely follows the -// public view of the internet computer, and is not intended to be exposed -// directly to the majority of users due to its low-level interface. -// -// There is a pipeline to apply transformations to the request before sending -// it to the client. This is to decouple signature, nonce generation and -// other computations so that this class can stay as simple as possible while -// allowing extensions. -export class HttpAgent implements Agent { - private readonly _pipeline: HttpAgentRequestTransformFn[] = []; - private _authTransform: AuthHttpAgentRequestTransformFn | null = null; - private readonly _fetch: typeof fetch; - private readonly _host: URL; - private readonly _principal: Promise | null = null; - private readonly _credentials: string | undefined; - - constructor(options: HttpAgentOptions = {}) { - if (options.source) { - this._pipeline = [...options.source._pipeline]; - this._authTransform = options.source._authTransform; - this._principal = options.source._principal; - } - this._fetch = options.fetch || getDefaultFetch() || fetch.bind(global); - if (options.host) { - if (!options.host.match(/^[a-z]+:/) && typeof window !== 'undefined') { - this._host = new URL(window.location.protocol + '//' + options.host); - } else { - this._host = new URL(options.host); - } - } else { - const location = window?.location; - if (!location) { - throw new Error('Must specify a host to connect to.'); - } - this._host = new URL(location + ''); - } - if (options.principal) { - this._principal = Promise.resolve(options.principal); - } - if (options.credentials) { - const { name, password } = options.credentials; - this._credentials = `${name}${password ? ':' + password : ''}`; - } - } - - public addTransform(fn: HttpAgentRequestTransformFn, priority = fn.priority || 0) { - // Keep the pipeline sorted at all time, by priority. - const i = this._pipeline.findIndex(x => (x.priority || 0) < priority); - this._pipeline.splice(i >= 0 ? i : this._pipeline.length, 0, Object.assign(fn, { priority })); - } - - public setAuthTransform(fn: AuthHttpAgentRequestTransformFn) { - this._authTransform = fn; - } - - public async call( - canisterId: Principal | string, - fields: { - methodName: string; - arg: BinaryBlob; - }, - principal?: Principal | Promise, - ): Promise { - let p = this._principal || principal; - if (!p) { - throw new Error('No principal specified.'); - } - p = await Promise.resolve(p); - - return this.submit({ - request_type: SubmitRequestType.Call, - canister_id: typeof canisterId === 'string' ? Principal.fromText(canisterId) : canisterId, - method_name: fields.methodName, - arg: fields.arg, - sender: p.toBlob(), - }); - } - - public async install( - canisterId: Principal | string, - fields: { - module: BinaryBlob; - arg?: BinaryBlob; - }, - principal?: Principal, - ): Promise { - let p = this._principal || principal; - if (!p) { - throw new Error('No principal specified.'); - } - p = await Promise.resolve(p); - - return this.submit({ - request_type: SubmitRequestType.InstallCode, - canister_id: typeof canisterId === 'string' ? Principal.fromText(canisterId) : canisterId, - module: fields.module, - arg: fields.arg || blobFromHex(''), - sender: p.toBlob(), - }); - } - - public async createCanister(principal?: Principal): Promise { - let p = this._principal || principal; - if (!p) { - throw new Error('No principal specified.'); - } - p = await Promise.resolve(p); - - return this.submit({ - request_type: SubmitRequestType.CreateCanister, - sender: p.toBlob(), - }); - } - - public async query( - canisterId: Principal | string, - fields: QueryFields, - principal?: Principal, - ): Promise { - let p = this._principal || principal; - if (!p) { - throw new Error('No principal specified.'); - } - p = await Promise.resolve(p); - - return this.read({ - request_type: ReadRequestType.Query, - canister_id: typeof canisterId === 'string' ? Principal.fromText(canisterId) : canisterId, - method_name: fields.methodName, - arg: fields.arg, - sender: p.toBlob(), - }) as Promise; - } - - public async requestStatus( - fields: RequestStatusFields, - principal?: Principal, - ): Promise { - let p = this._principal || principal; - if (!p) { - throw new Error('No principal specified.'); - } - p = await Promise.resolve(p); - - return this.read({ - request_type: ReadRequestType.RequestStatus, - request_id: fields.requestId, - }) as Promise; - } - - public async status(): Promise { - const headers: Record = this._credentials - ? { - Authorization: 'Basic ' + btoa(this._credentials), - } - : {}; - - const response = await this._fetch( - '' + new URL(`/api/${API_VERSION}/${Endpoint.Status}`, this._host), - { headers }, - ); - - if (!response.ok) { - throw new Error( - `Server returned an error:\n` + - ` Code: ${response.status} (${response.statusText}\n)` + - ` Body: ${await response.text()}\n`, - ); - } - - const buffer = await response.arrayBuffer(); - return cbor.decode(new Uint8Array(buffer)); - } - - public makeActorFactory(actorInterfaceFactory: IDL.InterfaceFactory): ActorFactory { - return actor.makeActorFactory(actorInterfaceFactory); - } - - protected _transform( - request: HttpAgentRequest, - ): Promise { - let p = Promise.resolve(request); - - for (const fn of this._pipeline) { - p = p.then(r => fn(r).then(r2 => r2 || r)); - } - - if (this._authTransform != null) { - return p.then(this._authTransform); - } else { - return p; - } - } - - protected async submit(submit: SubmitRequest): Promise { - const transformedRequest = (await this._transform({ - request: { - body: null, - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - ...(this._credentials ? { Authorization: 'Basic ' + btoa(this._credentials) } : {}), - }, - }, - endpoint: Endpoint.Submit, - body: submit, - })) as HttpAgentSubmitRequest; - - const body = cbor.encode(transformedRequest.body); - - // Run both in parallel. The fetch is quite expensive, so we have plenty of time to - // calculate the requestId locally. - const [response, requestId] = await Promise.all([ - this._fetch('' + new URL(`/api/${API_VERSION}/${Endpoint.Submit}`, this._host), { - ...transformedRequest.request, - body, - }), - requestIdOf(submit), - ]); - - if (!response.ok) { - throw new Error( - `Server returned an error:\n` + - ` Code: ${response.status} (${response.statusText}\n)` + - ` Body: ${await response.text()}\n`, - ); - } - - return { - requestId, - response: { - ok: response.ok, - status: response.status, - statusText: response.statusText, - }, - }; - } - - protected async read(request: ReadRequest): Promise { - const transformedRequest = (await this._transform({ - request: { - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - ...(this._credentials ? { Authorization: 'Basic ' + btoa(this._credentials) } : {}), - }, - }, - endpoint: Endpoint.Read, - body: request, - })) as HttpAgentReadRequest; - - const body = cbor.encode(transformedRequest.body); - - const response = await this._fetch( - '' + new URL(`/api/${API_VERSION}/${Endpoint.Read}`, this._host), - { - ...transformedRequest.request, - body, - }, - ); - - if (!response.ok) { - throw new Error( - `Server returned an error:\n` + - ` Code: ${response.status} (${response.statusText}\n)` + - ` Body: ${await response.text()}\n`, - ); - } - - return cbor.decode(Buffer.from(await response.arrayBuffer())); - } -} diff --git a/src/agent/javascript/src/agent/index.ts b/src/agent/javascript/src/agent/index.ts deleted file mode 100644 index 3d0fbaf87f..0000000000 --- a/src/agent/javascript/src/agent/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './api'; -export * from './http'; -export * from './proxy'; diff --git a/src/agent/javascript/src/agent/proxy.ts b/src/agent/javascript/src/agent/proxy.ts deleted file mode 100644 index 0c0b6abf78..0000000000 --- a/src/agent/javascript/src/agent/proxy.ts +++ /dev/null @@ -1,236 +0,0 @@ -import { - ActorFactory, - BinaryBlob, - CallFields, - JsonObject, - Principal, - QueryFields, - QueryResponse, - RequestStatusFields, - RequestStatusResponse, - SubmitResponse, -} from '@dfinity/agent'; -import * as actor from '../actor'; -import * as IDL from '../idl'; -import { Agent } from './api'; - -export enum ProxyMessageKind { - Error = 'err', - Query = 'q', - QueryResponse = 'qr', - Call = 'c', - CallResponse = 'cr', - RequestStatus = 'r', - RequestStatusResponse = 'rr', - Status = 's', - StatusResponse = 'sr', -} - -export interface ProxyMessageBase { - id: number; - type: ProxyMessageKind; -} - -export interface ProxyMessageQuery extends ProxyMessageBase { - type: ProxyMessageKind.Query; - args: [string, QueryFields, Principal | undefined]; -} - -export interface ProxyMessageCall extends ProxyMessageBase { - type: ProxyMessageKind.Call; - args: [string, CallFields, Principal | undefined]; -} - -export interface ProxyMessageRequestStatus extends ProxyMessageBase { - type: ProxyMessageKind.RequestStatus; - args: [RequestStatusFields, Principal | undefined]; -} - -export interface ProxyMessageError extends ProxyMessageBase { - type: ProxyMessageKind.Error; - error: any; -} - -export interface ProxyMessageQueryResponse extends ProxyMessageBase { - type: ProxyMessageKind.QueryResponse; - response: QueryResponse; -} - -export interface ProxyMessageCallResponse extends ProxyMessageBase { - type: ProxyMessageKind.CallResponse; - response: SubmitResponse; -} - -export interface ProxyMessageRequestStatusResponse extends ProxyMessageBase { - type: ProxyMessageKind.RequestStatusResponse; - response: RequestStatusResponse; -} - -export interface ProxyMessageStatus extends ProxyMessageBase { - type: ProxyMessageKind.Status; -} - -export interface ProxyMessageStatusResponse extends ProxyMessageBase { - type: ProxyMessageKind.StatusResponse; - response: JsonObject; -} - -export type ProxyMessage = - | ProxyMessageError - | ProxyMessageQueryResponse - | ProxyMessageCallResponse - | ProxyMessageRequestStatusResponse - | ProxyMessageQuery - | ProxyMessageCall - | ProxyMessageRequestStatus - | ProxyMessageStatus - | ProxyMessageStatusResponse; - -// A Stub Agent that forwards calls to another Agent implementation. -export class ProxyStubAgent { - constructor(private _frontend: (msg: ProxyMessage) => void, private _agent: Agent) {} - - public onmessage(msg: ProxyMessage): void { - switch (msg.type) { - case ProxyMessageKind.Query: - this._agent.query(...msg.args).then(response => { - this._frontend({ - id: msg.id, - type: ProxyMessageKind.QueryResponse, - response, - }); - }); - break; - case ProxyMessageKind.Call: - this._agent.call(...msg.args).then(response => { - this._frontend({ - id: msg.id, - type: ProxyMessageKind.CallResponse, - response, - }); - }); - break; - case ProxyMessageKind.RequestStatus: - this._agent.requestStatus(...msg.args).then(response => { - this._frontend({ - id: msg.id, - type: ProxyMessageKind.RequestStatusResponse, - response, - }); - }); - break; - case ProxyMessageKind.Status: - this._agent.status().then(response => { - this._frontend({ - id: msg.id, - type: ProxyMessageKind.StatusResponse, - response, - }); - }); - break; - - default: - throw new Error(`Invalid message received: ${JSON.stringify(msg)}`); - } - } -} - -// An Agent that forwards calls to a backend. The calls are serialized -export class ProxyAgent implements Agent { - private _nextId = 0; - private _pendingCalls = new Map void, (reject: any) => void]>(); - - constructor(private _backend: (msg: ProxyMessage) => void) {} - - public onmessage(msg: ProxyMessage): void { - const id = msg.id; - - const maybePromise = this._pendingCalls.get(id); - if (!maybePromise) { - throw new Error('A proxy get the same message twice...'); - } - - this._pendingCalls.delete(id); - const [resolve, reject] = maybePromise; - - switch (msg.type) { - case ProxyMessageKind.Error: - return reject(msg.error); - case ProxyMessageKind.CallResponse: - case ProxyMessageKind.QueryResponse: - case ProxyMessageKind.RequestStatusResponse: - return resolve(msg.response); - default: - throw new Error(`Invalid message being sent to ProxyAgent: ${JSON.stringify(msg)}`); - } - } - - public requestStatus( - fields: RequestStatusFields, - principal?: Principal, - ): Promise { - return this._sendAndWait({ - id: this._nextId++, - type: ProxyMessageKind.RequestStatus, - args: [fields, principal], - }) as Promise; - } - - public call( - canisterId: Principal | string, - fields: CallFields, - principal?: Principal, - ): Promise { - return this._sendAndWait({ - id: this._nextId++, - type: ProxyMessageKind.Call, - args: [canisterId.toString(), fields, principal], - }) as Promise; - } - - public createCanister(principal?: Principal): Promise { - throw new Error('unimplemented. This will be removed when we upgrade the spec to 0.8'); - } - - public status(): Promise { - return this._sendAndWait({ - id: this._nextId++, - type: ProxyMessageKind.Status, - }) as Promise; - } - - public install( - canisterId: Principal | string, - fields: { - module: BinaryBlob; - arg?: BinaryBlob; - }, - principal?: Principal, - ): Promise { - throw new Error('unimplemented. This will be removed when we upgrade the spec to 0.8'); - } - - public query( - canisterId: Principal | string, - fields: QueryFields, - principal?: Principal, - ): Promise { - return this._sendAndWait({ - id: this._nextId++, - type: ProxyMessageKind.Query, - args: [canisterId.toString(), fields, principal], - }) as Promise; - } - - public makeActorFactory(actorInterfaceFactory: IDL.InterfaceFactory): ActorFactory { - return actor.makeActorFactory(actorInterfaceFactory); - } - - private async _sendAndWait(msg: ProxyMessage): Promise { - return new Promise((resolve, reject) => { - this._pendingCalls.set(msg.id, [resolve, reject]); - - this._backend(msg); - }); - } -} diff --git a/src/agent/javascript/src/auth.ts b/src/agent/javascript/src/auth.ts deleted file mode 100644 index a457f0f073..0000000000 --- a/src/agent/javascript/src/auth.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { Buffer } from 'buffer/'; -import * as tweetnacl from 'tweetnacl'; -import { - AuthHttpAgentRequestTransformFn, - HttpAgentRequest, - SignedHttpAgentRequest, -} from './http_agent_types'; -import { RequestId, requestIdOf } from './request_id'; -import { BinaryBlob } from './types'; - -const domainSeparator = Buffer.from('\x0Aic-request'); - -export type SenderPubKey = BinaryBlob & { __senderPubKey__: void }; -export type SenderSecretKey = BinaryBlob & { __senderSecretKey__: void }; -export type SenderSig = BinaryBlob & { __senderSig__: void }; - -export interface KeyPair { - publicKey: SenderPubKey; - secretKey: SenderSecretKey; -} - -export function sign(requestId: RequestId, secretKey: SenderSecretKey): SenderSig { - const bufA = Buffer.concat([domainSeparator, requestId]); - const signature = tweetnacl.sign.detached(bufA, secretKey); - return Buffer.from(signature) as SenderSig; -} - -export function verify( - requestId: RequestId, - senderSig: SenderSig, - senderPubKey: SenderPubKey, -): boolean { - const bufA = Buffer.concat([domainSeparator, requestId]); - return tweetnacl.sign.detached.verify(bufA, senderSig, senderPubKey); -} - -export const createKeyPairFromSeed = (seed: Uint8Array): KeyPair => { - const { publicKey, secretKey } = tweetnacl.sign.keyPair.fromSeed(seed); - return { - publicKey: Buffer.from(publicKey), - secretKey: Buffer.from(secretKey), - } as KeyPair; -}; - -// TODO/Note/XXX(eftychis): Unused for the first pass. This provides -// us with key generation for the client. -export function generateKeyPair(): KeyPair { - const { publicKey, secretKey } = tweetnacl.sign.keyPair(); - return makeKeyPair(publicKey, secretKey); -} - -export function makeKeyPair(publicKey: Uint8Array, secretKey: Uint8Array): KeyPair { - return { - publicKey: Buffer.from(publicKey), - secretKey: Buffer.from(secretKey), - } as KeyPair; -} - -export type SigningConstructedFn = (requestId: RequestId, secretKey: SenderSecretKey) => SenderSig; - -export function makeAuthTransform( - keyPair: KeyPair, - senderSigFn: SigningConstructedFn = sign, -): AuthHttpAgentRequestTransformFn { - const { publicKey, secretKey } = keyPair; - - const fn = async (r: HttpAgentRequest) => { - const { body, ...fields } = r; - const requestId = await requestIdOf(body); - return { - ...fields, - body: { - content: body, - sender_pubkey: publicKey, - sender_sig: senderSigFn(requestId, secretKey), - }, - } as SignedHttpAgentRequest; - }; - - return fn; -} diff --git a/src/agent/javascript/src/candid/candid-core.ts b/src/agent/javascript/src/candid/candid-core.ts deleted file mode 100644 index 4c7d8c4a94..0000000000 --- a/src/agent/javascript/src/candid/candid-core.ts +++ /dev/null @@ -1,254 +0,0 @@ -import * as IDL from '../idl'; - -// tslint:disable:max-classes-per-file - -export interface ParseConfig { - random?: boolean; -} - -export interface UIConfig { - input?: HTMLElement; - form?: InputForm; - parse(t: IDL.Type, config: ParseConfig, v: string): any; -} - -export interface FormConfig { - open?: HTMLElement; - event?: string; - labelMap?: Record; - container?: HTMLElement; - render(t: IDL.Type): InputBox; -} - -export class InputBox { - public status: HTMLElement; - public label: string | null = null; - public value: any = undefined; - - constructor(public idl: IDL.Type, public ui: UIConfig) { - const status = document.createElement('div'); - status.className = 'status'; - this.status = status; - - if (ui.input) { - ui.input.addEventListener('blur', () => { - if ((ui.input as HTMLInputElement).value === '') { - return; - } - this.parse(); - }); - ui.input.addEventListener('focus', () => { - ui.input!.classList.remove('reject'); - }); - } - } - public isRejected(): boolean { - return this.value === undefined; - } - - public parse(config: ParseConfig = {}): any { - if (this.ui.form) { - const value = this.ui.form.parse(config); - this.value = value; - return value; - } - - if (this.ui.input) { - const input = this.ui.input as HTMLInputElement; - try { - const value = this.ui.parse(this.idl, config, input.value); - if (!this.idl.covariant(value)) { - throw new Error(`${input.value} is not of type ${this.idl.display()}`); - } - this.status.style.display = 'none'; - this.value = value; - return value; - } catch (err) { - input.classList.add('reject'); - this.status.style.display = 'block'; - this.status.innerHTML = 'InputError: ' + err.message; - this.value = undefined; - return undefined; - } - } - return null; - } - public render(dom: HTMLElement): void { - const container = document.createElement('span'); - if (this.label) { - const label = document.createElement('label'); - label.innerText = this.label; - container.appendChild(label); - } - if (this.ui.input) { - container.appendChild(this.ui.input); - container.appendChild(this.status); - } - - if (this.ui.form) { - this.ui.form.render(container); - } - dom.appendChild(container); - } -} - -export abstract class InputForm { - public form: InputBox[] = []; - constructor(public ui: FormConfig) {} - - public abstract parse(config: ParseConfig): any; - public abstract generateForm(): any; - public renderForm(dom: HTMLElement): void { - if (this.ui.container) { - this.form.forEach(e => e.render(this.ui.container!)); - dom.appendChild(this.ui.container); - } else { - this.form.forEach(e => e.render(dom)); - } - } - public render(dom: HTMLElement): void { - if (this.ui.open && this.ui.event) { - dom.appendChild(this.ui.open); - const form = this; - form.ui.open!.addEventListener(form.ui.event!, () => { - // Remove old form - if (form.ui.container) { - form.ui.container.innerHTML = ''; - } else { - const oldContainer = form.ui.open!.nextElementSibling; - if (oldContainer) { - oldContainer.parentNode!.removeChild(oldContainer); - } - } - // Render form - form.generateForm(); - form.renderForm(dom); - }); - } else { - this.generateForm(); - this.renderForm(dom); - } - } -} - -export class RecordForm extends InputForm { - constructor(public fields: Array<[string, IDL.Type]>, public ui: FormConfig) { - super(ui); - } - public generateForm(): void { - this.form = this.fields.map(([key, type]) => { - const input = this.ui.render(type); - if (this.ui.labelMap && this.ui.labelMap.hasOwnProperty(key)) { - input.label = this.ui.labelMap[key] + ' '; - } else { - input.label = key + ' '; - } - return input; - }); - } - public parse(config: ParseConfig): Record | undefined { - const v: Record = {}; - this.fields.forEach(([key, _], i) => { - const value = this.form[i].parse(config); - v[key] = value; - }); - if (this.form.some(input => input.isRejected())) { - return undefined; - } - return v; - } -} - -export class TupleForm extends InputForm { - constructor(public components: IDL.Type[], public ui: FormConfig) { - super(ui); - } - public generateForm(): void { - this.form = this.components.map(type => { - const input = this.ui.render(type); - return input; - }); - } - public parse(config: ParseConfig): any[] | undefined { - const v: any[] = []; - this.components.forEach((_, i) => { - const value = this.form[i].parse(config); - v.push(value); - }); - if (this.form.some(input => input.isRejected())) { - return undefined; - } - return v; - } -} - -export class VariantForm extends InputForm { - constructor(public fields: Array<[string, IDL.Type]>, public ui: FormConfig) { - super(ui); - } - public generateForm(): void { - const index = (this.ui.open as HTMLSelectElement).selectedIndex; - const [_, type] = this.fields[index]; - const variant = this.ui.render(type); - this.form = [variant]; - } - public parse(config: ParseConfig): Record | undefined { - const select = this.ui.open as HTMLSelectElement; - const selected = select.options[select.selectedIndex].value; - const value = this.form[0].parse(config); - if (value === undefined) { - return undefined; - } - const v: Record = {}; - v[selected] = value; - return v; - } -} - -export class OptionForm extends InputForm { - constructor(public ty: IDL.Type, public ui: FormConfig) { - super(ui); - } - public generateForm(): void { - if ((this.ui.open as HTMLInputElement).checked) { - const opt = this.ui.render(this.ty); - this.form = [opt]; - } else { - this.form = []; - } - } - public parse(config: ParseConfig): [T] | [] | undefined { - if (this.form.length === 0) { - return []; - } else { - const value = this.form[0].parse(config); - if (value === undefined) { - return undefined; - } - return [value]; - } - } -} - -export class VecForm extends InputForm { - constructor(public ty: IDL.Type, public ui: FormConfig) { - super(ui); - } - public generateForm(): void { - const len = +(this.ui.open as HTMLInputElement).value; - this.form = []; - for (let i = 0; i < len; i++) { - const t = this.ui.render(this.ty); - this.form.push(t); - } - } - public parse(config: ParseConfig): T[] | undefined { - const value = this.form.map(input => { - return input.parse(config); - }); - if (this.form.some(input => input.isRejected())) { - return undefined; - } - return value; - } -} diff --git a/src/agent/javascript/src/candid/candid-ui.ts b/src/agent/javascript/src/candid/candid-ui.ts deleted file mode 100644 index 8a1d64ac7f..0000000000 --- a/src/agent/javascript/src/candid/candid-ui.ts +++ /dev/null @@ -1,248 +0,0 @@ -import BigNumber from 'bignumber.js'; -import * as IDL from '../idl'; -import { Principal } from '../principal'; -import * as UI from './candid-core'; - -// tslint:disable:max-classes-per-file -type InputBox = UI.InputBox; - -const InputConfig: UI.UIConfig = { parse: parsePrimitive }; -const FormConfig: UI.FormConfig = { render: renderInput }; - -export const inputBox = (t: IDL.Type, config: Partial) => { - return new UI.InputBox(t, { ...InputConfig, ...config }); -}; -export const recordForm = (fields: Array<[string, IDL.Type]>, config: Partial) => { - return new UI.RecordForm(fields, { ...FormConfig, ...config }); -}; -export const tupleForm = (components: IDL.Type[], config: Partial) => { - return new UI.TupleForm(components, { ...FormConfig, ...config }); -}; -export const variantForm = (fields: Array<[string, IDL.Type]>, config: Partial) => { - return new UI.VariantForm(fields, { ...FormConfig, ...config }); -}; -export const optForm = (ty: IDL.Type, config: Partial) => { - return new UI.OptionForm(ty, { ...FormConfig, ...config }); -}; -export const vecForm = (ty: IDL.Type, config: Partial) => { - return new UI.VecForm(ty, { ...FormConfig, ...config }); -}; - -export class Render extends IDL.Visitor { - public visitType(t: IDL.Type, d: null): InputBox { - const input = document.createElement('input'); - input.classList.add('argument'); - input.placeholder = t.display(); - return inputBox(t, { input }); - } - public visitNull(t: IDL.NullClass, d: null): InputBox { - return inputBox(t, {}); - } - public visitRecord(t: IDL.RecordClass, fields: Array<[string, IDL.Type]>, d: null): InputBox { - let config = {}; - if (fields.length > 1) { - const container = document.createElement('div'); - container.classList.add('popup-form'); - config = { container }; - } - const form = recordForm(fields, config); - return inputBox(t, { form }); - } - public visitTuple( - t: IDL.TupleClass, - components: IDL.Type[], - d: null, - ): InputBox { - let config = {}; - if (components.length > 1) { - const container = document.createElement('div'); - container.classList.add('popup-form'); - config = { container }; - } - const form = tupleForm(components, config); - return inputBox(t, { form }); - } - public visitVariant(t: IDL.VariantClass, fields: Array<[string, IDL.Type]>, d: null): InputBox { - const select = document.createElement('select'); - for (const [key, type] of fields) { - const option = new Option(key); - select.add(option); - } - select.selectedIndex = -1; - select.classList.add('open'); - const config: Partial = { open: select, event: 'change' }; - const form = variantForm(fields, config); - return inputBox(t, { form }); - } - public visitOpt(t: IDL.OptClass, ty: IDL.Type, d: null): InputBox { - const checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.classList.add('open'); - const form = optForm(ty, { open: checkbox, event: 'change' }); - return inputBox(t, { form }); - } - public visitVec(t: IDL.VecClass, ty: IDL.Type, d: null): InputBox { - const len = document.createElement('input'); - len.type = 'number'; - len.min = '0'; - len.max = '100'; - len.style.width = '3em'; - len.placeholder = 'len'; - len.classList.add('open'); - const container = document.createElement('div'); - container.classList.add('popup-form'); - const form = vecForm(ty, { open: len, event: 'change', container }); - return inputBox(t, { form }); - } - public visitRec(t: IDL.RecClass, ty: IDL.ConstructType, d: null): InputBox { - return renderInput(ty); - } -} - -class Parse extends IDL.Visitor { - public visitNull(t: IDL.NullClass, v: string): null { - return null; - } - public visitBool(t: IDL.BoolClass, v: string): boolean { - if (v === 'true') { - return true; - } - if (v === 'false') { - return false; - } - throw new Error(`Cannot parse ${v} as boolean`); - } - public visitText(t: IDL.TextClass, v: string): string { - return v; - } - public visitFloat(t: IDL.FloatClass, v: string): number { - return parseFloat(v); - } - public visitNumber(t: IDL.PrimitiveType, v: string): BigNumber { - return new BigNumber(v); - } - public visitPrincipal(t: IDL.PrincipalClass, v: string): Principal { - return Principal.fromText(v); - } - public visitService(t: IDL.ServiceClass, v: string): Principal { - return Principal.fromText(v); - } - public visitFunc(t: IDL.FuncClass, v: string): [Principal, string] { - const x = v.split('.', 2); - return [Principal.fromText(x[0]), x[1]]; - } -} - -class Random extends IDL.Visitor { - public visitNull(t: IDL.NullClass, v: string): null { - return null; - } - public visitBool(t: IDL.BoolClass, v: string): boolean { - return Math.random() < 0.5; - } - public visitText(t: IDL.TextClass, v: string): string { - return Math.random().toString(36).substring(6); - } - public visitFloat(t: IDL.FloatClass, v: string): number { - return Math.random(); - } - public visitInt(t: IDL.IntClass, v: string): BigNumber { - return new BigNumber(this.generateNumber(true)); - } - public visitNat(t: IDL.NatClass, v: string): BigNumber { - return new BigNumber(this.generateNumber(false)); - } - public visitFixedInt(t: IDL.FixedIntClass, v: string): BigNumber { - return new BigNumber(this.generateNumber(true)); - } - public visitFixedNat(t: IDL.FixedNatClass, v: string): BigNumber { - return new BigNumber(this.generateNumber(false)); - } - private generateNumber(signed: boolean): number { - const num = Math.floor(Math.random() * 100); - if (signed && Math.random() < 0.5) { - return -num; - } else { - return num; - } - } -} - -function parsePrimitive(t: IDL.Type, config: UI.ParseConfig, d: string) { - if (config.random && d === '') { - return t.accept(new Random(), d); - } else { - return t.accept(new Parse(), d); - } -} - -export function renderInput(t: IDL.Type): InputBox { - return t.accept(new Render(), null); -} - -interface ValueConfig { - input: InputBox; - value: any; -} - -export function renderValue(t: IDL.Type, input: InputBox, value: any) { - return t.accept(new RenderValue(), { input, value }); -} - -class RenderValue extends IDL.Visitor { - public visitType(t: IDL.Type, d: ValueConfig) { - (d.input.ui.input as HTMLInputElement).value = t.valueToString(d.value); - } - public visitNull(t: IDL.NullClass, d: ValueConfig) {} - public visitText(t: IDL.TextClass, d: ValueConfig) { - (d.input.ui.input as HTMLInputElement).value = d.value; - } - public visitRec(t: IDL.RecClass, ty: IDL.ConstructType, d: ValueConfig) { - renderValue(ty, d.input, d.value); - } - public visitOpt(t: IDL.OptClass, ty: IDL.Type, d: ValueConfig) { - if (d.value.length === 0) { - return; - } else { - const form = d.input.ui.form!; - const open = form.ui.open as HTMLInputElement; - open.checked = true; - open.dispatchEvent(new Event(form.ui.event!)); - renderValue(ty, form.form[0], d.value[0]); - } - } - public visitRecord(t: IDL.RecordClass, fields: Array<[string, IDL.Type]>, d: ValueConfig) { - const form = d.input.ui.form!; - fields.forEach(([key, type], i) => { - renderValue(type, form.form[i], d.value[key]); - }); - } - public visitTuple(t: IDL.TupleClass, components: IDL.Type[], d: ValueConfig) { - const form = d.input.ui.form!; - components.forEach((type, i) => { - renderValue(type, form.form[i], d.value[i]); - }); - } - public visitVariant(t: IDL.VariantClass, fields: Array<[string, IDL.Type]>, d: ValueConfig) { - const form = d.input.ui.form!; - const selected = Object.entries(d.value)[0]; - fields.forEach(([key, type], i) => { - if (key === selected[0]) { - const open = form.ui.open as HTMLSelectElement; - open.selectedIndex = i; - open.dispatchEvent(new Event(form.ui.event!)); - renderValue(type, form.form[0], selected[1]); - } - }); - } - public visitVec(t: IDL.VecClass, ty: IDL.Type, d: ValueConfig) { - const form = d.input.ui.form!; - const len = d.value.length; - const open = form.ui.open as HTMLInputElement; - open.value = len; - open.dispatchEvent(new Event(form.ui.event!)); - d.value.forEach((v: T, i: number) => { - renderValue(ty, form.form[i], v); - }); - } -} diff --git a/src/agent/javascript/src/candid/index.ts b/src/agent/javascript/src/candid/index.ts deleted file mode 100644 index bf9b965b94..0000000000 --- a/src/agent/javascript/src/candid/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './candid-ui'; -export * from './candid-core'; diff --git a/src/agent/javascript/src/canisters/asset.ts b/src/agent/javascript/src/canisters/asset.ts deleted file mode 100644 index d4dc6754fa..0000000000 --- a/src/agent/javascript/src/canisters/asset.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Actor, ActorConfig, ActorSubclass, CallConfig } from '../actor'; -import assetCanister from './asset_idl'; - -/* tslint:disable */ -export interface AssetCanisterRecord { - store(path: string, content: number[]): Promise; - retrieve(path: string): Promise; -} -/* tslint:enable */ - -/** - * Create a management canister actor. - * @param config - */ -export function createAssetCanisterActor(config: ActorConfig) { - return Actor.createActor(assetCanister, config); -} diff --git a/src/agent/javascript/src/canisters/asset_idl.ts b/src/agent/javascript/src/canisters/asset_idl.ts deleted file mode 100644 index a698ae31dd..0000000000 --- a/src/agent/javascript/src/canisters/asset_idl.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * This file is generated from the candid for asset management. - */ -/* tslint:disable */ -// @ts-ignore -export default ({ IDL }) => { - return IDL.Service({ - retrieve: IDL.Func([IDL.Text], [IDL.Vec(IDL.Nat8)], ['query']), - store: IDL.Func([IDL.Text, IDL.Vec(IDL.Nat8)], [], []), - }); -}; diff --git a/src/agent/javascript/src/canisters/management.ts b/src/agent/javascript/src/canisters/management.ts deleted file mode 100644 index 5b581c36eb..0000000000 --- a/src/agent/javascript/src/canisters/management.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Actor, CallConfig } from '../actor'; -import { Principal } from '../principal'; -import managementCanisterIdl from './management_idl'; - -/* tslint:disable */ -export interface ManagementCanisterRecord { - create_canister(): Promise<{ canister_id: Principal }>; - install_code(arg0: { - mode: { install: null } | { reinstall: null } | { upgrade: null }; - canister_id: Principal; - wasm_module: number[]; - arg: number[]; - compute_allocation: [] | [number]; - memory_allocation: [] | [number]; - }): Promise; -} -/* tslint:enable */ - -/** - * Create a management canister actor. - * @param config - */ -export function getManagementCanister(config: CallConfig) { - return Actor.createActor(managementCanisterIdl, { - ...config, - canisterId: Principal.fromHex(''), - }); -} diff --git a/src/agent/javascript/src/canisters/management_idl.ts b/src/agent/javascript/src/canisters/management_idl.ts deleted file mode 100644 index d394170681..0000000000 --- a/src/agent/javascript/src/canisters/management_idl.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * This file is generated from the candid for asset management. - */ -/* tslint:disable */ -// @ts-ignore -export default ({ IDL }) => { - const canister_id = IDL.Principal; - const wasm_module = IDL.Vec(IDL.Nat8); - return IDL.Service({ - create_canister: IDL.Func([], [IDL.Record({ canister_id: canister_id })], []), - install_code: IDL.Func( - [ - IDL.Record({ - mode: IDL.Variant({ install: IDL.Null, reinstall: IDL.Null, upgrade: IDL.Null }), - canister_id: canister_id, - wasm_module: wasm_module, - arg: IDL.Vec(IDL.Nat8), - compute_allocation: IDL.Opt(IDL.Nat), - memory_allocation: IDL.Opt(IDL.Nat), - }), - ], - [], - [], - ), - set_controller: IDL.Func( - [IDL.Record({ canister_id: canister_id, new_controller: IDL.Principal })], - [], - [], - ), - }); -}; diff --git a/src/agent/javascript/src/cbor.test.ts b/src/agent/javascript/src/cbor.test.ts deleted file mode 100644 index b642e11d30..0000000000 --- a/src/agent/javascript/src/cbor.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import BigNumber from 'bignumber.js'; -import { Buffer } from 'buffer/'; -import { decode, encode } from './cbor'; -import { Principal } from './principal'; -import { BinaryBlob, blobFromHex, blobFromUint8Array, blobToHex } from './types'; - -test('round trip', () => { - interface Data { - a: number; - b: string; - c: BinaryBlob; - d: { four: string }; - e: Principal; - f: BinaryBlob; - g: BigNumber; - } - - // FIXME: since we have limited control over CBOR decoding, we are relying on - // BigNumber types actually containing big numbers, since small numbers are - // represented as numbers and big numbers are represented as strings. - const input: Data = { - a: 1, - b: 'two', - c: Buffer.from([3]) as BinaryBlob, - d: { four: 'four' }, - e: Principal.fromText('ic:FfFfFfFfFfFfFfFfd7'), - f: Buffer.from([]) as BinaryBlob, - g: new BigNumber('0xffffffffffffffff'), - }; - - const output = decode(encode(input)); - - // Some values don't decode exactly to the value that was encoded, - // but their hexadecimal representions are the same. - const { c: inputC, e: inputE, f: inputF, ...inputRest } = input; - - const { c: outputC, e: outputE, f: outputF, ...outputRest } = output; - - expect(blobToHex(outputC)).toBe(blobToHex(inputC)); - expect(buf2hex((outputE as any) as Uint8Array).toUpperCase()).toBe(inputE.toHex()); - expect(outputRest).toEqual(inputRest); -}); - -test('empty canister ID', () => { - const input: { a: Principal } = { - a: Principal.fromText('aaaaa-aa'), - }; - - const output = decode(encode(input)); - - const inputA = input.a; - const outputA = output.a; - - expect(buf2hex((outputA as any) as Uint8Array)).toBe(inputA.toHex()); - expect(Principal.fromBlob(outputA as any).toText()).toBe('aaaaa-aa'); -}); - -function buf2hex(buffer: Uint8Array) { - // Construct an array such that each number is translated to the - // hexadecimal equivalent, ensure it is a string and padded then - // join the elements. - return Array.prototype.map.call(buffer, x => ('00' + x.toString(16)).slice(-2)).join(''); -} diff --git a/src/agent/javascript/src/cbor.ts b/src/agent/javascript/src/cbor.ts deleted file mode 100644 index 1517786f01..0000000000 --- a/src/agent/javascript/src/cbor.ts +++ /dev/null @@ -1,80 +0,0 @@ -// tslint:disable:max-classes-per-file -// This file is based on: -// tslint:disable-next-line: max-line-length -// https://github.com/dfinity-lab/dfinity/blob/9bca65f8edd65701ea6bdb00e0752f9186bbc893/docs/spec/public/index.adoc#cbor-encoding-of-requests-and-responses -import borc from 'borc'; -import { Buffer } from 'buffer/'; -import * as cbor from 'simple-cbor'; -import { CborEncoder, SelfDescribeCborSerializer } from 'simple-cbor'; -import { Principal } from './principal'; -import { BinaryBlob } from './types'; - -// We are using hansl/simple-cbor for CBOR serialization, to avoid issues with -// encoding the uint64 values that the HTTP handler of the client expects for -// canister IDs. However, simple-cbor does not yet provide deserialization so -// we are using `BigNumber` and `Buffer` types instead of `BigInt` and -// `Uint8Array` (respectively) so that we can use the dignifiedquire/borc CBOR -// decoder. - -class PrincipalEncoder implements CborEncoder { - public get name() { - return 'Principal'; - } - - public get priority() { - return 0; - } - - public match(value: any): boolean { - return value && value._isPrincipal === true; - } - - public encode(v: Principal): cbor.CborValue { - return cbor.value.bytes(v.toBlob()); - } -} - -class BufferEncoder implements CborEncoder { - public get name() { - return 'Buffer'; - } - - public get priority() { - return 1; - } - - public match(value: any): boolean { - return Buffer.isBuffer(value); - } - - public encode(v: Buffer): cbor.CborValue { - return cbor.value.bytes(new Uint8Array(v)); - } -} - -const serializer = SelfDescribeCborSerializer.withDefaultEncoders(true); -serializer.addEncoder(new PrincipalEncoder()); -serializer.addEncoder(new BufferEncoder()); - -export enum CborTag { - Uint64LittleEndian = 71, - Semantic = 55799, -} - -export const encode = (value: any): BinaryBlob => { - return Buffer.from(serializer.serialize(value)) as BinaryBlob; -}; - -export function decode(input: Uint8Array): T { - const decoder = new borc.Decoder({ - size: input.byteLength, - tags: { - [CborTag.Semantic]: (value: T): T => value, - }, - }); - const result = decoder.decodeFirst(input); - if (result.hasOwnProperty('canister_id')) { - result.canister_id = Principal.fromText(result.canister_id.toString(16)); - } - return result; -} diff --git a/src/agent/javascript/src/http_agent.test.ts b/src/agent/javascript/src/http_agent.test.ts deleted file mode 100644 index 926641e3f6..0000000000 --- a/src/agent/javascript/src/http_agent.test.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { Buffer } from 'buffer/'; -import { HttpAgent } from './agent'; -import { createKeyPairFromSeed, makeAuthTransform, SenderSig, sign, verify } from './auth'; -import * as cbor from './cbor'; -import { makeNonceTransform } from './http_agent_transforms'; -import { - CallRequest, - ReadRequestType, - RequestStatusResponseReplied, - Signed, - SubmitRequestType, -} from './http_agent_types'; -import { Principal } from './principal'; -import { requestIdOf } from './request_id'; -import { BinaryBlob } from './types'; -import { Nonce } from './types'; - -test('call', async () => { - const mockFetch: jest.Mock = jest.fn((resource, init) => { - return Promise.resolve( - new Response(null, { - status: 200, - }), - ); - }); - - const canisterId: Principal = Principal.fromText('2chl6-4hpzw-vqaaa-aaaaa-c'); - const nonce = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]) as Nonce; - // prettier-ignore - const seed = Buffer.from([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - ]); - const keyPair = createKeyPairFromSeed(seed); - const principal = await Principal.selfAuthenticating(keyPair.publicKey); - - const httpAgent = new HttpAgent({ - fetch: mockFetch, - principal, - }); - httpAgent.addTransform(makeNonceTransform(() => nonce)); - httpAgent.setAuthTransform(makeAuthTransform(keyPair)); - - const methodName = 'greet'; - const arg = Buffer.from([]) as BinaryBlob; - - const { requestId } = await httpAgent.call(canisterId, { - methodName, - arg, - }); - - const mockPartialRequest = { - request_type: SubmitRequestType.Call, - canister_id: canisterId, - method_name: methodName, - // We need a request id for the signature and at the same time we - // are checking that signature does not impact the request id. - arg, - nonce, - sender: principal.toBlob(), - }; - - const mockPartialsRequestId = await requestIdOf(mockPartialRequest); - const senderSig = sign(mockPartialsRequestId, keyPair.secretKey); - // Just sanity checking our life. - expect(verify(mockPartialsRequestId, senderSig, keyPair.publicKey)).toBe(true); - - const expectedRequest: Signed = { - content: mockPartialRequest, - sender_pubkey: keyPair.publicKey, - sender_sig: senderSig, - } as Signed; - - const expectedRequestId = await requestIdOf(expectedRequest.content); - expect(expectedRequestId).toEqual(mockPartialsRequestId); - - const { calls, results } = mockFetch.mock; - expect(calls.length).toBe(1); - expect(requestId).toEqual(expectedRequestId); - - expect(calls[0][0]).toBe('http://localhost/api/v1/submit'); - expect(calls[0][1]).toEqual({ - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode(expectedRequest), - }); -}); - -test.todo('query'); - -test('requestStatus', async () => { - const mockResponse = { - status: 'replied', - reply: { arg: Buffer.from([]) as BinaryBlob }, - }; - - const mockFetch: jest.Mock = jest.fn((resource, init) => { - const body = cbor.encode(mockResponse); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }); - - const canisterIdent = '2chl6-4hpzw-vqaaa-aaaaa-c'; - const nonce = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]) as Nonce; - - // prettier-ignore - const seed = Buffer.from([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - ]); - const keyPair = createKeyPairFromSeed(seed); - const senderPubKey = keyPair.publicKey; - const principal = await Principal.selfAuthenticating(senderPubKey); - - const httpAgent = new HttpAgent({ - fetch: mockFetch, - principal, - }); - httpAgent.addTransform(makeNonceTransform(() => nonce)); - httpAgent.setAuthTransform(makeAuthTransform(keyPair, () => Buffer.from([0]) as SenderSig)); - - const requestId = await requestIdOf({ - request_type: SubmitRequestType.Call, - nonce, - canister_id: Principal.fromText(canisterIdent), - method_name: 'greet', - arg: Buffer.from([]), - sender: principal.toBlob(), - }); - - const response = await httpAgent.requestStatus({ - requestId, - }); - - const expectedRequest = { - content: { - request_type: ReadRequestType.RequestStatus, - request_id: requestId, - }, - sender_pubkey: senderPubKey, - sender_sig: Buffer.from([0]) as SenderSig, - }; - - const { calls, results } = mockFetch.mock; - expect(calls.length).toBe(1); - - // Trick the type system. - const { - reply: { arg: responseArg }, - ...responseRest - } = response as RequestStatusResponseReplied; - - const { - reply: { arg: mockResponseArg }, - ...mockResponseRest - } = mockResponse; - - expect(responseRest).toEqual(mockResponseRest); - expect(responseArg?.equals(mockResponseArg)).toBe(true); - - expect(calls[0]).toEqual([ - 'http://localhost/api/v1/read', - { - method: 'POST', - headers: { - 'Content-Type': 'application/cbor', - }, - body: cbor.encode(expectedRequest), - }, - ]); -}); - -test('queries with the same content should have the same signature', async () => { - const mockResponse = { - status: 'replied', - reply: { arg: Buffer.from([]) as BinaryBlob }, - }; - - const mockFetch: jest.Mock = jest.fn((resource, init) => { - const body = cbor.encode(mockResponse); - return Promise.resolve( - new Response(body, { - status: 200, - }), - ); - }); - - const canisterIdent = '2chl6-4hpzw-vqaaa-aaaaa-c'; - const nonce = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]) as Nonce; - - // prettier-ignore - const seed = Buffer.from([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - ]); - const keyPair = createKeyPairFromSeed(seed); - const senderPubKey = keyPair.publicKey; - const principal = await Principal.selfAuthenticating(senderPubKey); - - const httpAgent = new HttpAgent({ - fetch: mockFetch, - principal, - }); - httpAgent.addTransform(makeNonceTransform(() => nonce)); - httpAgent.setAuthTransform(makeAuthTransform(keyPair)); - - const methodName = 'greet'; - const arg = Buffer.from([]) as BinaryBlob; - - const requestId = await requestIdOf({ - request_type: SubmitRequestType.Call, - nonce, - canister_id: Principal.fromText(canisterIdent), - method_name: methodName, - arg, - sender: principal.toBlob(), - }); - - const response1 = await httpAgent.requestStatus({ - requestId, - }); - - const response2 = await httpAgent.requestStatus({ - requestId, - }); - - const response3 = await httpAgent.query(canisterIdent, { arg, methodName }); - const response4 = await httpAgent.query(canisterIdent, { methodName, arg }); - - const { calls } = mockFetch.mock; - expect(calls.length).toBe(4); - - expect(calls[0]).toEqual(calls[1]); - expect(response1).toEqual(response2); - - expect(calls[2]).toEqual(calls[3]); - expect(response3).toEqual(response4); -}); diff --git a/src/agent/javascript/src/http_agent_transforms.ts b/src/agent/javascript/src/http_agent_transforms.ts deleted file mode 100644 index 0ed57b53d9..0000000000 --- a/src/agent/javascript/src/http_agent_transforms.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Endpoint, HttpAgentRequest, HttpAgentRequestTransformFn } from './http_agent_types'; -import { makeNonce, Nonce } from './types'; - -export function makeNonceTransform(nonceFn: () => Nonce = makeNonce): HttpAgentRequestTransformFn { - return async (request: HttpAgentRequest) => { - if (request.endpoint !== Endpoint.Read) { - request.body.nonce = nonceFn(); - } - }; -} diff --git a/src/agent/javascript/src/http_agent_types.ts b/src/agent/javascript/src/http_agent_types.ts deleted file mode 100644 index cb296f0547..0000000000 --- a/src/agent/javascript/src/http_agent_types.ts +++ /dev/null @@ -1,197 +0,0 @@ -import { Principal } from './principal'; -import { RejectCode } from './reject_code'; -import { RequestId } from './request_id'; -import { BinaryBlob } from './types'; - -export const enum Endpoint { - Read = 'read', - Submit = 'submit', - Status = 'status', -} - -// An HttpAgent request, before it gets encoded and sent to the server. -// We create an empty request that we will fill later. -export type HttpAgentRequest = HttpAgentReadRequest | HttpAgentSubmitRequest; - -export interface HttpAgentBaseRequest { - readonly endpoint: Endpoint; - request: RequestInit; -} - -export interface HttpAgentSubmitRequest extends HttpAgentBaseRequest { - readonly endpoint: Endpoint.Submit; - body: SubmitRequest; -} - -export interface HttpAgentReadRequest extends HttpAgentBaseRequest { - readonly endpoint: Endpoint.Read; - body: ReadRequest; -} - -export type SignedHttpAgentRequest = SignedHttpAgentReadRequest | SignedHttpAgentSubmitRequest; - -export interface SignedHttpAgentSubmitRequest extends HttpAgentBaseRequest { - readonly endpoint: Endpoint.Submit; - body: Signed; -} - -export interface SignedHttpAgentReadRequest extends HttpAgentBaseRequest { - readonly endpoint: Endpoint.Read; - body: Signed; -} - -export interface Signed { - content: T; - sender_pubkey: BinaryBlob; - sender_sig: BinaryBlob; -} - -export interface HttpAgentRequestTransformFn { - (args: HttpAgentRequest): Promise; - priority?: number; -} - -export type AuthHttpAgentRequestTransformFn = ( - args: HttpAgentRequest, -) => Promise; - -export interface QueryFields { - methodName: string; - arg: BinaryBlob; -} -export interface RequestStatusFields { - requestId: RequestId; -} - -export interface CallFields { - methodName: string; - arg: BinaryBlob; -} - -// The fields in a "call" submit request. -// tslint:disable:camel-case -export interface CallRequest extends Record { - request_type: SubmitRequestType.Call; - canister_id: Principal; - method_name: string; - arg: BinaryBlob; - sender: BinaryBlob; -} -export interface InstallCodeRequest extends Record { - request_type: SubmitRequestType.InstallCode; - canister_id: Principal; - module: BinaryBlob; - arg?: BinaryBlob; - sender: BinaryBlob; -} -export interface CreateCanisterRequest extends Record { - request_type: SubmitRequestType.CreateCanister; - sender: BinaryBlob; -} -// tslint:enable:camel-case - -// The types of values allowed in the `request_type` field for submit requests. -export enum SubmitRequestType { - Call = 'call', - InstallCode = 'install_code', - CreateCanister = 'create_canister', -} - -export type SubmitRequest = CallRequest | InstallCodeRequest | CreateCanisterRequest; -export interface SubmitResponse { - requestId: RequestId; - response: { - ok: boolean; - status: number; - statusText: string; - }; -} - -// An ADT that represents responses to a "query" read request. -export type QueryResponse = QueryResponseReplied | QueryResponseRejected; - -export interface QueryResponseBase { - status: QueryResponseStatus; -} - -export interface QueryResponseReplied extends QueryResponseBase { - status: QueryResponseStatus.Replied; - reply: { arg: BinaryBlob }; -} - -export interface QueryResponseRejected extends QueryResponseBase { - status: QueryResponseStatus.Rejected; - reject_code: RejectCode; - reject_message: string; -} - -export const enum QueryResponseStatus { - Replied = 'replied', - Rejected = 'rejected', -} - -// The types of values allowed in the `request_type` field for read requests. -export const enum ReadRequestType { - Query = 'query', - RequestStatus = 'request_status', -} - -// The fields in a "query" read request. -export interface QueryRequest extends Record { - request_type: ReadRequestType.Query; - canister_id: Principal; - method_name: string; - arg: BinaryBlob; - sender: BinaryBlob; -} - -// The fields in a "request_status" read request. -export interface RequestStatusRequest extends Record { - request_type: ReadRequestType.RequestStatus; - request_id: RequestId; -} - -// An ADT that represents responses to a "request_status" read request. -export type RequestStatusResponse = - | RequestStatusResponseReceived - | RequestStatusResponseProcessing - | RequestStatusResponseReplied - | RequestStatusResponseRejected - | RequestStatusResponseUnknown; - -export interface RequestStatusResponseReceived { - status: RequestStatusResponseStatus.Received; -} - -export interface RequestStatusResponseProcessing { - status: RequestStatusResponseStatus.Processing; -} - -export interface RequestStatusResponseReplied { - status: RequestStatusResponseStatus.Replied; - reply: { - canister_id?: BinaryBlob; - arg?: BinaryBlob; - }; -} - -export interface RequestStatusResponseRejected { - status: RequestStatusResponseStatus.Rejected; - reject_code: RejectCode; - reject_message: string; -} - -export interface RequestStatusResponseUnknown { - status: RequestStatusResponseStatus.Unknown; -} - -export enum RequestStatusResponseStatus { - Received = 'received', - Processing = 'processing', - Replied = 'replied', - Rejected = 'rejected', - Unknown = 'unknown', -} - -export type ReadRequest = QueryRequest | RequestStatusRequest; -export type ReadResponse = QueryResponse | RequestStatusResponse; diff --git a/src/agent/javascript/src/idl.test.ts b/src/agent/javascript/src/idl.test.ts deleted file mode 100644 index bbd79decc0..0000000000 --- a/src/agent/javascript/src/idl.test.ts +++ /dev/null @@ -1,416 +0,0 @@ -// tslint:disable -import BigNumber from 'bignumber.js'; -import * as IDL from './idl'; -import { Buffer } from 'buffer/'; -import { Principal } from './principal'; - -function testEncode(typ: IDL.Type, val: any, hex: string, _str: string) { - expect(IDL.encode([typ], [val]).toString('hex')).toEqual(hex); -} - -function testDecode(typ: IDL.Type, val: any, hex: string, _str: string) { - expect(IDL.decode([typ], Buffer.from(hex, 'hex'))[0]).toEqual(val); -} - -function test_(typ: IDL.Type, val: any, hex: string, str: string) { - testEncode(typ, val, hex, str); - testDecode(typ, val, hex, str); -} - -function test_args(typs: IDL.Type[], vals: any[], hex: string, _str: string) { - expect(IDL.encode(typs, vals)).toEqual(Buffer.from(hex, 'hex')); - expect(IDL.decode(typs, Buffer.from(hex, 'hex'))).toEqual(vals); -} - -test('IDL encoding (magic number)', () => { - // Wrong magic number - expect(() => IDL.decode([IDL.Nat], Buffer.from('2a'))).toThrow( - /Message length smaller than magic number/, - ); - expect(() => IDL.decode([IDL.Nat], Buffer.from('4449444d2a'))).toThrow(/Wrong magic number:/); -}); - -test('IDL encoding (empty)', () => { - // Empty - expect(() => IDL.encode([IDL.Empty], [undefined])).toThrow(/Invalid empty argument:/); - expect(() => IDL.decode([IDL.Empty], Buffer.from('4449444c00016f', 'hex'))).toThrow( - /Empty cannot appear as an output/, - ); -}); - -test('IDL encoding (null)', () => { - // Null - test_(IDL.Null, null, '4449444c00017f', 'Null value'); -}); - -test('IDL encoding (text)', () => { - // Text - test_(IDL.Text, 'Hi ☃\n', '4449444c00017107486920e298830a', 'Text with unicode'); - test_( - IDL.Opt(IDL.Text), - ['Hi ☃\n'], - '4449444c016e7101000107486920e298830a', - 'Nested text with unicode', - ); - expect(() => IDL.encode([IDL.Text], [0])).toThrow(/Invalid text argument/); - expect(() => IDL.encode([IDL.Text], [null])).toThrow(/Invalid text argument/); - expect(() => - IDL.decode([IDL.Vec(IDL.Nat8)], Buffer.from('4449444c00017107486920e298830a', 'hex')), - ).toThrow(/type mismatch: type on the wire text, expect type vec nat8/); -}); - -test('IDL encoding (int)', () => { - // Int - test_(IDL.Int, new BigNumber(0), '4449444c00017c00', 'Int'); - test_(IDL.Int, new BigNumber(42), '4449444c00017c2a', 'Int'); - test_(IDL.Int, new BigNumber(1234567890), '4449444c00017cd285d8cc04', 'Positive Int'); - test_( - IDL.Int, - new BigNumber('60000000000000000'), - '4449444c00017c808098f4e9b5caea00', - 'Positive BigInt', - ); - test_(IDL.Int, new BigNumber(-1234567890), '4449444c00017caefaa7b37b', 'Negative Int'); - test_(IDL.Opt(IDL.Int), [new BigNumber(42)], '4449444c016e7c0100012a', 'Nested Int'); - testEncode(IDL.Opt(IDL.Int), [42], '4449444c016e7c0100012a', 'Nested Int (number)'); - expect(() => IDL.decode([IDL.Int], Buffer.from('4449444c00017d2a', 'hex'))).toThrow( - /type mismatch: type on the wire nat, expect type int/, - ); -}); - -test('IDL encoding (nat)', () => { - // Nat - test_(IDL.Nat, new BigNumber(42), '4449444c00017d2a', 'Nat'); - test_(IDL.Nat, new BigNumber(1234567890), '4449444c00017dd285d8cc04', 'Positive Nat'); - test_( - IDL.Nat, - new BigNumber('60000000000000000'), - '4449444c00017d808098f4e9b5ca6a', - 'Positive BigInt', - ); - testEncode(IDL.Opt(IDL.Nat), [42], '4449444c016e7d0100012a', 'Nested Nat (number)'); - expect(() => IDL.encode([IDL.Nat], [-1])).toThrow(/Invalid nat argument/); -}); - -test('IDL encoding (float64)', () => { - // Float64 - test_(IDL.Float64, 3, '4449444c0001720000000000000840', 'Float'); - test_(IDL.Float64, 6, '4449444c0001720000000000001840', 'Float'); - test_(IDL.Float64, 0.5, '4449444c000172000000000000e03f', 'Float'); - test_(IDL.Float64, Number.NaN, '4449444c000172010000000000f07f', 'NaN'); - test_(IDL.Float64, Number.POSITIVE_INFINITY, '4449444c000172000000000000f07f', '+infinity'); - test_(IDL.Float64, Number.NEGATIVE_INFINITY, '4449444c000172000000000000f0ff', '-infinity'); - test_(IDL.Float64, Number.EPSILON, '4449444c000172000000000000b03c', 'eps'); - test_(IDL.Float64, Number.MIN_VALUE, '4449444c0001720100000000000000', 'min_value'); - test_(IDL.Float64, Number.MAX_VALUE, '4449444c000172ffffffffffffef7f', 'max_value'); - test_(IDL.Float64, Number.MIN_SAFE_INTEGER, '4449444c000172ffffffffffff3fc3', 'min_safe_integer'); - test_(IDL.Float64, Number.MAX_SAFE_INTEGER, '4449444c000172ffffffffffff3f43', 'max_safe_integer'); -}); - -test('IDL encoding (fixed-width number)', () => { - // Fixed-width number - test_(IDL.Int8, 0, '4449444c00017700', 'Int8'); - test_(IDL.Int8, -1, '4449444c000177ff', 'Int8'); - test_(IDL.Int8, 42, '4449444c0001772a', 'Int8'); - test_(IDL.Int8, 127, '4449444c0001777f', 'Int8'); - test_(IDL.Int8, -128, '4449444c00017780', 'Int8'); - test_(IDL.Int32, 42, '4449444c0001752a000000', 'Int32'); - test_(IDL.Int32, -42, '4449444c000175d6ffffff', 'Negative Int32'); - test_(IDL.Int32, 1234567890, '4449444c000175d2029649', 'Positive Int32'); - test_(IDL.Int32, -1234567890, '4449444c0001752efd69b6', 'Negative Int32'); - test_(IDL.Int32, -0x7fffffff, '4449444c00017501000080', 'Negative Int32'); - test_(IDL.Int32, 0x7fffffff, '4449444c000175ffffff7f', 'Positive Int32'); - test_(IDL.Int64, new BigNumber(42), '4449444c0001742a00000000000000', 'Int64'); - test_(IDL.Int64, new BigNumber(-42), '4449444c000174d6ffffffffffffff', 'Int64'); - test_(IDL.Int64, new BigNumber(1234567890), '4449444c000174d202964900000000', 'Positive Int64'); - test_(IDL.Nat8, 42, '4449444c00017b2a', 'Nat8'); - test_(IDL.Nat8, 0, '4449444c00017b00', 'Nat8'); - test_(IDL.Nat8, 255, '4449444c00017bff', 'Nat8'); - test_(IDL.Nat32, 0, '4449444c00017900000000', 'Nat32'); - test_(IDL.Nat32, 42, '4449444c0001792a000000', 'Nat32'); - test_(IDL.Nat32, 0xffffffff, '4449444c000179ffffffff', 'Nat32'); - test_(IDL.Nat64, new BigNumber(1234567890), '4449444c000178d202964900000000', 'Positive Nat64'); - expect(() => IDL.encode([IDL.Nat32], [-42])).toThrow(/Invalid nat32 argument/); - expect(() => IDL.encode([IDL.Int8], [256])).toThrow(/Invalid int8 argument/); - expect(() => IDL.encode([IDL.Int32], [0xffffffff])).toThrow(/Invalid int32 argument/); -}); - -test('IDL encoding (tuple)', () => { - // Tuple - test_( - IDL.Tuple(IDL.Int, IDL.Text), - [new BigNumber(42), '💩'], - '4449444c016c02007c017101002a04f09f92a9', - 'Pairs', - ); - expect(() => IDL.encode([IDL.Tuple(IDL.Int, IDL.Text)], [[0]])).toThrow( - /Invalid record {int; text} argument/, - ); -}); - -test('IDL encoding (array)', () => { - // Array - test_( - IDL.Vec(IDL.Int), - [0, 1, 2, 3].map(x => new BigNumber(x)), - '4449444c016d7c01000400010203', - 'Array of Ints', - ); - expect(() => IDL.encode([IDL.Vec(IDL.Int)], [new BigNumber(0)])).toThrow( - /Invalid vec int argument/, - ); - expect(() => IDL.encode([IDL.Vec(IDL.Int)], [['fail']])).toThrow(/Invalid vec int argument/); -}); - -test('IDL encoding (array + tuples)', () => { - // Array of Tuple - test_( - IDL.Vec(IDL.Tuple(IDL.Int, IDL.Text)), - [[new BigNumber(42), 'text']], - '4449444c026c02007c01716d000101012a0474657874', - 'Arr of Tuple', - ); - - // Nested Tuples - test_( - IDL.Tuple(IDL.Tuple(IDL.Tuple(IDL.Tuple(IDL.Null)))), - [[[[null]]]], - '4449444c046c01007f6c0100006c0100016c0100020103', - 'Nested Tuples', - ); -}); - -test('IDL encoding (record)', () => { - // Record - test_(IDL.Record({}), {}, '4449444c016c000100', 'Empty record'); - expect(() => IDL.encode([IDL.Record({ a: IDL.Text })], [{ b: 'b' }])).toThrow( - /Record is missing key/, - ); - - // Test that additional keys are ignored - testEncode( - IDL.Record({ foo: IDL.Text, bar: IDL.Int }), - { foo: '💩', bar: new BigNumber(42), baz: new BigNumber(0) }, - '4449444c016c02d3e3aa027c868eb7027101002a04f09f92a9', - 'Record', - ); - testEncode( - IDL.Record({ foo: IDL.Text, bar: IDL.Int }), - { foo: '💩', bar: 42 }, - '4449444c016c02d3e3aa027c868eb7027101002a04f09f92a9', - 'Record', - ); -}); - -test('IDL decoding (skip fields)', () => { - testDecode( - IDL.Record({ foo: IDL.Text, bar: IDL.Int }), - { foo: '💩', bar: new BigNumber(42) }, - '4449444c016c04017f027ed3e3aa027c868eb702710100012a04f09f92a9', - 'ignore record fields', - ); - testDecode( - IDL.Variant({ ok: IDL.Text, err: IDL.Text }), - { ok: 'good' }, - '4449444c016b03017e9cc20171e58eb4027101000104676f6f64', - 'adjust variant index', - ); - const recordType = IDL.Record({ foo: IDL.Int32, bar: IDL.Bool }); - const recordValue = { foo: 42, bar: true }; - test_( - IDL.Record({ foo: IDL.Int32, bar: recordType, baz: recordType, bib: recordType }), - { foo: 42, bar: recordValue, baz: recordValue, bib: recordValue }, - '4449444c026c02d3e3aa027e868eb702756c04d3e3aa0200dbe3aa0200bbf1aa0200868eb702750101012a000000012a000000012a0000002a000000', - 'nested record', - ); - testDecode( - IDL.Record({ baz: IDL.Record({ foo: IDL.Int32 }) }), - { baz: { foo: 42 } }, - '4449444c026c02d3e3aa027e868eb702756c04d3e3aa0200dbe3aa0200bbf1aa0200868eb702750101012a000000012a000000012a0000002a000000', - 'skip nested fields', - ); -}); - -test('IDL encoding (numbered record)', () => { - // Record - test_( - IDL.Record({ _0_: IDL.Int8, _1_: IDL.Bool }), - { _0_: 42, _1_: true }, - '4449444c016c020077017e01002a01', - 'Numbered record', - ); - // Test Tuple and numbered record are exact the same - test_(IDL.Tuple(IDL.Int8, IDL.Bool), [42, true], '4449444c016c020077017e01002a01', 'Tuple'); - test_( - IDL.Tuple(IDL.Tuple(IDL.Int8, IDL.Bool), IDL.Record({ _0_: IDL.Int8, _1_: IDL.Bool })), - [[42, true], { _0_: 42, _1_: true }], - '4449444c026c020077017e6c020000010001012a012a01', - 'Tuple and Record', - ); - test_( - IDL.Record({ _2_: IDL.Int8, 2: IDL.Bool }), - { _2_: 42, 2: true }, - '4449444c016c020277327e01002a01', - 'Mixed record', - ); -}); - -test('IDL encoding (bool)', () => { - // Bool - test_(IDL.Bool, true, '4449444c00017e01', 'true'); - test_(IDL.Bool, false, '4449444c00017e00', 'false'); - expect(() => IDL.encode([IDL.Bool], [0])).toThrow(/Invalid bool argument/); - expect(() => IDL.encode([IDL.Bool], ['false'])).toThrow(/Invalid bool argument/); -}); - -test('IDL encoding (principal)', () => { - // Principal - test_( - IDL.Principal, - Principal.fromText('w7x7r-cok77-xa'), - '4449444c0001680103caffee', - 'principal', - ); - test_( - IDL.Principal, - Principal.fromText('2chl6-4hpzw-vqaaa-aaaaa-c'), - '4449444c0001680109efcdab000000000001', - 'principal', - ); - expect(() => IDL.encode([IDL.Principal], ['w7x7r-cok77-xa'])).toThrow( - /Invalid principal argument/, - ); - expect(() => IDL.decode([IDL.Principal], Buffer.from('4449444c00016803caffee', 'hex'))).toThrow( - /Cannot decode principal/, - ); -}); - -test('IDL encoding (function)', () => { - // Function - test_( - IDL.Func([IDL.Text], [IDL.Nat], []), - [Principal.fromText('w7x7r-cok77-xa'), 'foo'], - '4449444c016a0171017d000100010103caffee03666f6f', - 'function', - ); - test_( - IDL.Func([IDL.Text], [IDL.Nat], ['query']), - [Principal.fromText('w7x7r-cok77-xa'), 'foo'], - '4449444c016a0171017d01010100010103caffee03666f6f', - 'query function', - ); -}); - -test('IDL encoding (service)', () => { - // Service - test_( - IDL.Service({ foo: IDL.Func([IDL.Text], [IDL.Nat], []) }), - Principal.fromText('w7x7r-cok77-xa'), - '4449444c026a0171017d00690103666f6f0001010103caffee', - 'service', - ); - test_( - IDL.Service({ foo: IDL.Func([IDL.Text], [IDL.Nat], ['query']) }), - Principal.fromText('w7x7r-cok77-xa'), - '4449444c026a0171017d0101690103666f6f0001010103caffee', - 'service', - ); - test_( - IDL.Service({ - foo: IDL.Func([IDL.Text], [IDL.Nat], []), - foo2: IDL.Func([IDL.Text], [IDL.Nat], []), - }), - Principal.fromText('w7x7r-cok77-xa'), - '4449444c026a0171017d00690203666f6f0004666f6f320001010103caffee', - 'service', - ); -}); - -test('IDL encoding (variants)', () => { - // Variants - const Result = IDL.Variant({ ok: IDL.Text, err: IDL.Text }); - test_(Result, { ok: 'good' }, '4449444c016b029cc20171e58eb4027101000004676f6f64', 'Result ok'); - test_(Result, { err: 'uhoh' }, '4449444c016b029cc20171e58eb402710100010475686f68', 'Result err'); - expect(() => IDL.encode([Result], [{}])).toThrow(/Invalid variant {ok:text; err:text} argument/); - expect(() => IDL.encode([Result], [{ ok: 'ok', err: 'err' }])).toThrow( - /Invalid variant {ok:text; err:text} argument/, - ); - - // Test that nullary constructors work as expected - test_( - IDL.Variant({ foo: IDL.Null }), - { foo: null }, - '4449444c016b01868eb7027f010000', - 'Nullary constructor in variant', - ); - - // Test that Empty within variants works as expected - test_( - IDL.Variant({ ok: IDL.Text, err: IDL.Empty }), - { ok: 'good' }, - '4449444c016b029cc20171e58eb4026f01000004676f6f64', - 'Empty within variants', - ); - expect(() => - IDL.encode([IDL.Variant({ ok: IDL.Text, err: IDL.Empty })], [{ err: 'uhoh' }]), - ).toThrow(/Invalid variant {ok:text; err:empty} argument:/); - - // Test for option - test_(IDL.Opt(IDL.Nat), [], '4449444c016e7d010000', 'None option'); - test_(IDL.Opt(IDL.Nat), [new BigNumber(1)], '4449444c016e7d01000101', 'Some option'); - test_( - IDL.Opt(IDL.Opt(IDL.Nat)), - [[new BigNumber(1)]], - '4449444c026e7d6e000101010101', - 'Nested option', - ); - test_(IDL.Opt(IDL.Opt(IDL.Null)), [[null]], '4449444c026e7f6e0001010101', 'Null option'); - - // Type description sharing - test_( - IDL.Tuple(IDL.Vec(IDL.Int), IDL.Vec(IDL.Nat), IDL.Vec(IDL.Int), IDL.Vec(IDL.Nat)), - [[], [], [], []], - '4449444c036d7c6d7d6c040000010102000301010200000000', - 'Type sharing', - ); -}); - -test('IDL encoding (rec)', () => { - // Test for recursive types - const List = IDL.Rec(); - expect(() => IDL.encode([List], [[]])).toThrow(/Recursive type uninitialized/); - List.fill(IDL.Opt(IDL.Record({ head: IDL.Int, tail: List }))); - test_(List, [], '4449444c026e016c02a0d2aca8047c90eddae70400010000', 'Empty list'); - test_( - List, - [{ head: new BigNumber(1), tail: [{ head: new BigNumber(2), tail: [] }] }], - '4449444c026e016c02a0d2aca8047c90eddae7040001000101010200', - 'List', - ); - - // Mutual recursion - const List1 = IDL.Rec(); - const List2 = IDL.Rec(); - List1.fill(IDL.Opt(List2)); - List2.fill(IDL.Record({ head: IDL.Int, tail: List1 })); - test_(List1, [], '4449444c026e016c02a0d2aca8047c90eddae70400010000', 'Empty list'); - test_( - List1, - [{ head: new BigNumber(1), tail: [{ head: new BigNumber(2), tail: [] }] }], - '4449444c026e016c02a0d2aca8047c90eddae7040001000101010200', - 'List', - ); -}); - -test('IDL encoding (multiple arguments)', () => { - const Result = IDL.Variant({ ok: IDL.Text, err: IDL.Text }); - - // Test for multiple arguments - test_args( - [IDL.Nat, IDL.Opt(IDL.Text), Result], - [new BigNumber(42), ['test'], { ok: 'good' }], - '4449444c026e716b029cc20171e58eb40271037d00012a0104746573740004676f6f64', - 'Multiple arguments', - ); - test_args([], [], '4449444c0000', 'empty args'); -}); diff --git a/src/agent/javascript/src/idl.ts b/src/agent/javascript/src/idl.ts deleted file mode 100644 index b66d9208df..0000000000 --- a/src/agent/javascript/src/idl.ts +++ /dev/null @@ -1,1619 +0,0 @@ -// tslint:disable:max-classes-per-file -import BigNumber from 'bignumber.js'; -import Pipe = require('buffer-pipe'); -import { Buffer } from 'buffer/'; -import { Principal as PrincipalId } from './principal'; -import { JsonValue } from './types'; -import { idlLabelToId } from './utils/hash'; -import { lebDecode, lebEncode, safeRead, slebDecode, slebEncode } from './utils/leb128'; -import { readIntLE, readUIntLE, writeIntLE, writeUIntLE } from './utils/leb128'; - -// tslint:disable:max-line-length -/** - * This module provides a combinator library to create serializers/deserializers - * between JavaScript values and IDL used by canisters on the Internet Computer, - * as documented at https://github.com/dfinity/candid/blob/119703ba342d2fef6ab4972d2541b9fe36ae8e36/spec/Candid.md - */ -// tslint:enable:max-line-length - -const enum IDLTypeIds { - Null = -1, - Bool = -2, - Nat = -3, - Int = -4, - Float32 = -13, - Float64 = -14, - Text = -15, - Reserved = -16, - Empty = -17, - Opt = -18, - Vector = -19, - Record = -20, - Variant = -21, - Func = -22, - Service = -23, - Principal = -24, -} - -const magicNumber = 'DIDL'; - -function zipWith(xs: TX[], ys: TY[], f: (a: TX, b: TY) => TR): TR[] { - return xs.map((x, i) => f(x, ys[i])); -} - -/** - * An IDL Type Table, which precedes the data in the stream. - */ -class TypeTable { - // List of types. Needs to be an array as the index needs to be stable. - private _typs: Buffer[] = []; - private _idx = new Map(); - - public has(obj: ConstructType) { - return this._idx.has(obj.name); - } - - public add(type: ConstructType, buf: Buffer) { - const idx = this._typs.length; - this._idx.set(type.name, idx); - this._typs.push(buf); - } - - public merge(obj: ConstructType, knot: string) { - const idx = this._idx.get(obj.name); - const knotIdx = this._idx.get(knot); - if (idx === undefined) { - throw new Error('Missing type index for ' + obj); - } - if (knotIdx === undefined) { - throw new Error('Missing type index for ' + knot); - } - this._typs[idx] = this._typs[knotIdx]; - - // Delete the type. - this._typs.splice(knotIdx, 1); - this._idx.delete(knot); - } - - public encode() { - const len = lebEncode(this._typs.length); - const buf = Buffer.concat(this._typs); - return Buffer.concat([len, buf]); - } - - public indexOf(typeName: string) { - if (!this._idx.has(typeName)) { - throw new Error('Missing type index for ' + typeName); - } - return slebEncode(this._idx.get(typeName) || 0); - } -} - -export abstract class Visitor { - public visitType(t: Type, data: D): R { - throw new Error('Not implemented'); - } - public visitPrimitive(t: PrimitiveType, data: D): R { - return this.visitType(t, data); - } - public visitEmpty(t: EmptyClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitBool(t: BoolClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitNull(t: NullClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitReserved(t: ReservedClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitText(t: TextClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitNumber(t: PrimitiveType, data: D): R { - return this.visitPrimitive(t, data); - } - public visitInt(t: IntClass, data: D): R { - return this.visitNumber(t, data); - } - public visitNat(t: NatClass, data: D): R { - return this.visitNumber(t, data); - } - public visitFloat(t: FloatClass, data: D): R { - return this.visitPrimitive(t, data); - } - public visitFixedInt(t: FixedIntClass, data: D): R { - return this.visitNumber(t, data); - } - public visitFixedNat(t: FixedNatClass, data: D): R { - return this.visitNumber(t, data); - } - public visitPrincipal(t: PrincipalClass, data: D): R { - return this.visitPrimitive(t, data); - } - - public visitConstruct(t: ConstructType, data: D): R { - return this.visitType(t, data); - } - public visitVec(t: VecClass, ty: Type, data: D): R { - return this.visitConstruct(t, data); - } - public visitOpt(t: OptClass, ty: Type, data: D): R { - return this.visitConstruct(t, data); - } - public visitRecord(t: RecordClass, fields: Array<[string, Type]>, data: D): R { - return this.visitConstruct(t, data); - } - public visitTuple(t: TupleClass, components: Type[], data: D): R { - const fields: Array<[string, Type]> = components.map((ty, i) => [`_${i}_`, ty]); - return this.visitRecord(t, fields, data); - } - public visitVariant(t: VariantClass, fields: Array<[string, Type]>, data: D): R { - return this.visitConstruct(t, data); - } - public visitRec(t: RecClass, ty: ConstructType, data: D): R { - return this.visitConstruct(ty, data); - } - public visitFunc(t: FuncClass, data: D): R { - return this.visitConstruct(t, data); - } - public visitService(t: ServiceClass, data: D): R { - return this.visitConstruct(t, data); - } -} - -/** - * Represents an IDL type. - */ -export abstract class Type { - public abstract readonly name: string; - public abstract accept(v: Visitor, d: D): R; - - /* Display type name */ - public display(): string { - return this.name; - } - - public valueToString(x: T): string { - return JSON.stringify(x); - } - - /* Implement `T` in the IDL spec, only needed for non-primitive types */ - public buildTypeTable(typeTable: TypeTable): void { - if (!typeTable.has(this)) { - this._buildTypeTableImpl(typeTable); - } - } - - /** - * Assert that JavaScript's `x` is the proper type represented by this - * Type. - */ - public abstract covariant(x: any): x is T; - - /** - * Encode the value. This needs to be public because it is used by - * encodeValue() from different types. - * @internal - */ - public abstract encodeValue(x: T): Buffer; - - /** - * Implement `I` in the IDL spec. - * Encode this type for the type table. - */ - public abstract encodeType(typeTable: TypeTable): Buffer; - - public abstract checkType(t: Type): Type; - public abstract decodeValue(x: Pipe, t: Type): T; - - protected abstract _buildTypeTableImpl(typeTable: TypeTable): void; -} - -export abstract class PrimitiveType extends Type { - public checkType(t: Type): Type { - if (this.name !== t.name) { - throw new Error(`type mismatch: type on the wire ${t.name}, expect type ${this.name}`); - } - return t; - } - public _buildTypeTableImpl(typeTable: TypeTable): void { - // No type table encoding for Primitive types. - return; - } -} - -export abstract class ConstructType extends Type { - public checkType(t: Type): ConstructType { - if (t instanceof RecClass) { - const ty = t.getType(); - if (typeof ty === 'undefined') { - throw new Error('type mismatch with uninitialized type'); - } - return ty; - } - throw new Error(`type mismatch: type on the wire ${t.name}, expect type ${this.name}`); - } - public encodeType(typeTable: TypeTable) { - return typeTable.indexOf(this.name); - } -} - -/** - * Represents an IDL Empty, a type which has no inhabitants. - * Since no values exist for this type, it cannot be serialised or deserialised. - * Result types like `Result` should always succeed. - */ -export class EmptyClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitEmpty(this, d); - } - - public covariant(x: any): x is never { - return false; - } - - public encodeValue(): never { - throw new Error('Empty cannot appear as a function argument'); - } - - public valueToString(): never { - throw new Error('Empty cannot appear as a value'); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Empty); - } - - public decodeValue(): never { - throw new Error('Empty cannot appear as an output'); - } - - get name() { - return 'empty'; - } -} - -/** - * Represents an IDL Bool - */ -export class BoolClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitBool(this, d); - } - - public covariant(x: any): x is boolean { - return typeof x === 'boolean'; - } - - public encodeValue(x: boolean): Buffer { - const buf = Buffer.alloc(1); - buf.writeInt8(x ? 1 : 0, 0); - return buf; - } - - public encodeType() { - return slebEncode(IDLTypeIds.Bool); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - const x = safeRead(b, 1).toString('hex'); - if (x === '00') { - return false; - } else if (x === '01') { - return true; - } else { - throw new Error('Boolean value out of range'); - } - } - - get name() { - return 'bool'; - } -} - -/** - * Represents an IDL Null - */ -export class NullClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitNull(this, d); - } - - public covariant(x: any): x is null { - return x === null; - } - - public encodeValue() { - return Buffer.alloc(0); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Null); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - return null; - } - - get name() { - return 'null'; - } -} - -/** - * Represents an IDL Reserved - */ -export class ReservedClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitReserved(this, d); - } - - public covariant(x: any): x is any { - return true; - } - - public encodeValue() { - return Buffer.alloc(0); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Reserved); - } - - public decodeValue(b: Pipe, t: Type) { - if (t.name !== this.name) { - t.decodeValue(b, t); - } - return null; - } - - get name() { - return 'reserved'; - } -} - -function isValidUTF8(buf: Buffer): boolean { - return Buffer.compare(new Buffer(buf.toString(), 'utf8'), buf) === 0; -} - -/** - * Represents an IDL Text - */ -export class TextClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitText(this, d); - } - - public covariant(x: any): x is string { - return typeof x === 'string'; - } - - public encodeValue(x: string) { - const buf = Buffer.from(x, 'utf8'); - const len = lebEncode(buf.length); - return Buffer.concat([len, buf]); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Text); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - const len = lebDecode(b).toNumber(); - const buf = safeRead(b, len); - if (!isValidUTF8(buf)) { - throw new Error('Not valid UTF8 text'); - } - return buf.toString('utf8'); - } - - get name() { - return 'text'; - } - - public valueToString(x: string) { - return '"' + x + '"'; - } -} - -/** - * Represents an IDL Int - */ -export class IntClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitInt(this, d); - } - - public covariant(x: any): x is BigNumber { - // We allow encoding of JavaScript plain numbers. - // But we will always decode to BigNumber. - return (BigNumber.isBigNumber(x) && x.isInteger()) || Number.isInteger(x); - } - - public encodeValue(x: BigNumber | number) { - return slebEncode(x); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Int); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - return slebDecode(b); - } - - get name() { - return 'int'; - } - - public valueToString(x: BigNumber) { - return x.toFixed(); - } -} - -/** - * Represents an IDL Nat - */ -export class NatClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitNat(this, d); - } - - public covariant(x: any): x is BigNumber { - // We allow encoding of JavaScript plain numbers. - // But we will always decode to BigNumber. - return ( - (BigNumber.isBigNumber(x) && x.isInteger() && !x.isNegative()) || - (Number.isInteger(x) && x >= 0) - ); - } - - public encodeValue(x: BigNumber | number) { - return lebEncode(x); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Nat); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - return lebDecode(b); - } - - get name() { - return 'nat'; - } - - public valueToString(x: BigNumber) { - return x.toFixed(); - } -} - -/** - * Represents an IDL Float - */ -export class FloatClass extends PrimitiveType { - constructor(private _bits: number) { - super(); - if (_bits !== 32 && _bits !== 64) { - throw new Error('not a valid float type'); - } - } - public accept(v: Visitor, d: D): R { - return v.visitFloat(this, d); - } - - public covariant(x: any): x is number { - return typeof x === 'number' || x instanceof Number; - } - - public encodeValue(x: number) { - const buf = Buffer.allocUnsafe(this._bits / 8); - if (this._bits === 32) { - buf.writeFloatLE(x, 0); - } else { - buf.writeDoubleLE(x, 0); - } - return buf; - } - - public encodeType() { - const opcode = this._bits === 32 ? IDLTypeIds.Float32 : IDLTypeIds.Float64; - return slebEncode(opcode); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - const x = safeRead(b, this._bits / 8); - if (this._bits === 32) { - return x.readFloatLE(0); - } else { - return x.readDoubleLE(0); - } - } - - get name() { - return 'float' + this._bits; - } - - public valueToString(x: number) { - return x.toString(); - } -} - -/** - * Represents an IDL fixed-width Int(n) - */ -export class FixedIntClass extends PrimitiveType { - constructor(private _bits: number) { - super(); - } - - public accept(v: Visitor, d: D): R { - return v.visitFixedInt(this, d); - } - - public covariant(x: any): x is BigNumber { - const min = new BigNumber(2).pow(this._bits - 1).negated(); - const max = new BigNumber(2).pow(this._bits - 1).minus(1); - if (BigNumber.isBigNumber(x) && x.isInteger()) { - return x.gte(min) && x.lte(max); - } else if (Number.isInteger(x)) { - const v = new BigNumber(x); - return v.gte(min) && v.lte(max); - } else { - return false; - } - } - - public encodeValue(x: BigNumber | number) { - return writeIntLE(x, this._bits / 8); - } - - public encodeType() { - const offset = Math.log2(this._bits) - 3; - return slebEncode(-9 - offset); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - const num = readIntLE(b, this._bits / 8); - if (this._bits <= 32) { - return num.toNumber(); - } else { - return num; - } - } - - get name() { - return `int${this._bits}`; - } - - public valueToString(x: BigNumber | number) { - return x.toString(); - } -} - -/** - * Represents an IDL fixed-width Nat(n) - */ -export class FixedNatClass extends PrimitiveType { - constructor(private _bits: number) { - super(); - } - - public accept(v: Visitor, d: D): R { - return v.visitFixedNat(this, d); - } - - public covariant(x: any): x is BigNumber { - const max = new BigNumber(2).pow(this._bits); - if (BigNumber.isBigNumber(x) && x.isInteger() && !x.isNegative()) { - return x.lt(max); - } else if (Number.isInteger(x) && x >= 0) { - const v = new BigNumber(x); - return v.lt(max); - } else { - return false; - } - } - - public encodeValue(x: BigNumber | number) { - return writeUIntLE(x, this._bits / 8); - } - - public encodeType() { - const offset = Math.log2(this._bits) - 3; - return slebEncode(-5 - offset); - } - - public decodeValue(b: Pipe, t: Type) { - this.checkType(t); - const num = readUIntLE(b, this._bits / 8); - if (this._bits <= 32) { - return num.toNumber(); - } else { - return num; - } - } - - get name() { - return `nat${this._bits}`; - } - - public valueToString(x: BigNumber | number) { - return x.toString(); - } -} - -/** - * Represents an IDL Array - * @param {Type} t - */ -export class VecClass extends ConstructType { - constructor(protected _type: Type) { - super(); - } - - public accept(v: Visitor, d: D): R { - return v.visitVec(this, this._type, d); - } - - public covariant(x: any): x is T[] { - return Array.isArray(x) && x.every(v => this._type.covariant(v)); - } - - public encodeValue(x: T[]) { - const len = lebEncode(x.length); - return Buffer.concat([len, ...x.map(d => this._type.encodeValue(d))]); - } - - public _buildTypeTableImpl(typeTable: TypeTable) { - this._type.buildTypeTable(typeTable); - - const opCode = slebEncode(IDLTypeIds.Vector); - const buffer = this._type.encodeType(typeTable); - typeTable.add(this, Buffer.concat([opCode, buffer])); - } - - public decodeValue(b: Pipe, t: Type): any[] { - const vec = this.checkType(t); - if (!(vec instanceof VecClass)) { - throw new Error('Not a vector type'); - } - const len = lebDecode(b).toNumber(); - const rets: any[] = []; - for (let i = 0; i < len; i++) { - rets.push(this._type.decodeValue(b, vec._type)); - } - return rets; - } - - get name() { - return `vec ${this._type.name}`; - } - - public display() { - return `vec ${this._type.display()}`; - } - - public valueToString(x: T[]) { - const elements = x.map(e => this._type.valueToString(e)); - return 'vec {' + elements.join('; ') + '}'; - } -} - -/** - * Represents an IDL Option - * @param {Type} t - */ -export class OptClass extends ConstructType<[T] | []> { - constructor(protected _type: Type) { - super(); - } - - public accept(v: Visitor, d: D): R { - return v.visitOpt(this, this._type, d); - } - - public covariant(x: any): x is [T] | [] { - return Array.isArray(x) && (x.length === 0 || (x.length === 1 && this._type.covariant(x[0]))); - } - - public encodeValue(x: [T] | []) { - if (x.length === 0) { - return Buffer.from([0]); - } else { - return Buffer.concat([Buffer.from([1]), this._type.encodeValue(x[0])]); - } - } - - public _buildTypeTableImpl(typeTable: TypeTable) { - this._type.buildTypeTable(typeTable); - - const opCode = slebEncode(IDLTypeIds.Opt); - const buffer = this._type.encodeType(typeTable); - typeTable.add(this, Buffer.concat([opCode, buffer])); - } - - public decodeValue(b: Pipe, t: Type): [T] | [] { - const opt = this.checkType(t); - if (!(opt instanceof OptClass)) { - throw new Error('Not an option type'); - } - const len = safeRead(b, 1).toString('hex'); - if (len === '00') { - return []; - } else if (len === '01') { - return [this._type.decodeValue(b, opt._type)]; - } else { - throw new Error('Not an option value'); - } - } - - get name() { - return `opt ${this._type.name}`; - } - - public display() { - return `opt ${this._type.display()}`; - } - - public valueToString(x: [T] | []) { - if (x.length === 0) { - return 'null'; - } else { - return `opt ${this._type.valueToString(x[0])}`; - } - } -} - -/** - * Represents an IDL Record - * @param {Object} [fields] - mapping of function name to Type - */ -export class RecordClass extends ConstructType> { - protected readonly _fields: Array<[string, Type]>; - - constructor(fields: Record = {}) { - super(); - this._fields = Object.entries(fields).sort((a, b) => idlLabelToId(a[0]) - idlLabelToId(b[0])); - } - - public accept(v: Visitor, d: D): R { - return v.visitRecord(this, this._fields, d); - } - - public tryAsTuple(): Type[] | null { - const res: Type[] = []; - for (let i = 0; i < this._fields.length; i++) { - const [key, type] = this._fields[i]; - if (key !== `_${i}_`) { - return null; - } - res.push(type); - } - return res; - } - - public covariant(x: any): x is Record { - return ( - typeof x === 'object' && - this._fields.every(([k, t]) => { - if (!x.hasOwnProperty(k)) { - throw new Error(`Record is missing key "${k}".`); - } - return t.covariant(x[k]); - }) - ); - } - - public encodeValue(x: Record) { - const values = this._fields.map(([key]) => x[key]); - const bufs = zipWith(this._fields, values, ([, c], d) => c.encodeValue(d)); - return Buffer.concat(bufs); - } - - public _buildTypeTableImpl(T: TypeTable) { - this._fields.forEach(([_, value]) => value.buildTypeTable(T)); - const opCode = slebEncode(IDLTypeIds.Record); - const len = lebEncode(this._fields.length); - const fields = this._fields.map(([key, value]) => - Buffer.concat([lebEncode(idlLabelToId(key)), value.encodeType(T)]), - ); - - T.add(this, Buffer.concat([opCode, len, Buffer.concat(fields)])); - } - - public decodeValue(b: Pipe, t: Type) { - const record = this.checkType(t); - if (!(record instanceof RecordClass)) { - throw new Error('Not a record type'); - } - const x: Record = {}; - let idx = 0; - for (const [hash, type] of record._fields) { - if (idx >= this._fields.length || idlLabelToId(this._fields[idx][0]) !== idlLabelToId(hash)) { - // skip field - type.decodeValue(b, type); - continue; - } - const [expectKey, expectType] = this._fields[idx]; - x[expectKey] = expectType.decodeValue(b, type); - idx++; - } - if (idx < this._fields.length) { - throw new Error('Cannot find field ' + this._fields[idx][0]); - } - return x; - } - - get name() { - const fields = this._fields.map(([key, value]) => key + ':' + value.name); - return `record {${fields.join('; ')}}`; - } - - public display() { - const fields = this._fields.map(([key, value]) => key + ':' + value.display()); - return `record {${fields.join('; ')}}`; - } - - public valueToString(x: Record) { - const values = this._fields.map(([key]) => x[key]); - const fields = zipWith(this._fields, values, ([k, c], d) => k + '=' + c.valueToString(d)); - return `record {${fields.join('; ')}}`; - } -} - -/** - * Represents Tuple, a syntactic sugar for Record. - * @param {Type} components - */ -export class TupleClass extends RecordClass { - protected readonly _components: Type[]; - - constructor(_components: Type[]) { - const x: Record = {}; - _components.forEach((e, i) => (x['_' + i + '_'] = e)); - super(x); - this._components = _components; - } - - public accept(v: Visitor, d: D): R { - return v.visitTuple(this, this._components, d); - } - - public covariant(x: any): x is T { - // `>=` because tuples can be covariant when encoded. - return ( - Array.isArray(x) && - x.length >= this._fields.length && - this._components.every((t, i) => t.covariant(x[i])) - ); - } - - public encodeValue(x: any[]) { - const bufs = zipWith(this._components, x, (c, d) => c.encodeValue(d)); - return Buffer.concat(bufs); - } - - public decodeValue(b: Pipe, t: Type): T { - const tuple = this.checkType(t); - if (!(tuple instanceof TupleClass)) { - throw new Error('not a tuple type'); - } - if (tuple._components.length < this._components.length) { - throw new Error('tuple mismatch'); - } - const res = []; - for (const [i, wireType] of tuple._components.entries()) { - if (i >= this._components.length) { - // skip value - wireType.decodeValue(b, wireType); - } else { - res.push(this._components[i].decodeValue(b, wireType)); - } - } - return res as T; - } - - public display() { - const fields = this._components.map(value => value.display()); - return `record {${fields.join('; ')}}`; - } - - public valueToString(values: any[]) { - const fields = zipWith(this._components, values, (c, d) => c.valueToString(d)); - return `record {${fields.join('; ')}}`; - } -} - -/** - * Represents an IDL Variant - * @param {Object} [fields] - mapping of function name to Type - */ -export class VariantClass extends ConstructType> { - private readonly _fields: Array<[string, Type]>; - - constructor(fields: Record = {}) { - super(); - this._fields = Object.entries(fields).sort((a, b) => idlLabelToId(a[0]) - idlLabelToId(b[0])); - } - - public accept(v: Visitor, d: D): R { - return v.visitVariant(this, this._fields, d); - } - - public covariant(x: any): x is Record { - return ( - typeof x === 'object' && - Object.entries(x).length === 1 && - this._fields.every(([k, v]) => { - return !x.hasOwnProperty(k) || v.covariant(x[k]); - }) - ); - } - - public encodeValue(x: Record) { - for (let i = 0; i < this._fields.length; i++) { - const [name, type] = this._fields[i]; - if (x.hasOwnProperty(name)) { - const idx = lebEncode(i); - const buf = type.encodeValue(x[name]); - - return Buffer.concat([idx, buf]); - } - } - throw Error('Variant has no data: ' + x); - } - - public _buildTypeTableImpl(typeTable: TypeTable) { - this._fields.forEach(([, type]) => { - type.buildTypeTable(typeTable); - }); - const opCode = slebEncode(IDLTypeIds.Variant); - const len = lebEncode(this._fields.length); - const fields = this._fields.map(([key, value]) => - Buffer.concat([lebEncode(idlLabelToId(key)), value.encodeType(typeTable)]), - ); - typeTable.add(this, Buffer.concat([opCode, len, ...fields])); - } - - public decodeValue(b: Pipe, t: Type) { - const variant = this.checkType(t); - if (!(variant instanceof VariantClass)) { - throw new Error('Not a variant type'); - } - const idx = lebDecode(b).toNumber(); - if (idx >= variant._fields.length) { - throw Error('Invalid variant index: ' + idx); - } - const [wireHash, wireType] = variant._fields[idx]; - for (const [key, expectType] of this._fields) { - if (idlLabelToId(wireHash) === idlLabelToId(key)) { - const value = expectType.decodeValue(b, wireType); - return { [key]: value }; - } - } - throw new Error('Cannot find field hash ' + wireHash); - } - - get name() { - const fields = this._fields.map(([key, type]) => key + ':' + type.name); - return `variant {${fields.join('; ')}}`; - } - - public display() { - const fields = this._fields.map( - ([key, type]) => key + (type.name === 'null' ? '' : `:${type.display()}`), - ); - return `variant {${fields.join('; ')}}`; - } - - public valueToString(x: Record) { - for (const [name, type] of this._fields) { - if (x.hasOwnProperty(name)) { - const value = type.valueToString(x[name]); - if (value === 'null') { - return `variant {${name}}`; - } else { - return `variant {${name}=${value}}`; - } - } - } - throw new Error('Variant has no data: ' + x); - } -} - -/** - * Represents a reference to an IDL type, used for defining recursive data - * types. - */ -export class RecClass extends ConstructType { - private static _counter = 0; - private _id = RecClass._counter++; - private _type: ConstructType | undefined = undefined; - - public accept(v: Visitor, d: D): R { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - return v.visitRec(this, this._type, d); - } - - public fill(t: ConstructType) { - this._type = t; - } - - public getType() { - return this._type; - } - - public covariant(x: any): x is T { - return this._type ? this._type.covariant(x) : false; - } - - public encodeValue(x: T) { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - return this._type.encodeValue(x); - } - - public _buildTypeTableImpl(typeTable: TypeTable) { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - typeTable.add(this, Buffer.alloc(0)); - this._type.buildTypeTable(typeTable); - typeTable.merge(this, this._type.name); - } - - public decodeValue(b: Pipe, t: Type) { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - return this._type.decodeValue(b, t); - } - - get name() { - return `rec_${this._id}`; - } - - public display() { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - return `μ${this.name}.${this._type.name}`; - } - - public valueToString(x: T) { - if (!this._type) { - throw Error('Recursive type uninitialized.'); - } - return this._type.valueToString(x); - } -} - -function decodePrincipalId(b: Pipe): PrincipalId { - const x = safeRead(b, 1).toString('hex'); - if (x !== '01') { - throw new Error('Cannot decode principal'); - } - const len = lebDecode(b).toNumber(); - const hex = safeRead(b, len).toString('hex').toUpperCase(); - return PrincipalId.fromHex(hex); -} - -/** - * Represents an IDL principal reference - */ -export class PrincipalClass extends PrimitiveType { - public accept(v: Visitor, d: D): R { - return v.visitPrincipal(this, d); - } - - public covariant(x: any): x is PrincipalId { - return x && x._isPrincipal; - } - - public encodeValue(x: PrincipalId): Buffer { - const hex = x.toHex(); - const buf = Buffer.from(hex, 'hex'); - const len = lebEncode(buf.length); - return Buffer.concat([Buffer.from([1]), len, buf]); - } - - public encodeType() { - return slebEncode(IDLTypeIds.Principal); - } - - public decodeValue(b: Pipe, t: Type): PrincipalId { - this.checkType(t); - return decodePrincipalId(b); - } - - get name() { - return 'principal'; - } - public valueToString(x: PrincipalId) { - return `${this.name} "${x.toText()}"`; - } -} - -/** - * Represents an IDL function reference. - * @param argTypes Argument types. - * @param retTypes Return types. - * @param annotations Function annotations. - */ -export class FuncClass extends ConstructType<[PrincipalId, string]> { - public static argsToString(types: Type[], v: any[]) { - if (types.length !== v.length) { - throw new Error('arity mismatch'); - } - return '(' + types.map((t, i) => t.valueToString(v[i])).join(', ') + ')'; - } - - constructor(public argTypes: Type[], public retTypes: Type[], public annotations: string[] = []) { - super(); - } - - public accept(v: Visitor, d: D): R { - return v.visitFunc(this, d); - } - public covariant(x: any): x is [PrincipalId, string] { - return ( - Array.isArray(x) && x.length === 2 && x[0] && x[0]._isPrincipal && typeof x[1] === 'string' - ); - } - - public encodeValue(x: [PrincipalId, string]): Buffer { - const hex = x[0].toHex(); - const buf = Buffer.from(hex, 'hex'); - const len = lebEncode(buf.length); - const canister = Buffer.concat([Buffer.from([1]), len, buf]); - - const method = Buffer.from(x[1], 'utf8'); - const methodLen = lebEncode(method.length); - return Buffer.concat([Buffer.from([1]), canister, methodLen, method]); - } - - public _buildTypeTableImpl(T: TypeTable) { - this.argTypes.forEach(arg => arg.buildTypeTable(T)); - this.retTypes.forEach(arg => arg.buildTypeTable(T)); - - const opCode = slebEncode(IDLTypeIds.Func); - const argLen = lebEncode(this.argTypes.length); - const args = Buffer.concat(this.argTypes.map(arg => arg.encodeType(T))); - const retLen = lebEncode(this.retTypes.length); - const rets = Buffer.concat(this.retTypes.map(arg => arg.encodeType(T))); - const annLen = lebEncode(this.annotations.length); - const anns = Buffer.concat(this.annotations.map(a => this.encodeAnnotation(a))); - - T.add(this, Buffer.concat([opCode, argLen, args, retLen, rets, annLen, anns])); - } - - public decodeValue(b: Pipe): [PrincipalId, string] { - const x = safeRead(b, 1).toString('hex'); - if (x !== '01') { - throw new Error('Cannot decode function reference'); - } - const canister = decodePrincipalId(b); - - const mLen = lebDecode(b).toNumber(); - const buf = safeRead(b, mLen); - if (!isValidUTF8(buf)) { - throw new Error('Not valid UTF8 method name'); - } - const method = buf.toString('utf8'); - return [canister, method]; - } - - get name() { - const args = this.argTypes.map(arg => arg.name).join(', '); - const rets = this.retTypes.map(arg => arg.name).join(', '); - const annon = ' ' + this.annotations.join(' '); - return `(${args}) -> (${rets})${annon}`; - } - - public valueToString([principal, str]: [PrincipalId, string]) { - return `func "${principal.toText()}".${str}`; - } - - public display(): string { - const args = this.argTypes.map(arg => arg.display()).join(', '); - const rets = this.retTypes.map(arg => arg.display()).join(', '); - const annon = ' ' + this.annotations.join(' '); - return `(${args}) → (${rets})${annon}`; - } - - private encodeAnnotation(ann: string): Buffer { - if (ann === 'query') { - return Buffer.from([1]); - } else if (ann === 'oneway') { - return Buffer.from([2]); - } else { - throw new Error('Illeagal function annotation'); - } - } -} - -export class ServiceClass extends ConstructType { - public readonly _fields: Array<[string, FuncClass]>; - constructor(fields: Record) { - super(); - this._fields = Object.entries(fields).sort((a, b) => idlLabelToId(a[0]) - idlLabelToId(b[0])); - } - public accept(v: Visitor, d: D): R { - return v.visitService(this, d); - } - public covariant(x: any): x is PrincipalId { - return x && x._isPrincipal; - } - - public encodeValue(x: PrincipalId): Buffer { - const hex = x.toHex(); - const buf = Buffer.from(hex, 'hex'); - const len = lebEncode(buf.length); - return Buffer.concat([Buffer.from([1]), len, buf]); - } - - public _buildTypeTableImpl(T: TypeTable) { - this._fields.forEach(([_, func]) => func.buildTypeTable(T)); - const opCode = slebEncode(IDLTypeIds.Service); - const len = lebEncode(this._fields.length); - const meths = this._fields.map(([label, func]) => { - const labelBuf = Buffer.from(label, 'utf8'); - const labelLen = lebEncode(labelBuf.length); - return Buffer.concat([labelLen, labelBuf, func.encodeType(T)]); - }); - - T.add(this, Buffer.concat([opCode, len, Buffer.concat(meths)])); - } - - public decodeValue(b: Pipe): PrincipalId { - return decodePrincipalId(b); - } - get name() { - const fields = this._fields.map(([key, value]) => key + ':' + value.name); - return `service {${fields.join('; ')}}`; - } - - public valueToString(x: PrincipalId) { - return `service "${x.toText()}"`; - } -} - -/** - * Encode a array of values - * @returns {Buffer} serialised value - */ -export function encode(argTypes: Array>, args: any[]) { - if (args.length < argTypes.length) { - throw Error('Wrong number of message arguments'); - } - - const typeTable = new TypeTable(); - argTypes.forEach(t => t.buildTypeTable(typeTable)); - - const magic = Buffer.from(magicNumber, 'utf8'); - const table = typeTable.encode(); - const len = lebEncode(args.length); - const typs = Buffer.concat(argTypes.map(t => t.encodeType(typeTable))); - const vals = Buffer.concat( - zipWith(argTypes, args, (t, x) => { - if (!t.covariant(x)) { - throw new Error(`Invalid ${t.display()} argument: "${JSON.stringify(x)}"`); - } - - return t.encodeValue(x); - }), - ); - - return Buffer.concat([magic, table, len, typs, vals]); -} - -/** - * Decode a binary value - * @param retTypes - Types expected in the buffer. - * @param bytes - hex-encoded string, or buffer. - * @returns Value deserialised to JS type - */ -export function decode(retTypes: Type[], bytes: Buffer): JsonValue[] { - const b = new Pipe(bytes); - - if (bytes.byteLength < magicNumber.length) { - throw new Error('Message length smaller than magic number'); - } - const magic = safeRead(b, magicNumber.length).toString(); - if (magic !== magicNumber) { - throw new Error('Wrong magic number: ' + magic); - } - - function readTypeTable(pipe: Pipe): [Array<[IDLTypeIds, any]>, number[]] { - const typeTable: Array<[IDLTypeIds, any]> = []; - const len = lebDecode(pipe).toNumber(); - - for (let i = 0; i < len; i++) { - const ty = slebDecode(pipe).toNumber(); - switch (ty) { - case IDLTypeIds.Opt: - case IDLTypeIds.Vector: { - const t = slebDecode(pipe).toNumber(); - typeTable.push([ty, t]); - break; - } - case IDLTypeIds.Record: - case IDLTypeIds.Variant: { - const fields = []; - let objectLength = lebDecode(pipe).toNumber(); - let prevHash; - while (objectLength--) { - const hash = lebDecode(pipe).toNumber(); - if (hash >= Math.pow(2, 32)) { - throw new Error('field id out of 32-bit range'); - } - if (typeof prevHash === 'number' && prevHash >= hash) { - throw new Error('field id collision or not sorted'); - } - prevHash = hash; - const t = slebDecode(pipe).toNumber(); - fields.push([hash, t]); - } - typeTable.push([ty, fields]); - break; - } - case IDLTypeIds.Func: { - for (let k = 0; k < 2; k++) { - let funcLength = lebDecode(pipe).toNumber(); - while (funcLength--) { - slebDecode(pipe); - } - } - const annLen = lebDecode(pipe).toNumber(); - safeRead(pipe, annLen); - typeTable.push([ty, undefined]); - break; - } - case IDLTypeIds.Service: { - let servLength = lebDecode(pipe).toNumber(); - while (servLength--) { - const l = lebDecode(pipe).toNumber(); - safeRead(pipe, l); - slebDecode(pipe); - } - typeTable.push([ty, undefined]); - break; - } - default: - throw new Error('Illegal op_code: ' + ty); - } - } - - const rawList: number[] = []; - const length = lebDecode(pipe).toNumber(); - for (let i = 0; i < length; i++) { - rawList.push(slebDecode(pipe).toNumber()); - } - return [typeTable, rawList]; - } - const [rawTable, rawTypes] = readTypeTable(b); - if (rawTypes.length < retTypes.length) { - throw new Error('Wrong number of return values'); - } - - const table: RecClass[] = rawTable.map(_ => Rec()); - function getType(t: number): Type { - if (t < -24) { - throw new Error('future value not supported'); - } - if (t < 0) { - switch (t) { - case -1: - return Null; - case -2: - return Bool; - case -3: - return Nat; - case -4: - return Int; - case -5: - return Nat8; - case -6: - return Nat16; - case -7: - return Nat32; - case -8: - return Nat64; - case -9: - return Int8; - case -10: - return Int16; - case -11: - return Int32; - case -12: - return Int64; - case -13: - return Float32; - case -14: - return Float64; - case -15: - return Text; - case -16: - return Reserved; - case -17: - return Empty; - case -24: - return Principal; - default: - throw new Error('Illegal op_code: ' + t); - } - } - if (t >= rawTable.length) { - throw new Error('type index out of range'); - } - return table[t]; - } - function buildType(entry: [IDLTypeIds, any]): Type { - switch (entry[0]) { - case IDLTypeIds.Vector: { - const ty = getType(entry[1]); - return Vec(ty); - } - case IDLTypeIds.Opt: { - const ty = getType(entry[1]); - return Opt(ty); - } - case IDLTypeIds.Record: { - const fields: Record = {}; - for (const [hash, ty] of entry[1]) { - const name = `_${hash}_`; - fields[name] = getType(ty); - } - const record = Record(fields); - const tuple = record.tryAsTuple(); - if (Array.isArray(tuple)) { - return Tuple(...tuple); - } else { - return record; - } - } - case IDLTypeIds.Variant: { - const fields: Record = {}; - for (const [hash, ty] of entry[1]) { - const name = `_${hash}_`; - fields[name] = getType(ty); - } - return Variant(fields); - } - case IDLTypeIds.Func: { - return Func([], [], []); - } - case IDLTypeIds.Service: { - return Service({}); - } - default: - throw new Error('Illegal op_code: ' + entry[0]); - } - } - rawTable.forEach((entry, i) => { - const t = buildType(entry); - table[i].fill(t); - }); - - const types = rawTypes.map(t => getType(t)); - const output = retTypes.map((t, i) => { - return t.decodeValue(b, types[i]); - }); - - // skip unused values - for (let ind = retTypes.length; ind < types.length; ind++) { - types[ind].decodeValue(b, types[ind]); - } - - if (b.buffer.length > 0) { - throw new Error('decode: Left-over bytes'); - } - - return output; -} - -/** - * An Interface Factory, normally provided by a Candid code generation. - */ -export type InterfaceFactory = (idl: { - IDL: { - Empty: EmptyClass; - Reserved: ReservedClass; - Bool: BoolClass; - Null: NullClass; - Text: TextClass; - Int: IntClass; - Nat: NatClass; - - Float32: FloatClass; - Float64: FloatClass; - - Int8: FixedIntClass; - Int16: FixedIntClass; - Int32: FixedIntClass; - Int64: FixedIntClass; - - Nat8: FixedNatClass; - Nat16: FixedNatClass; - Nat32: FixedNatClass; - Nat64: FixedNatClass; - - Principal: PrincipalClass; - - Tuple: typeof Tuple; - Vec: typeof Vec; - Opt: typeof Opt; - Record: typeof Record; - Variant: typeof Variant; - Rec: typeof Rec; - Func: typeof Func; - - Service(t: Record): ServiceClass; - }; -}) => ServiceClass; - -// Export Types instances. -export const Empty = new EmptyClass(); -export const Reserved = new ReservedClass(); -export const Bool = new BoolClass(); -export const Null = new NullClass(); -export const Text = new TextClass(); -export const Int = new IntClass(); -export const Nat = new NatClass(); - -export const Float32 = new FloatClass(32); -export const Float64 = new FloatClass(64); - -export const Int8 = new FixedIntClass(8); -export const Int16 = new FixedIntClass(16); -export const Int32 = new FixedIntClass(32); -export const Int64 = new FixedIntClass(64); - -export const Nat8 = new FixedNatClass(8); -export const Nat16 = new FixedNatClass(16); -export const Nat32 = new FixedNatClass(32); -export const Nat64 = new FixedNatClass(64); - -export const Principal = new PrincipalClass(); - -export function Tuple(...types: T): TupleClass { - return new TupleClass(types); -} -export function Vec(t: Type): VecClass { - return new VecClass(t); -} -export function Opt(t: Type): OptClass { - return new OptClass(t); -} - -export function Record(t: Record): RecordClass { - return new RecordClass(t); -} -export function Variant(fields: Record) { - return new VariantClass(fields); -} -export function Rec() { - return new RecClass(); -} - -export function Func(args: Type[], ret: Type[], annotations: string[] = []) { - return new FuncClass(args, ret, annotations); -} - -export function Service(t: Record): ServiceClass { - return new ServiceClass(t); -} diff --git a/src/agent/javascript/src/index.ts b/src/agent/javascript/src/index.ts deleted file mode 100644 index 3c6168504b..0000000000 --- a/src/agent/javascript/src/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -export * from './actor'; -export * from './agent'; -export { - KeyPair, - SenderPubKey, - SenderSecretKey, - SenderSig, - generateKeyPair, - makeAuthTransform, - makeKeyPair, -} from './auth'; -export * from './http_agent_transforms'; -export * from './http_agent_types'; -export * from './principal'; -export * from './types'; -export * from './canisters/asset'; -export * from './canisters/management'; -export * from './candid'; - -import { Agent, HttpAgent } from './agent'; -import * as IDL from './idl'; -export { IDL }; - -// TODO The following modules will be a separate library for Candid -import * as UICore from './candid/candid-core'; -import * as UI from './candid/candid-ui'; -export { UICore, UI }; - -export interface GlobalInternetComputer { - ic: { - agent: Agent; - HttpAgent: typeof HttpAgent; - IDL: typeof IDL; - }; -} diff --git a/src/agent/javascript/src/principal.ts b/src/agent/javascript/src/principal.ts deleted file mode 100644 index 14568c0f26..0000000000 --- a/src/agent/javascript/src/principal.ts +++ /dev/null @@ -1,68 +0,0 @@ -import base32 from 'base32.js'; -import { SenderPubKey } from './auth'; -import { BinaryBlob, blobFromHex, blobFromUint8Array, blobToHex } from './types'; -import { getCrc32 } from './utils/getCrc'; -import { sha224 } from './utils/sha224'; - -const SELF_AUTHENTICATING_SUFFIX = 2; - -export class Principal { - public static selfAuthenticating(publicKey: SenderPubKey): Principal { - const sha = sha224(publicKey); - return new this(blobFromUint8Array(new Uint8Array([...sha, 2]))); - } - - public static fromHex(hex: string): Principal { - return new this(blobFromHex(hex)); - } - - public static fromText(text: string): Principal { - const canisterIdNoDash = text.toLowerCase().replace(/-/g, ''); - - const decoder = new base32.Decoder({ type: 'rfc4648', lc: false }); - const result = decoder.write(canisterIdNoDash).finalize(); - let arr = new Uint8Array(result); - arr = arr.slice(4, arr.length); - - return new this(blobFromUint8Array(arr)); - } - - public static fromBlob(blob: BinaryBlob): Principal { - return new this(blob); - } - - public readonly _isPrincipal = true; - - protected constructor(private _blob: BinaryBlob) {} - - public toBlob(): BinaryBlob { - return this._blob; - } - - public toHash() { - return this._blob; - } - - public toHex(): string { - return blobToHex(this._blob).toUpperCase(); - } - - public toText(): string { - const checksumArrayBuf = new ArrayBuffer(4); - const view = new DataView(checksumArrayBuf); - view.setUint32(0, getCrc32(this.toHex().toLowerCase()), false); - const checksum = Uint8Array.from(Buffer.from(checksumArrayBuf)); - - const bytes = Uint8Array.from(this._blob); - const array = new Uint8Array([...checksum, ...bytes]); - - const encoder = new base32.Encoder({ type: 'rfc4648', lc: false }); - const result = encoder.write(array).finalize().toLowerCase(); - const matches = result.match(/.{1,5}/g); - return matches ? matches.join('-') : ''; - } - - public toString() { - return this.toText(); - } -} diff --git a/src/agent/javascript/src/reject_code.ts b/src/agent/javascript/src/reject_code.ts deleted file mode 100644 index 9a6044d31f..0000000000 --- a/src/agent/javascript/src/reject_code.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum RejectCode { - SysFatal = 1, - SysTransient = 2, - DestinationInvalid = 3, - CanisterReject = 4, - CanisterError = 5, -} diff --git a/src/agent/javascript/src/request_id.test.ts b/src/agent/javascript/src/request_id.test.ts deleted file mode 100644 index 6cbb382ffa..0000000000 --- a/src/agent/javascript/src/request_id.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -// tslint:disable-next-line: max-line-length -// https://github.com/dfinity-lab/dfinity/blob/5fef1450c9ab16ccf18381379149e504b11c8218/docs/spec/public/index.adoc#request-ids - -import { Buffer } from 'buffer/'; -import { SenderPubKey, SenderSig } from './auth'; -import { hash, requestIdOf } from './request_id'; -import { BinaryBlob, blobToHex } from './types'; - -const testHashOfBlob = async (input: BinaryBlob, expected: string) => { - const hashed = await hash(input); - const hex = blobToHex(hashed); - expect(hex).toBe(expected); -}; - -const testHashOfString = async (input: string, expected: string) => { - const encoded: Uint8Array = new TextEncoder().encode(input); - return testHashOfBlob(encoded as BinaryBlob, expected); -}; - -// This is based on the intermediate hashes of the request components from -// example in the spec. -test('hash', async () => { - await testHashOfString( - 'request_type', - '769e6f87bdda39c859642b74ce9763cdd37cb1cd672733e8c54efaa33ab78af9', - ); - await testHashOfString( - 'call', - '7edb360f06acaef2cc80dba16cf563f199d347db4443da04da0c8173e3f9e4ed', - ); - await testHashOfString( - 'callee', // The "canister_id" field was previously named "callee" - '92ca4c0ced628df1e7b9f336416ead190bd0348615b6f71a64b21d1b68d4e7e2', - ); - await testHashOfString( - 'canister_id', - '0a3eb2ba16702a387e6321066dd952db7a31f9b5cc92981e0a92dd56802d3df9', - ); - await testHashOfBlob( - Buffer.from([0, 0, 0, 0, 0, 0, 4, 210]) as BinaryBlob, - '4d8c47c3c1c837964011441882d745f7e92d10a40cef0520447c63029eafe396', - ); - await testHashOfString( - 'method_name', - '293536232cf9231c86002f4ee293176a0179c002daa9fc24be9bb51acdd642b6', - ); - await testHashOfString( - 'hello', - '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824', - ); - await testHashOfString('arg', 'b25f03dedd69be07f356a06fe35c1b0ddc0de77dcd9066c4be0c6bbde14b23ff'); - await testHashOfBlob( - Buffer.from([68, 73, 68, 76, 0, 253, 42]) as BinaryBlob, - '6c0b2ae49718f6995c02ac5700c9c789d7b7862a0d53e6d40a73f1fcd2f70189', - ); -}); - -// This is based on the example in the spec. -test('requestIdOf', async () => { - const request = { - request_type: 'call', - method_name: 'hello', - - // 0x00000000000004D2 - // \x00\x00\x00\x00\x00\x00\x04\xD2 - // 0 0 0 0 0 0 4 210 - canister_id: Buffer.from([0, 0, 0, 0, 0, 0, 4, 210]) as BinaryBlob, - - // DIDL\x00\xFD* - // D I D L \x00 \253 * - // 68 73 68 76 0 253 42 - arg: Buffer.from([68, 73, 68, 76, 0, 253, 42]) as BinaryBlob, - }; - - const requestId = await requestIdOf(request); - - expect(blobToHex(requestId)).toEqual( - '8781291c347db32a9d8c10eb62b710fce5a93be676474c42babc74c51858f94b', - ); -}); diff --git a/src/agent/javascript/src/request_id.ts b/src/agent/javascript/src/request_id.ts deleted file mode 100644 index deeec9b6da..0000000000 --- a/src/agent/javascript/src/request_id.ts +++ /dev/null @@ -1,76 +0,0 @@ -import borc from 'borc'; -import { Buffer } from 'buffer/'; -import { BinaryBlob, blobToHex } from './types'; -import { lebEncode } from './utils/leb128'; - -export type RequestId = BinaryBlob & { __requestId__: void }; -export function toHex(requestId: RequestId): string { - return blobToHex(requestId); -} - -export async function hash(data: BinaryBlob): Promise { - const hashed: ArrayBuffer = await crypto.subtle.digest( - { - name: 'SHA-256', - }, - data.buffer, - ); - return Buffer.from(hashed) as BinaryBlob; -} - -async function hashValue(value: unknown): Promise { - if (value instanceof borc.Tagged) { - return hashValue(value.value); - } else if (typeof value === 'string') { - return hashString(value); - } else if (typeof value === 'number') { - return hash(lebEncode(value) as BinaryBlob); - } else if (Buffer.isBuffer(value)) { - return hash(new Uint8Array(value) as BinaryBlob); - } else if (value instanceof Uint8Array || value instanceof ArrayBuffer) { - return hash(new Uint8Array(value) as BinaryBlob); - } else if ( - typeof value === 'object' && - value !== null && - typeof (value as any).toHash === 'function' - ) { - return Promise.resolve((value as any).toHash()).then(x => hashValue(x)); - } else if (value instanceof Promise) { - return value.then(x => hashValue(x)); - } else { - throw new Error(`Attempt to hash a value of unsupported type: ${value}`); - } -} - -const hashString = (value: string): Promise => { - const encoder = new TextEncoder(); - const encoded = encoder.encode(value); - return hash(Buffer.from(encoded) as BinaryBlob); -}; - -const concat = (bs: BinaryBlob[]): BinaryBlob => { - return bs.reduce((state: Uint8Array, b: BinaryBlob): Uint8Array => { - return new Uint8Array([...state, ...b]); - }, new Uint8Array()) as BinaryBlob; -}; - -export const requestIdOf = async (request: Record): Promise => { - const hashed: Array> = Object.entries(request).map( - async ([key, value]: [string, unknown]) => { - const hashedKey = await hashString(key); - const hashedValue = await hashValue(value); - - return [hashedKey, hashedValue] as [BinaryBlob, BinaryBlob]; - }, - ); - - const traversed: Array<[BinaryBlob, BinaryBlob]> = await Promise.all(hashed); - - const sorted: Array<[BinaryBlob, BinaryBlob]> = traversed.sort(([k1, v1], [k2, v2]) => { - return Buffer.compare(Buffer.from(k1), Buffer.from(k2)); - }); - - const concatenated: BinaryBlob = concat(sorted.map(concat)); - const requestId = (await hash(concatenated)) as RequestId; - return requestId; -}; diff --git a/src/agent/javascript/src/types.ts b/src/agent/javascript/src/types.ts deleted file mode 100644 index ad04cd7e09..0000000000 --- a/src/agent/javascript/src/types.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Buffer } from 'buffer/'; -import { lebEncode } from './utils/leb128'; - -export interface JsonArray extends Array {} -export interface JsonObject extends Record {} -export type JsonValue = boolean | string | number | JsonArray | JsonObject; - -// TODO -// Switch back to Uint8Array once hansl/simple-cbor provides deserialization - -// Named `BinaryBlob` as opposed to `Blob` so not to conflict with -// https://developer.mozilla.org/en-US/docs/Web/API/Blob -export type BinaryBlob = Buffer & { __BLOB: never }; - -export function blobFromUint8Array(arr: Uint8Array): BinaryBlob { - return Buffer.from(arr) as BinaryBlob; -} - -export function blobFromHex(hex: string): BinaryBlob { - return Buffer.from(hex, 'hex') as BinaryBlob; -} - -export function blobToHex(blob: BinaryBlob): string { - return blob.toString('hex'); -} - -// A Nonce that can be used for calls. -export type Nonce = BinaryBlob & { __nonce__: void }; - -export function makeNonce(): Nonce { - return lebEncode(+(+Date.now() + ('' + Math.random()).slice(2, 7))) as Nonce; -} diff --git a/src/agent/javascript/src/utils/getCrc.ts b/src/agent/javascript/src/utils/getCrc.ts deleted file mode 100644 index c31d6144a7..0000000000 --- a/src/agent/javascript/src/utils/getCrc.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { crc32 } from 'crc'; - -export function getCrc32(hex: string): number { - return crc32(Buffer.from(hex, 'hex')); -} diff --git a/src/agent/javascript/src/utils/hash.test.ts b/src/agent/javascript/src/utils/hash.test.ts deleted file mode 100644 index ab600dc2b8..0000000000 --- a/src/agent/javascript/src/utils/hash.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { idlLabelToId } from './hash'; - -test('IDL label', () => { - function testLabel(str: string, expected: number) { - expect(idlLabelToId(str)).toBe(expected); - } - - testLabel('', 0); - testLabel('id', 23515); - testLabel('description', 1595738364); - testLabel('short_name', 3261810734); - testLabel('Hi ☃', 1419229646); - testLabel('_0_', 0); - testLabel('_1_', 1); - testLabel('_+1_', 1055658234); - testLabel('_-1_', 1055757692); - testLabel('_123_', 123); - testLabel('_4294967295_', 4294967295); - testLabel('_4294967296_', 1569808370); - testLabel('_0xa_', 10); - testLabel('_0d_', 1055918252); - testLabel('_1.23_', 1360503298); - testLabel('_1e2_', 3552665568); - testLabel('_', 95); - testLabel('__', 21280); - testLabel('___', 4745535); -}); diff --git a/src/agent/javascript/src/utils/hash.ts b/src/agent/javascript/src/utils/hash.ts deleted file mode 100644 index f375cc08ff..0000000000 --- a/src/agent/javascript/src/utils/hash.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Hashes a string to a number. Algorithm can be found here: - * https://caml.inria.fr/pub/papers/garrigue-polymorphic_variants-ml98.pdf - * @param s - */ -function idlHash(s: string): number { - const utf8encoder = new TextEncoder(); - const array = utf8encoder.encode(s); - - let h = 0; - for (const c of array) { - h = (h * 223 + c) % 2 ** 32; - } - return h; -} - -export function idlLabelToId(label: string): number { - if (/^_\d+_$/.test(label) || /^_0x[0-9a-fA-F]+_$/.test(label)) { - const num = +label.slice(1, -1); - if (Number.isSafeInteger(num) && num >= 0 && num < 2 ** 32) { - return num; - } - } - return idlHash(label); -} diff --git a/src/agent/javascript/src/utils/leb128.test.ts b/src/agent/javascript/src/utils/leb128.test.ts deleted file mode 100644 index f3fdb9ce91..0000000000 --- a/src/agent/javascript/src/utils/leb128.test.ts +++ /dev/null @@ -1,73 +0,0 @@ -import BigNumber from 'bignumber.js'; -import Pipe = require('buffer-pipe'); -import { Buffer } from 'buffer/'; -import { - lebDecode, - lebEncode, - readIntLE, - readUIntLE, - slebDecode, - slebEncode, - writeIntLE, - writeUIntLE, -} from './leb128'; - -test('leb', () => { - expect(lebEncode(0).toString('hex')).toBe('00'); - expect(lebEncode(7).toString('hex')).toBe('07'); - expect(lebEncode(127).toString('hex')).toBe('7f'); - expect(() => lebEncode(-1).toString('hex')).toThrow(); - expect(lebEncode(1).toString('hex')).toBe('01'); - expect(lebEncode(624485).toString('hex')).toBe('e58e26'); - expect(lebEncode(new BigNumber('1234567890abcdef1234567890abcdef', 16)).toString('hex')).toBe( - 'ef9baf8589cf959a92deb7de8a929eabb424', - ); - expect(lebEncode(new BigNumber('2000000')).toString('hex')).toBe('80897a'); - expect(lebEncode(new BigNumber('60000000000000000')).toString('hex')).toBe('808098f4e9b5ca6a'); - - expect(lebDecode(new Pipe(Buffer.from([0]))).toNumber()).toBe(0); - expect(lebDecode(new Pipe(Buffer.from([1]))).toNumber()).toBe(1); - expect(lebDecode(new Pipe(Buffer.from([0xe5, 0x8e, 0x26]))).toNumber()).toBe(624485); - expect( - lebDecode(new Pipe(Buffer.from('ef9baf8589cf959a92deb7de8a929eabb424', 'hex'))).toString(16), - ).toBe('1234567890abcdef1234567890abcdef'); -}); - -test('sleb', () => { - expect(slebEncode(-1).toString('hex')).toBe('7f'); - expect(slebEncode(-123456).toString('hex')).toBe('c0bb78'); - expect(slebEncode(42).toString('hex')).toBe('2a'); - expect(slebEncode(new BigNumber('1234567890abcdef1234567890abcdef', 16)).toString('hex')).toBe( - 'ef9baf8589cf959a92deb7de8a929eabb424', - ); - expect( - slebEncode(new BigNumber('1234567890abcdef1234567890abcdef', 16).negated()).toString('hex'), - ).toBe('91e4d0faf6b0eae5eda1c8a1f5ede1d4cb5b'); - expect(slebEncode(new BigNumber('2000000')).toString('hex')).toBe('8089fa00'); - expect(slebEncode(new BigNumber('60000000000000000')).toString('hex')).toBe('808098f4e9b5caea00'); - - expect(slebDecode(new Pipe(Buffer.from([0x7f]))).toNumber()).toBe(-1); - expect(slebDecode(new Pipe(Buffer.from([0xc0, 0xbb, 0x78]))).toNumber()).toBe(-123456); - expect(slebDecode(new Pipe(Buffer.from([0x2a]))).toNumber()).toBe(42); - expect( - slebDecode(new Pipe(Buffer.from('91e4d0faf6b0eae5eda1c8a1f5ede1d4cb5b', 'hex'))).toString(16), - ).toBe('-1234567890abcdef1234567890abcdef'); - expect(slebDecode(new Pipe(Buffer.from('808098f4e9b5caea00', 'hex'))).toString()).toBe( - '60000000000000000', - ); -}); - -test('IntLE', () => { - expect(writeIntLE(42, 2).toString('hex')).toBe('2a00'); - expect(writeIntLE(-42, 3).toString('hex')).toBe('d6ffff'); - expect(writeIntLE(1234567890, 5).toString('hex')).toBe('d202964900'); - expect(writeUIntLE(1234567890, 5).toString('hex')).toBe('d202964900'); - expect(writeIntLE(-1234567890, 5).toString('hex')).toBe('2efd69b6ff'); - expect(readIntLE(new Pipe(Buffer.from('d202964900', 'hex')), 5).toString()).toBe('1234567890'); - expect(readUIntLE(new Pipe(Buffer.from('d202964900', 'hex')), 5).toString()).toBe('1234567890'); - expect(readIntLE(new Pipe(Buffer.from('2efd69b6ff', 'hex')), 5).toString()).toBe('-1234567890'); - expect(readIntLE(new Pipe(Buffer.from('d6ffffffff', 'hex')), 5).toString()).toBe('-42'); - expect(readUIntLE(new Pipe(Buffer.from('d6ffffffff', 'hex')), 5).toString()).toBe( - '1099511627734', - ); -}); diff --git a/src/agent/javascript/src/utils/leb128.ts b/src/agent/javascript/src/utils/leb128.ts deleted file mode 100644 index 8735999354..0000000000 --- a/src/agent/javascript/src/utils/leb128.ts +++ /dev/null @@ -1,162 +0,0 @@ -// tslint:disable:no-bitwise -// Note: this file uses buffer-pipe, which on Node only, uses the Node Buffer -// implementation, which isn't compatible with the NPM buffer package -// which we use everywhere else. This means that we have to transform -// one into the other, hence why every function that returns a Buffer -// actually return `new Buffer(pipe.buffer)`. -// TODO: The best solution would be to have our own buffer type around -// Uint8Array which is standard. -import BigNumber from 'bignumber.js'; -import Pipe = require('buffer-pipe'); -import { Buffer } from 'buffer/'; - -export function safeRead(pipe: Pipe, num: number): Buffer { - if (pipe.buffer.length < num) { - throw new Error('unexpected end of buffer'); - } - return pipe.read(num); -} - -export function lebEncode(value: number | BigNumber): Buffer { - if (typeof value === 'number') { - value = new BigNumber(value); - } - value = value.integerValue(); - if (value.lt(0)) { - throw new Error('Cannot leb encode negative values.'); - } - - const pipe = new Pipe(); - while (true) { - const i = value.mod(0x80).toNumber(); - value = value.idiv(0x80); - if (value.eq(0)) { - pipe.write([i]); - break; - } else { - pipe.write([i | 0x80]); - } - } - - return new Buffer(pipe.buffer); -} - -export function lebDecode(pipe: Pipe): BigNumber { - let shift = 0; - let value = new BigNumber(0); - let byte; - - do { - byte = safeRead(pipe, 1)[0]; - value = value.plus(new BigNumber(byte & 0x7f).multipliedBy(new BigNumber(2).pow(shift))); - shift += 7; - } while (byte >= 0x80); - - return value; -} - -export function slebEncode(value: BigNumber | number): Buffer { - if (typeof value === 'number') { - value = new BigNumber(value); - } - value = value.integerValue(); - - const isNeg = value.lt(0); - if (isNeg) { - value = value.abs().minus(1); - } - const pipe = new Pipe(); - while (true) { - const i = getLowerBytes(value); - value = value.idiv(0x80); - if ((isNeg && value.eq(0) && (i & 0x40) !== 0) || (!isNeg && value.eq(0) && (i & 0x40) === 0)) { - pipe.write([i]); - break; - } else { - pipe.write([i | 0x80]); - } - } - - function getLowerBytes(num: BigNumber): number { - const bytes = num.mod(0x80).toNumber(); - if (isNeg) { - // We swap the bits here again, and remove 1 to do two's complement. - return 0x80 - bytes - 1; - } else { - return bytes; - } - } - return new Buffer(pipe.buffer); -} - -export function slebDecode(pipe: Pipe): BigNumber { - // Get the size of the buffer, then cut a buffer of that size. - const pipeView = new Uint8Array(pipe.buffer); - let len = 0; - for (; len < pipeView.byteLength; len++) { - if (pipeView[len] < 0x80) { - // If it's a positive number, we reuse lebDecode. - if ((pipeView[len] & 0x40) === 0) { - return lebDecode(pipe); - } - break; - } - } - - const bytes = new Uint8Array(safeRead(pipe, len + 1)); - let value = new BigNumber(0); - for (let i = bytes.byteLength - 1; i >= 0; i--) { - value = value.times(0x80).plus(0x80 - (bytes[i] & 0x7f) - 1); - } - return value.negated().minus(1); -} - -export function writeUIntLE(value: BigNumber | number, byteLength: number): Buffer { - if ((value instanceof BigNumber && value.isNegative()) || value < 0) { - throw new Error('Cannot write negative values.'); - } - return writeIntLE(value, byteLength); -} - -export function writeIntLE(value: BigNumber | number, byteLength: number): Buffer { - if (typeof value === 'number') { - value = new BigNumber(value); - } - value = value.integerValue(); - const pipe = new Pipe(); - let i = 0; - let mul = new BigNumber(256); - let sub = 0; - let byte = value.mod(mul).toNumber(); - pipe.write([byte]); - while (++i < byteLength) { - if (value.lt(0) && sub === 0 && byte !== 0) { - sub = 1; - } - byte = value.idiv(mul).minus(sub).mod(256).toNumber(); - pipe.write([byte]); - mul = mul.times(256); - } - return new Buffer(pipe.buffer); -} - -export function readUIntLE(pipe: Pipe, byteLength: number): BigNumber { - let val = new BigNumber(safeRead(pipe, 1)[0]); - let mul = new BigNumber(1); - let i = 0; - while (++i < byteLength) { - mul = mul.times(256); - const byte = safeRead(pipe, 1)[0]; - val = val.plus(mul.times(byte)); - } - return val; -} - -export function readIntLE(pipe: Pipe, byteLength: number): BigNumber { - let val = readUIntLE(pipe, byteLength); - const mul = new BigNumber(2).pow(8 * (byteLength - 1) + 7); - if (val.gte(mul)) { - val = val.minus(mul.times(2)); - } - return val; -} diff --git a/src/agent/javascript/src/utils/sha224.ts b/src/agent/javascript/src/utils/sha224.ts deleted file mode 100644 index 8cc55a5622..0000000000 --- a/src/agent/javascript/src/utils/sha224.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { sha224 as jsSha224 } from 'js-sha256'; -import { BinaryBlob, blobFromUint8Array } from '../types'; - -export function sha224(data: ArrayBuffer): BinaryBlob { - const shaObj = jsSha224.create(); - shaObj.update(data); - return blobFromUint8Array(new Uint8Array(shaObj.array())); -} diff --git a/src/agent/javascript/test-setup.js b/src/agent/javascript/test-setup.js deleted file mode 100644 index f2c1865c9c..0000000000 --- a/src/agent/javascript/test-setup.js +++ /dev/null @@ -1,12 +0,0 @@ -// This file may be used to polyfill features that aren't available in the test -// environment, i.e. JSDom. -// -// We sometimes need to do this because our target browsers are expected to have -// a feature that JSDom doesn't. -// -// Note that we can use webpack configuration to make some features available to -// Node.js in a similar way. - -window.crypto = require("@trust/webcrypto"); -window.TextEncoder = require("text-encoding").TextEncoder; -require("whatwg-fetch"); diff --git a/src/agent/javascript/tsconfig.json b/src/agent/javascript/tsconfig.json deleted file mode 100644 index 7e603fd39c..0000000000 --- a/src/agent/javascript/tsconfig.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "compilerOptions": { - /* Basic Options */ - "incremental": true, /* Enable incremental compilation */ - "target": "es2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ - "lib": [ - "dom", - "es2017" - ], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - // "outDir": "out", /* Redirect output structure to the directory. */ - "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - "tsBuildInfoFile": "./build_info.json", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - "paths": { - "@dfinity/agent": ["src"] - }, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - }, - "include": [ - "types/*", - "src/**/*.ts" - ] -} diff --git a/src/agent/javascript/tslint.json b/src/agent/javascript/tslint.json deleted file mode 100644 index 15853f509e..0000000000 --- a/src/agent/javascript/tslint.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "linterOptions": { - "exclude": [ - "src/IDL.js", - "src/IDL.test.js" - ] - }, - "rules": { - "max-classes-per-file": false, - "interface-name": [true, "never-prefix"], - "no-consecutive-blank-lines": [true, 2], - "no-empty": [true, "allow-empty-functions"], - "no-switch-case-fall-through": true, - "object-literal-sort-keys": false, - "max-line-length": [true, 100], - "quotemark": [true, "single"], - "arrow-parens": [true, "ban-single-arg-parens"], - "space-before-function-paren": [false], - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ] - } - }, - "rulesDirectory": [] -} diff --git a/src/agent/javascript/types/base32.d.ts b/src/agent/javascript/types/base32.d.ts deleted file mode 100644 index 9ac4d2dd40..0000000000 --- a/src/agent/javascript/types/base32.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'base32.js' { - type Ret = { - finalize: () => any; - }; - - interface DecoderConfig { - type?: 'rfc4648' | 'crockford' | 'base32hex'; - alphabet?: string; - lc?: boolean; - } - class Decoder { - constructor(options?: DecoderConfig); - write(str: string): this; - finalize(str?: string): ArrayBuffer; - } - class Encoder { - private buf: ArrayBuffer; - private charmap: { [key: number]: number }; - constructor(options?: DecoderConfig); - write(buf: ArrayBuffer): this; - finalize(str?: ArrayBuffer): string; - } -} diff --git a/src/agent/javascript/types/borc.d.ts b/src/agent/javascript/types/borc.d.ts deleted file mode 100644 index 09ff4020aa..0000000000 --- a/src/agent/javascript/types/borc.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare module 'borc' { - import { Buffer } from 'buffer/'; - - class Decoder { - constructor(opts: { size: Number; tags: Record any> }); - - decodeFirst(input: ArrayBuffer): any; - } - - export function encode(o: any): Buffer | null; - - class Tagged { - tag: number; - value: any; - constructor(tag: Number, value: any); - } -} diff --git a/src/agent/javascript/types/buffer-pipe.d.ts b/src/agent/javascript/types/buffer-pipe.d.ts deleted file mode 100644 index 2b79bf30fe..0000000000 --- a/src/agent/javascript/types/buffer-pipe.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare module 'buffer-pipe' { - import { Buffer } from 'buffer/'; - - class BufferPipe { - readonly buffer: Buffer; - - /** - * Creates a new instance of a pipe - * @param {Buffer} buf - an optional buffer to start with - */ - constructor(buf?: Buffer); - - /** - * read `num` number of bytes from the pipe - * @param {Number} num - * @return {Buffer} - */ - read(num: number): Buffer; - - /** - * Wites a buffer to the pipe - * @param {Buffer} buf - */ - write(buf: Buffer | number[]): void; - - /** - * Whether or not there is more data to read from the buffer - * returns {Boolean} - */ - get end(): boolean; - - /** - * returns the number of bytes read from the stream - * @return {Integer} - */ - get bytesRead(): number; - - /** - * returns the number of bytes wrote to the stream - * @return {Integer} - */ - get bytesWrote(): number; - } - - export = BufferPipe; -} diff --git a/src/bootstrap/.gitignore b/src/bootstrap/.gitignore deleted file mode 100644 index 44e0e8dbad..0000000000 --- a/src/bootstrap/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -build_info.json -node_modules/ -dist/ -ts-out/ -**/*.js -**/*.js.map -**/*.d.ts - -# Cannot ignore candid.js, the last bastion of JS code in our app. -!src/candid/candid.js - -# Cannot ignore .d.ts files in types/ -!types/**/*.d.ts - -# Cannot ignore setup files for webpack and jest, which are still JavaScript. -!webpack.config.js -!jest.config.js -!test-setup.js diff --git a/src/bootstrap/.prettierrc b/src/bootstrap/.prettierrc deleted file mode 100644 index 4592d0205d..0000000000 --- a/src/bootstrap/.prettierrc +++ /dev/null @@ -1,11 +0,0 @@ -{ - "trailingComma": "all", - "tabWidth": 2, - "printWidth": 100, - "semi": true, - "bracketSpacing": true, - "useTabs": false, - "singleQuote": true, - "quoteProps": "consistent", - "arrowParens": "avoid" -} diff --git a/src/bootstrap/README.adoc b/src/bootstrap/README.adoc deleted file mode 100644 index 2f0912245d..0000000000 --- a/src/bootstrap/README.adoc +++ /dev/null @@ -1,46 +0,0 @@ -= Bootstrap Server - -== How to Run Locally - -Locally in your sdk repo, execute: - -. `npm install`. To install all Node dependencies. -. `npm run webpack -- --watch` will start webpack in watch mode. -. In two separate terminals in a DFX project (create one if needed); -.. Start a `dfx replica`. -.. Start `dfx bootstrap --root $SDK_REPO_PATH/src/bootstrap/dist/ --providers http://localhost:8080 --port 8000`. -. Open your browser to `http://localhost:8000`. Change code, wait a few seconds for webpack to - build, reload browser. - -If you need HTTPs (for example, using lvh or ic0.app using redirects), you will need to setup -your own nginx reverse proxy. Look up instructions online. - -**Note that HTTPS is needed for the crypto API if you're accessing a non-localhost URL. This is -a limitation of the web API (see -https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts/features_restricted_to_secure_contexts[ -the MDN documentation])**. - - - -== Startup Process -. The bootstrap server determines which worker host it is using; -.. If there is a query param `workerHost`, use that value. -.. If there is a `dfinity-ic-host` value in local storage, uses that value. -.. If the host ends with `localhost` and contains more than 1 subdomain, use `dfinity.localhost`. - _This is used to test cross-domain worker._ -.. If the host ends with `lvh.me`, use `dfinity.lvh.me`. _This is used to test cross-domain worker._ -.. If the host ends with `ic0.app`, use `dfinity.ic0.app`. -.. Otherwise, don't use a worker (this is for localhost and development purposes). - -. The bootstrap server determines the canister ID; -.. If there is a query param for `canisterId`, decode that value as text. -.. If there is a `dfinity-canister-id` value in local storage, uses that value. -.. If the host ends with `lvh.me`, split the host and use the first subdomain before - `ic0.app`. For example, `some-sub.01234567.lvh.me` would result in `01234567`. - _This is used to test cross-domain worker._ -.. If the host ends with `ic0.app`, split the host and use the first subdomain before - `ic0.app`. For example, `some-sub.01234567.ic0.app` would result in `01234567`. -.. Otherwise, show a UI for the user to enter a canister ID. - -. Create a worker with `${workerHost}/worker.js` using the same protocol. -. Get the canister's `/index.js` through the worker. diff --git a/src/bootstrap/README.html b/src/bootstrap/README.html deleted file mode 100644 index b72713e717..0000000000 --- a/src/bootstrap/README.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - - -Bootstrap Server - - - - - -
-
-

How to Run Locally

-
-
-

Locally in your sdk repo, execute:

-
-
-
    -
  1. -

    npm install. To install all Node dependencies.

    -
  2. -
  3. -

    npm run webpack — --watch will start webpack in watch mode.

    -
  4. -
  5. -

    In two separate terminals in a DFX project (create one if needed);

    -
    -
      -
    1. -

      Start a dfx replica.

      -
    2. -
    3. -

      Start dfx bootstrap --root $SDK_REPO_PATH/src/bootstrap/dist/ --providers http://localhost:8080 --port 8000.

      -
    4. -
    -
    -
  6. -
  7. -

    Open your browser to http://localhost:8000. Change code, wait a few seconds for webpack to -build, reload browser.

    -
  8. -
-
-
-

If you need HTTPs (for example, using lvh or ic0.app using redirects), you will need to setup -your own nginx reverse proxy. Look up instructions online.

-
-
-

Note that HTTPS is needed for the crypto API if you’re accessing a non-localhost URL. This is -a limitation of the web API (see ).

-
-
-
-
-

Startup Process

-
-
-
    -
  1. -

    The bootstrap server determines which worker host it is using;

    -
    -
      -
    1. -

      If there is a query param workerHost, use that value.

      -
    2. -
    3. -

      If there is a dfinity-ic-host value in local storage, uses that value.

      -
    4. -
    5. -

      If the host ends with localhost and contains more than 1 subdomain, use dfinity.localhost. -This is used to test cross-domain worker.

      -
    6. -
    7. -

      If the host ends with lvh.me, use dfinity.lvh.me. This is used to test cross-domain worker.

      -
    8. -
    9. -

      If the host ends with ic0.app, use dfinity.ic0.app.

      -
    10. -
    11. -

      Otherwise, don’t use a worker (this is for localhost and development purposes).

      -
    12. -
    -
    -
  2. -
  3. -

    The bootstrap server determines the canister ID;

    -
    -
      -
    1. -

      If there is a query param for canisterId, decode that value as text.

      -
    2. -
    3. -

      If there is a dfinity-canister-id value in local storage, uses that value.

      -
    4. -
    5. -

      If the host ends with lvh.me, split the host and use the first subdomain before -ic0.app. For example, some-sub.01234567.lvh.me would result in 01234567. -This is used to test cross-domain worker.

      -
    6. -
    7. -

      If the host ends with ic0.app, split the host and use the first subdomain before -ic0.app. For example, some-sub.01234567.ic0.app would result in 01234567.

      -
    8. -
    9. -

      Otherwise, show a UI for the user to enter a canister ID.

      -
    10. -
    -
    -
  4. -
  5. -

    Create a worker with ${workerHost}/worker.js using the same protocol.

    -
  6. -
  7. -

    Get the canister’s /index.js through the worker.

    -
  8. -
-
-
-
-
- - - \ No newline at end of file diff --git a/src/bootstrap/default.nix b/src/bootstrap/default.nix deleted file mode 100644 index b45658ad62..0000000000 --- a/src/bootstrap/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ pkgs ? import ../../nix { inherit system; } -, system ? builtins.currentSystem -, agent-js ? import ../agent/javascript { inherit pkgs; } -}: -pkgs.napalm.buildPackage (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) { - root = ./.; - name = "bootstrap-js"; - buildInputs = [ agent-js ]; - - outputs = [ "out" "lib" ]; - - propagatedNativeBuildInputs = [ - # Required by node-gyp - pkgs.python3 - ]; - propagatedBuildInputs = pkgs.lib.optional pkgs.stdenv.isDarwin - # Required by fsevents - pkgs.darwin.apple_sdk.frameworks.CoreServices; - - # ci script now does everything CI should do. Bundle is needed because it's the output - # of the nix derivation. - npmCommands = [ - "npm install" - ( - pkgs.writeScript "include-agent.sh" '' - #!${pkgs.stdenv.shell} - set -eo pipefail - - agent_node_modules="node_modules/@dfinity/agent" - mkdir -p $agent_node_modules - - tar xvzf ${agent-js.out}/dfinity-*.tgz --strip-component 1 --directory $agent_node_modules/ - cp -R ${agent-js.lib}/node_modules . - '' - ) - "npm run ci" - "npm run bundle" - ]; - - installPhase = '' - mkdir -p $out - - cp -R dist/* $out/ - - # Copy node_modules to be reused elsewhere. - mkdir -p $lib - cp -R node_modules $lib - ''; -} diff --git a/src/bootstrap/package-lock.json b/src/bootstrap/package-lock.json deleted file mode 100644 index 0e7bb5d10d..0000000000 --- a/src/bootstrap/package-lock.json +++ /dev/null @@ -1,7974 +0,0 @@ -{ - "name": "@dfinity/bootstrap", - "version": "0.6.5", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", - "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.1" - } - }, - "@babel/core": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz", - "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.2", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helpers": "^7.10.1", - "@babel/parser": "^7.10.2", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", - "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", - "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", - "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz", - "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.1.tgz", - "integrity": "sha512-SFxgwYmZ3HZPyZwJRiVNLRHWuW2OgE5k2nrVs6D9Iv4PPnXVffuEHy83Sfx/l4SqF+5kyJXjAyUmrG7tNm+qVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz", - "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz", - "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", - "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", - "dev": true - }, - "@babel/helpers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", - "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", - "dev": true, - "requires": { - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/highlight": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", - "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", - "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", - "dev": true - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/template": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", - "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1" - } - }, - "@babel/traverse": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", - "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.1", - "@babel/generator": "^7.10.1", - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.1", - "@babel/types": "^7.10.1", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", - "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.1", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@trust/keyto": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@trust/keyto/-/keyto-0.3.7.tgz", - "integrity": "sha512-t5kWWCTkPgg24JWVuCTPMx7l13F7YHdxBeJkT1vmoHjROgiOIEAN8eeY+iRmP1Hwsx+S7U55HyuqSsECr08a8A==", - "dev": true, - "requires": { - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "elliptic": "^6.4.1" - } - }, - "@trust/webcrypto": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@trust/webcrypto/-/webcrypto-0.9.2.tgz", - "integrity": "sha512-5iMAVcGYKhqLJGjefB1nzuQSqUJTru0nG4CytpBT/GGp1Piz/MVnj2jORdYf4JBYzggCIa8WZUr2rchP2Ngn/w==", - "dev": true, - "requires": { - "@trust/keyto": "^0.3.4", - "base64url": "^3.0.0", - "elliptic": "^6.4.0", - "node-rsa": "^0.4.0", - "text-encoding": "^0.6.1" - }, - "dependencies": { - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - } - } - }, - "@types/babel__core": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.8.tgz", - "integrity": "sha512-KXBiQG2OXvaPWFPDS1rD8yV9vO0OuWIqAEqLsbfX0oU2REN5KuoMnZ1gClWcBhO5I3n6oTVAmrMufOvRqdmFTQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.12.tgz", - "integrity": "sha512-t4CoEokHTfcyfb4hUaF9oOHu9RmmNWnm1CP0YmMqOOfClKascOmvlEM736vlqeScuGvBDsHkf8R2INd4DWreQA==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ZmI0sZGAUNXUfMWboWwi4LcfpoVUYldyN6Oe0oJ5cCsHDU/LlRq8nQKPXhYLOx36QYSW9bNIb1vvRrD6K7Llgw==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dev": true, - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=" - }, - "@types/node": { - "version": "13.13.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.12.tgz", - "integrity": "sha512-zWz/8NEPxoXNT9YyF2osqyA9WjssZukYpgI4UYZpOjcyqwIUqWGkcCionaEb9Ki+FULyPyvNFpg/329Kd2/pbw==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", - "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "asn1.js": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.3.0.tgz", - "integrity": "sha512-WHnQJFcOrIWT1RLOkFFBQkFVvyt9BPOOrH+Dp152Zk4R993rSzXUGPmkybIcUFhHE2d/iHH+nCaOWVCDbO8fgA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - } - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "bignumber.js": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", - "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==" - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", - "dev": true, - "requires": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "webpack-log": "^2.0.0" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.2.tgz", - "integrity": "sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "dev": true, - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-expect-message": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz", - "integrity": "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==", - "dev": true - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", - "requires": { - "immediate": "~3.0.5" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "localforage": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.4.tgz", - "integrity": "sha512-3EmVZatmNVeCo/t6Te7P06h2alGwbq8wXlSkcSXMvDE2/edPmsVqTPlzGnZaqwZZDBs6v+kxWpqjVsqsNJT8jA==", - "requires": { - "lie": "3.1.1" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", - "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "dev": true, - "requires": { - "lower-case": "^1.1.1" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-rsa": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.4.2.tgz", - "integrity": "sha1-1jkXKewWqDDtWjgEKzFX0tXXJTA=", - "dev": true, - "requires": { - "asn1": "0.2.3" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - } - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz", - "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.16", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.5.tgz", - "integrity": "sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==", - "dev": true - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "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" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@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" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "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": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - } - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "style-loader": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", - "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.6.6" - }, - "dependencies": { - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "terser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", - "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz", - "integrity": "sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==", - "dev": true, - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "dev": true - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "ts-jest": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", - "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "ts-loader": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-7.0.5.tgz", - "integrity": "sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig==", - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^4.0.0", - "semver": "^6.0.0" - }, - "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "tsconfig-paths": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", - "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "tsconfig-paths-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-S/gOOPOkV8rIL4LurZ1vUdYCVgo15iX9ZMJ6wx6w2OgcpT/G4wMyHB6WM+xheSqGMrWKuxFul+aXpCju3wmj/g==", - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "tsconfig-paths": "^3.4.0" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "3.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.5.tgz", - "integrity": "sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", - "dev": true, - "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - } - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", - "dev": true, - "requires": { - "chokidar": "^3.4.0", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" - }, - "dependencies": { - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "worker-plugin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-4.0.3.tgz", - "integrity": "sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/src/bootstrap/package.json b/src/bootstrap/package.json deleted file mode 100644 index 43bafb4afa..0000000000 --- a/src/bootstrap/package.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "@dfinity/bootstrap", - "version": "0.6.5", - "scripts": { - "build": "tsc -p tsconfig.json", - "bundle": "npm run build && webpack", - "ci": "npm run prettier && npm run lint && npm run build", - "lint": "tslint --project tsconfig.json --config tslint.json", - "lint:fix": "npm run lint -- --fix", - "prettier": "npx prettier --check \"src/**/*.ts\"", - "prettier:write": "npm run prettier -- --write", - "test": "jest --verbose", - "webpack": "webpack" - }, - "devDependencies": { - "@trust/webcrypto": "^0.9.2", - "@types/base64-js": "^1.2.5", - "@types/jest": "^24.0.18", - "@types/node": "^13.7.7", - "copy-webpack-plugin": "^5.1.1", - "css-loader": "^3.4.2", - "html-webpack-plugin": "^3.2.0", - "jest": "^24.9.0", - "jest-expect-message": "^1.0.2", - "node-fetch": "2.6.0", - "prettier": "^2.0.5", - "style-loader": "^1.1.3", - "terser-webpack-plugin": "^2.3.2", - "text-encoding": "^0.7.0", - "ts-jest": "^24.2.0", - "tslint": "^5.20.0", - "typescript": "3.9.5", - "webpack": "^4.41.2", - "webpack-cli": "^3.3.10", - "whatwg-fetch": "^3.0.0", - "worker-plugin": "^4.0.3" - }, - "dependencies": { - "bignumber.js": "^9.0.0", - "buffer": "5.6.0", - "localforage": "^1.7.4", - "ts-loader": "7.0.5", - "tsconfig-paths-webpack-plugin": "^3.2.0" - } -} diff --git a/src/bootstrap/src/candid/candid.css b/src/bootstrap/src/candid/candid.css deleted file mode 100644 index e933b5c9d4..0000000000 --- a/src/bootstrap/src/candid/candid.css +++ /dev/null @@ -1,74 +0,0 @@ -.signature { - font-size: 15px; - font-weight: 400; - margin: 5px; -} -.argument, .result, .status, .composite { - background-color: #F9F9F9; - border: 1px solid #E5E5E5; - color: #545454; - font-family: monospace; - font-size: 15px; - font-weight: 400; - height: auto; - margin-right: 10px; - margin-bottom: 10px; -} -.open { - margin: 5px; -} -.reject { - border: 1px solid #cc0000; -} -.result { - display: none; -} -.error { - color: #cc0000; -} -.status { - color: #cc0000; - display: none; -} -.left { - text-align: left; - width: 84%; - display: inline-block; - overflow-wrap: break-word; -} -.right { - text-align: right; - width: 15%; - display: inline-block; -} -.btn { - background-color: #02ADEA; - border-color: #02ADEA; - border-radius: .25rem; - color: #FFF; - font-family: sans-serif; - font-size: 16px; - font-weight: 700; - margin: 5px; -} -.popup-form { - border: 1px solid #E5E5E5; - padding-top: 10px; - padding-left: 10px; -} -.console { - display: flex; - flex: 1; - flex-direction: column; - font-family: monospace; - background-color: #F9F9F9; - color: #545454; -} -.console-line { - overflow-wrap: break-word; - flex: 0; - flex-basis: auto; - border: 0; - margin-left: 5px; - margin-bottom: 5px; -} diff --git a/src/bootstrap/src/candid/candid.html b/src/bootstrap/src/candid/candid.html deleted file mode 100644 index 952398d4e7..0000000000 --- a/src/bootstrap/src/candid/candid.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - DFINITY Canister Candid UI - - - -

Service

-
- This service has the following methods: -
    -
-
-
- - diff --git a/src/bootstrap/src/candid/candid.ts b/src/bootstrap/src/candid/candid.ts deleted file mode 100644 index e06e6a50bc..0000000000 --- a/src/bootstrap/src/candid/candid.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { Actor, IDL, InputBox, Principal, UI } from '@dfinity/agent'; -import './candid.css'; - -class CanisterActor extends Actor { - [x: string]: (...args: unknown[]) => Promise; -} - -export function render(id: Principal, canister: CanisterActor) { - document.getElementById('title')!.innerText = `Service ${id}`; - for (const [name, func] of Actor.interfaceOf(canister)._fields) { - renderMethod(canister, name, func); - } - const consoleEl = document.createElement('div'); - consoleEl.className = 'console'; - document.body.appendChild(consoleEl); -} - -function renderMethod(canister: CanisterActor, name: string, idlFunc: IDL.FuncClass) { - const item = document.createElement('li'); - - const sig = document.createElement('div'); - sig.className = 'signature'; - sig.innerHTML = `${name}: ${idlFunc.display()}`; - item.appendChild(sig); - - const inputs: InputBox[] = []; - idlFunc.argTypes.forEach((arg, i) => { - const inputbox = UI.renderInput(arg); - inputs.push(inputbox); - inputbox.render(item); - }); - - const button = document.createElement('button'); - button.className = 'btn'; - if (idlFunc.annotations.includes('query')) { - button.innerText = 'Query'; - } else { - button.innerText = 'Call'; - } - item.appendChild(button); - - const random = document.createElement('button'); - random.className = 'btn'; - random.innerText = 'Lucky'; - item.appendChild(random); - - const resultDiv = document.createElement('div'); - resultDiv.className = 'result'; - const left = document.createElement('span'); - left.className = 'left'; - const right = document.createElement('span'); - right.className = 'right'; - resultDiv.appendChild(left); - resultDiv.appendChild(right); - item.appendChild(resultDiv); - - const list = document.getElementById('methods')!; - list.append(item); - - async function call(args: any[]) { - left.className = 'left'; - left.innerText = 'Waiting...'; - right.innerText = ''; - resultDiv.style.display = 'block'; - - const tStart = Date.now(); - const result = await canister[name](...args); - const duration = (Date.now() - tStart) / 1000; - right.innerText = `(${duration}s)`; - return result; - } - - function callAndRender(args: any[]) { - (async () => { - const callResult = await call(args); - let result: any; - if (idlFunc.retTypes.length === 0) { - result = []; - } else if (idlFunc.retTypes.length === 1) { - result = [callResult]; - } else { - result = callResult; - } - left.innerHTML = ''; - - const containers: HTMLDivElement[] = []; - const textContainer = document.createElement('div'); - containers.push(textContainer); - left.appendChild(textContainer); - const text = encodeStr(IDL.FuncClass.argsToString(idlFunc.retTypes, result)); - textContainer.innerHTML = text; - const showArgs = encodeStr(IDL.FuncClass.argsToString(idlFunc.argTypes, args)); - log(`› ${name}${showArgs}`); - log(text); - - const uiContainer = document.createElement('div'); - containers.push(uiContainer); - uiContainer.style.display = 'none'; - left.appendChild(uiContainer); - idlFunc.retTypes.forEach((arg, ind) => { - const box = UI.renderInput(arg); - box.render(uiContainer); - UI.renderValue(arg, box, result[ind]); - }); - - const jsonContainer = document.createElement('div'); - containers.push(jsonContainer); - jsonContainer.style.display = 'none'; - left.appendChild(jsonContainer); - jsonContainer.innerText = JSON.stringify(callResult); - - let i = 0; - left.addEventListener('click', () => { - containers[i].style.display = 'none'; - i = (i + 1) % 3; - containers[i].style.display = 'block'; - }); - })().catch(err => { - left.className += ' error'; - left.innerText = err.message; - throw err; - }); - } - - random.addEventListener('click', () => { - const args = inputs.map(arg => arg.parse({ random: true })); - const isReject = inputs.some(arg => arg.isRejected()); - if (isReject) { - return; - } - callAndRender(args); - }); - - button.addEventListener('click', () => { - const args = inputs.map(arg => arg.parse()); - const isReject = inputs.some(arg => arg.isRejected()); - if (isReject) { - return; - } - callAndRender(args); - }); -} - -function encodeStr(str: string) { - const escapeChars: Record = { - ' ': ' ', - '<': '<', - '>': '>', - '\n': '
', - }; - const regex = new RegExp('[ <>\n]', 'g'); - return str.replace(regex, m => { - return escapeChars[m]; - }); -} - -function log(content: Element | string) { - const consoleEl = document.getElementsByClassName('console')[0]; - const line = document.createElement('div'); - line.className = 'console-line'; - if (content instanceof Element) { - line.appendChild(content); - } else { - line.innerHTML = content; - } - consoleEl.appendChild(line); -} diff --git a/src/bootstrap/src/dfinity.png b/src/bootstrap/src/dfinity.png deleted file mode 100644 index a8a7568b3b92f72eb1ddf2b61d71580437ff1b9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18240 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

9{QjU!O47 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 { - const workerHost = site.isUnknown() ? undefined : await site.getWorkerHost(); - const host = await site.getHost(); - - if (!workerHost) { - const keyPair = await site.getKeyPair(); - const principal = Principal.selfAuthenticating(keyPair.publicKey); - const creds = await site.getLogin(); - const agent = new HttpAgent({ - host, - principal, - ...(creds && { credentials: { name: creds[0], password: creds[1] } }), - }); - agent.addTransform(makeNonceTransform()); - agent.setAuthTransform(makeAuthTransform(keyPair)); - - return agent; - } else { - return createWorkerAgent(site, workerHost, host); - } -} - -async function createWorkerAgent(site: SiteInfo, workerHost: string, host: string): Promise { - // Create the IFRAME. - let messageQueue: ProxyMessage[] | null = []; - let loaded = false; - const agent = new ProxyAgent((msg: ProxyMessage) => { - if (!loaded) { - if (!messageQueue) { - throw new Error('No Message Queue but need Queueing...'); - } - messageQueue.push(msg); - } else { - iframeEl.contentWindow!.postMessage(msg, '*'); - } - }); - - const iframeEl = document.createElement('iframe'); - - iframeEl.src = `${workerHost}/worker.html?${host ? 'host=' + encodeURIComponent(host) : ''}`; - window.addEventListener('message', ev => { - if (ev.origin === workerHost) { - switch (ev.data) { - case 'ready': - const q = messageQueue?.splice(0, messageQueue.length) || []; - for (const msg of q) { - iframeEl.contentWindow!.postMessage(msg, workerHost); - } - - loaded = true; - messageQueue = null; - break; - - case 'login': - const url = new URL(workerHost); - url.pathname = '/login.html'; - url.searchParams.append('redirect', '' + window.location); - window.location.replace('' + url); - break; - - default: - if (typeof ev.data === 'object') { - agent.onmessage(ev.data); - } else { - throw new Error('Invalid message from worker: ' + JSON.stringify(ev.data)); - } - } - } - }); - - document.head.append(iframeEl); - return agent; -} diff --git a/src/bootstrap/src/index.html b/src/bootstrap/src/index.html deleted file mode 100644 index 8c7387d19f..0000000000 --- a/src/bootstrap/src/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - IC Canister Bootstrap - - - - - Loading... - - - diff --git a/src/bootstrap/src/index.ts b/src/bootstrap/src/index.ts deleted file mode 100644 index 72a535e2f7..0000000000 --- a/src/bootstrap/src/index.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { - createAssetCanisterActor, - GlobalInternetComputer, - HttpAgent, - IDL, - Principal, -} from '@dfinity/agent'; -import { createAgent } from './host'; -import { SiteInfo } from './site'; - -declare const window: GlobalInternetComputer & Window; - -// Retrieve and execute a JavaScript file from the server. -async function _loadJs( - canisterId: Principal, - filename: string, - onload = async () => {}, -): Promise { - const actor = createAssetCanisterActor({ canisterId }); - const content = await actor.retrieve(filename); - const js = new TextDecoder().decode(new Uint8Array(content)); - // const dataUri = new Function(js); - - // Run an event function so the callee can execute some code before loading the - // Javascript. - await onload(); - - // TODO(hansl): either get rid of eval, or rid of webpack, or make this - // work without this horrible hack. - return eval(js); // tslint:disable-line -} - -async function _loadCandid(canisterId: Principal): Promise { - const origin = window.location.origin; - const url = `${origin}/_/candid?canisterId=${canisterId.toText()}&format=js`; - const response = await fetch(url); - if (!response.ok) { - throw new Error(`Cannot fetch candid file`); - } - const js = await response.text(); - const dataUri = 'data:text/javascript;charset=utf-8,' + encodeURIComponent(js); - // TODO(hansl): either get rid of eval, or rid of webpack, or make this - // work without this horrible hack. - return eval('import("' + dataUri + '")'); // tslint:disable-line -} - -async function _main() { - const site = await SiteInfo.fromWindow(); - const agent = await createAgent(site); - window.ic = { agent, HttpAgent, IDL }; - - // Find the canister ID. Allow override from the url with 'canister_id=1234..' - const canisterId = site.principal; - if (!canisterId) { - // Show an error. - const div = document.createElement('div'); - div.innerText = - 'Could not find the canister ID to use. Please provide one in the query parameters.'; - - document.body.replaceChild(div, document.body.getElementsByTagName('app').item(0)!); - } else { - if (window.location.pathname === '/candid') { - // Load candid.did.js from endpoint. - const candid = await _loadCandid(canisterId); - const canister = window.ic.agent.makeActorFactory(candid.default)({ canisterId }); - const render = await import('./candid/candid'); - render.render(canisterId, canister); - } else { - // Load index.js from the canister and execute it. - await _loadJs(canisterId, 'index.js', async () => { - document.getElementById('ic-progress')!.remove(); - }); - } - } -} - -_main().catch(err => { - const div = document.createElement('div'); - div.innerText = 'An error happened:'; - const pre = document.createElement('pre'); - pre.innerHTML = err.stack; - div.appendChild(pre); - document.body.replaceChild(div, document.body.getElementsByTagName('app').item(0)!); - throw err; -}); diff --git a/src/bootstrap/src/login.html b/src/bootstrap/src/login.html deleted file mode 100644 index cc13c6c0fd..0000000000 --- a/src/bootstrap/src/login.html +++ /dev/null @@ -1,18 +0,0 @@ - - -

Login is necessary to access this network:
- -
-
- - -
-
- - -
-
- -
- - diff --git a/src/bootstrap/src/login.ts b/src/bootstrap/src/login.ts deleted file mode 100644 index 77e19af8ba..0000000000 --- a/src/bootstrap/src/login.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { SiteInfo } from './site'; - -const loginEl = document.getElementById('login')!; -const usernameEl = document.getElementById('username')! as HTMLInputElement; -const passwordEl = document.getElementById('password')! as HTMLInputElement; - -SiteInfo.fromWindow().then(site => { - site.getLogin().then(login => { - if (login) { - const [user, pass] = login; - usernameEl.value = user; - passwordEl.value = pass; - } - }); - - loginEl.addEventListener('click', async () => { - await site.setLogin(usernameEl.value, passwordEl.value); - - const url = new URL(window.location + ''); - const redirect = url.searchParams.get('redirect'); - - if (redirect) { - // console.log(redirect); - window.location.replace(redirect); - } else { - alert('Login credentials saved.'); - } - }); -}); diff --git a/src/bootstrap/src/site.ts b/src/bootstrap/src/site.ts deleted file mode 100644 index 4fea8e14bf..0000000000 --- a/src/bootstrap/src/site.ts +++ /dev/null @@ -1,201 +0,0 @@ -import { generateKeyPair, KeyPair, makeKeyPair, Principal } from '@dfinity/agent'; -import localforage from 'localforage'; -import * as storage from './storage'; - -const localStorageCanisterIdKey = 'dfinity-ic-canister-id'; -const localStorageHostKey = 'dfinity-ic-host'; -const localStorageIdentityKey = 'dfinity-ic-user-identity'; -const localStorageLoginKey = 'dfinity-ic-login'; - -async function _getVariable(name: string, localStorageName: string): Promise; -async function _getVariable( - name: string, - localStorageName: string, - defaultValue: string, -): Promise; -async function _getVariable( - name: string, - localStorageName: string, - defaultValue?: string, -): Promise { - const params = new URLSearchParams(window.location.search); - - const maybeValue = params.get(name); - if (maybeValue) { - return maybeValue; - } - - const lsValue = await storage.retrieve(localStorageName); - if (lsValue) { - return lsValue; - } - - return defaultValue; -} - -function getCanisterId(s: string | undefined): Principal | undefined { - if (s === undefined) { - return undefined; - } else { - try { - return Principal.fromText(s); - } catch (_) { - return undefined; - } - } -} - -export enum DomainKind { - Unknown, - Localhost, - Ic0, - Lvh, -} - -export class SiteInfo { - public static async worker(): Promise { - const siteInfo = await SiteInfo.fromWindow(); - siteInfo._isWorker = true; - - return siteInfo; - } - - public static async unknown(): Promise { - const principal = await _getVariable('canisterId', localStorageCanisterIdKey); - return new SiteInfo( - DomainKind.Unknown, - principal !== undefined ? Principal.fromText(principal) : undefined, - ); - } - - public static async fromWindow(): Promise { - const { hostname } = window.location; - const components = hostname.split('.'); - const [maybeCId, maybeIc0, maybeApp] = components.slice(-3); - const subdomain = components.slice(0, -3).join('.'); - - if (maybeIc0 === 'ic0' && maybeApp === 'app') { - return new SiteInfo(DomainKind.Ic0, getCanisterId(maybeCId), subdomain); - } else if (maybeIc0 === 'lvh' && maybeApp === 'me') { - return new SiteInfo(DomainKind.Lvh, getCanisterId(maybeCId), subdomain); - } else if (maybeIc0 === 'localhost' && maybeApp === undefined) { - /// Allow subdomain of localhost. - return new SiteInfo(DomainKind.Localhost, getCanisterId(maybeCId), subdomain); - } else if (maybeApp === 'localhost') { - /// Allow subdomain of localhost, but maybeIc0 is the canister ID. - return new SiteInfo( - DomainKind.Localhost, - getCanisterId(maybeIc0), - `${maybeCId}.${subdomain}`, - ); - } else { - return this.unknown(); - } - } - - private _isWorker = false; - - constructor( - public readonly kind: DomainKind, - public readonly principal?: Principal, - public readonly subdomain = '', - ) {} - - public async setLogin(username: string, password: string): Promise { - await this.store(localStorageLoginKey, JSON.stringify([username, password])); - } - - public async getLogin(): Promise<[string, string] | undefined> { - const maybeCreds = await this.retrieve(localStorageLoginKey); - return maybeCreds !== undefined ? JSON.parse(maybeCreds) : undefined; - } - - public async getKeyPair(): Promise { - let k = await _getVariable('userIdentity', localStorageIdentityKey); - if (k === undefined) { - k = await this.retrieve(localStorageIdentityKey); - } - - if (k) { - const kp = JSON.parse(k); - return makeKeyPair(new Uint8Array(kp.publicKey.data), new Uint8Array(kp.secretKey.data)); - } else { - const kp = generateKeyPair(); - await this.store(localStorageIdentityKey, JSON.stringify(kp)); - - return kp; - } - } - - public isUnknown() { - return this.kind === DomainKind.Unknown; - } - - public async getWorkerHost(): Promise { - if (this._isWorker) { - return ''; - } - - const { port, protocol } = window.location; - - switch (this.kind) { - case DomainKind.Unknown: - throw new Error('Cannot get worker host inside a worker.'); - case DomainKind.Ic0: - return `${protocol}//z.ic0.app${port ? ':' + port : ''}`; - case DomainKind.Lvh: - return `${protocol}//z.lvh.me${port ? ':' + port : ''}`; - case DomainKind.Localhost: - return `${protocol}//z.localhost${port ? ':' + port : ''}`; - } - } - - public async getHost(): Promise { - // Figure out the host. - let host = await _getVariable('host', localStorageHostKey, ''); - - if (host) { - try { - host = JSON.parse(host); - - if (Array.isArray(host)) { - return '' + host[Math.floor(Math.random() * host.length)]; - } else { - return '' + host; - } - } catch (_) { - return host; - } - } else { - const { port, protocol } = window.location; - - switch (this.kind) { - case DomainKind.Unknown: - return ''; - case DomainKind.Ic0: - // TODO: think if we want to have this hard coded here. We might. - return `${protocol}//gw.dfinity.network${port ? ':' + port : ''}`; - case DomainKind.Lvh: - return `${protocol}//r.lvh.me${port ? ':' + port : ''}`; - case DomainKind.Localhost: - return `${protocol}//r.localhost${port ? ':' + port : ''}`; - default: - return host || ''; - } - } - } - - private async store(name: string, value: string): Promise { - await localforage.setItem(name, value); - await storage.store(name, value); - } - - private async retrieve(name: string): Promise { - const maybeValue = await storage.retrieve(name); - if (maybeValue === undefined) { - return localforage.getItem(name); - } else { - return maybeValue; - } - } -} diff --git a/src/bootstrap/src/storage.ts b/src/bootstrap/src/storage.ts deleted file mode 100644 index 3f83527a46..0000000000 --- a/src/bootstrap/src/storage.ts +++ /dev/null @@ -1,29 +0,0 @@ -async function parse(): Promise> { - const cookie = document.cookie; - const result = Object(null); - - for (const kvPair of cookie.trim().split(';')) { - const [key, value] = kvPair - .trim() - .split('=', 2) - .map(x => x.trim()); - - try { - if (value !== undefined) { - result[key] = decodeURIComponent(value); - } - } catch (_) { - // Do Nothing. - } - } - - return result; -} - -export async function store(name: string, value: string): Promise { - document.cookie = `${name}=${encodeURIComponent(value)};max-age=31536000;secure`; // a year. -} - -export async function retrieve(name: string): Promise { - return (await parse())[name] || undefined; -} diff --git a/src/bootstrap/src/worker.html b/src/bootstrap/src/worker.html deleted file mode 100644 index d3a3d8abf0..0000000000 --- a/src/bootstrap/src/worker.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/bootstrap/src/worker.ts b/src/bootstrap/src/worker.ts deleted file mode 100644 index f72be309f5..0000000000 --- a/src/bootstrap/src/worker.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { ProxyMessageKind, ProxyStubAgent } from '@dfinity/agent'; -import { createAgent } from './host'; -import { SiteInfo } from './site'; - -async function bootstrap() { - const agent = await createAgent(await SiteInfo.worker()); - (window as any).ic = { - agent, - }; - const stub = new ProxyStubAgent(msg => { - switch (msg.type) { - case ProxyMessageKind.CallResponse: - const response = msg.response.response; - msg.response.response = JSON.parse(JSON.stringify(response)); - } - window.parent.postMessage(msg, '*'); - }, agent); - - window.addEventListener('message', ev => { - stub.onmessage(ev.data); - }); - - // Ping the server, and if it works send our ACK message to the parent. - // If it doesn't work because of a 401 UNAUTHORIZED code, send a login - // message to tell the parent we need to login. - agent - .status() - .then(_json => { - window.parent.postMessage('ready', '*'); - }) - .catch((error: Error) => { - if (error.message.includes('Code: 401')) { - window.parent.postMessage('login', '*'); - } else { - throw error; - } - }); -} - -bootstrap().catch(error => { - (console as any).error(error); - window.parent.postMessage({ error }, '*'); -}); diff --git a/src/bootstrap/tsconfig.json b/src/bootstrap/tsconfig.json deleted file mode 100644 index 70cd0bf43d..0000000000 --- a/src/bootstrap/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "incremental": true, - "allowJs": false, - "outDir": "ts-out/", - "target": "ES2017", - "module": "commonjs", - "lib": [ - "dom", - "es2017" - ], - "sourceMap": true, - "strict": true, - "paths": { - "@dfinity/agent": [ - "../../src/agent/javascript/src", - "node_modules/@dfinity/agent" - ] - }, - "baseUrl": "./", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - }, - "include": [ - "types/*", - "src/**/*.ts" - ] -} diff --git a/src/bootstrap/tslint.json b/src/bootstrap/tslint.json deleted file mode 100644 index 15853f509e..0000000000 --- a/src/bootstrap/tslint.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "jsRules": {}, - "linterOptions": { - "exclude": [ - "src/IDL.js", - "src/IDL.test.js" - ] - }, - "rules": { - "max-classes-per-file": false, - "interface-name": [true, "never-prefix"], - "no-consecutive-blank-lines": [true, 2], - "no-empty": [true, "allow-empty-functions"], - "no-switch-case-fall-through": true, - "object-literal-sort-keys": false, - "max-line-length": [true, 100], - "quotemark": [true, "single"], - "arrow-parens": [true, "ban-single-arg-parens"], - "space-before-function-paren": [false], - "variable-name": { - "options": [ - "ban-keywords", - "check-format", - "allow-leading-underscore", - "allow-pascal-case" - ] - } - }, - "rulesDirectory": [] -} diff --git a/src/bootstrap/types/base32.d.ts b/src/bootstrap/types/base32.d.ts deleted file mode 100644 index 9ac4d2dd40..0000000000 --- a/src/bootstrap/types/base32.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -declare module 'base32.js' { - type Ret = { - finalize: () => any; - }; - - interface DecoderConfig { - type?: 'rfc4648' | 'crockford' | 'base32hex'; - alphabet?: string; - lc?: boolean; - } - class Decoder { - constructor(options?: DecoderConfig); - write(str: string): this; - finalize(str?: string): ArrayBuffer; - } - class Encoder { - private buf: ArrayBuffer; - private charmap: { [key: number]: number }; - constructor(options?: DecoderConfig); - write(buf: ArrayBuffer): this; - finalize(str?: ArrayBuffer): string; - } -} diff --git a/src/bootstrap/types/borc.d.ts b/src/bootstrap/types/borc.d.ts deleted file mode 100644 index 09ff4020aa..0000000000 --- a/src/bootstrap/types/borc.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare module 'borc' { - import { Buffer } from 'buffer/'; - - class Decoder { - constructor(opts: { size: Number; tags: Record any> }); - - decodeFirst(input: ArrayBuffer): any; - } - - export function encode(o: any): Buffer | null; - - class Tagged { - tag: number; - value: any; - constructor(tag: Number, value: any); - } -} diff --git a/src/bootstrap/types/buffer-pipe.d.ts b/src/bootstrap/types/buffer-pipe.d.ts deleted file mode 100644 index 2b79bf30fe..0000000000 --- a/src/bootstrap/types/buffer-pipe.d.ts +++ /dev/null @@ -1,46 +0,0 @@ -declare module 'buffer-pipe' { - import { Buffer } from 'buffer/'; - - class BufferPipe { - readonly buffer: Buffer; - - /** - * Creates a new instance of a pipe - * @param {Buffer} buf - an optional buffer to start with - */ - constructor(buf?: Buffer); - - /** - * read `num` number of bytes from the pipe - * @param {Number} num - * @return {Buffer} - */ - read(num: number): Buffer; - - /** - * Wites a buffer to the pipe - * @param {Buffer} buf - */ - write(buf: Buffer | number[]): void; - - /** - * Whether or not there is more data to read from the buffer - * returns {Boolean} - */ - get end(): boolean; - - /** - * returns the number of bytes read from the stream - * @return {Integer} - */ - get bytesRead(): number; - - /** - * returns the number of bytes wrote to the stream - * @return {Integer} - */ - get bytesWrote(): number; - } - - export = BufferPipe; -} diff --git a/src/bootstrap/webpack.config.js b/src/bootstrap/webpack.config.js deleted file mode 100644 index 8b9f6f0991..0000000000 --- a/src/bootstrap/webpack.config.js +++ /dev/null @@ -1,85 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const TerserPlugin = require('terser-webpack-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin'); - -module.exports = { - mode: 'production', - entry: { - bootstrap: './src/index.ts', - candid: './src/candid/candid.ts', - login: './src/login.ts', - worker: './src/worker.ts', - }, - target: 'web', - output: { - // This is necessary to allow internal apps to bundle their own code with - // webpack which may conflict with us. - jsonpFunction: '__dfinityJsonp', - path: path.resolve(__dirname, './dist'), - filename: '[name].js', - }, - resolve: { - plugins: [new TsconfigPathsPlugin({ configFile: './tsconfig.json' })], - extensions: ['.tsx', '.ts', '.js'], - }, - devtool: 'source-map', - optimization: { - minimize: true, - minimizer: [ - new TerserPlugin({ - cache: true, - parallel: true, - sourceMap: true, // Must be set to true if using source-maps in production - terserOptions: { - ecma: 8, - minimize: true, - comments: false, - // https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions - }, - }), - ], - }, - module: { - rules: [ - { - test: /\.css$/, - use: ['style-loader', 'css-loader'], - }, - { - test: /\.tsx?$/, - use: ['ts-loader'], - }, - ], - }, - plugins: [ - new HtmlWebpackPlugin({ - template: 'src/index.html', - filename: 'index.html', - chunks: ['bootstrap'], - }), - new HtmlWebpackPlugin({ - template: 'src/worker.html', - filename: 'worker.html', - chunks: ['worker'], - }), - new HtmlWebpackPlugin({ - template: 'src/candid/candid.html', - filename: 'candid/index.html', - chunks: ['bootstrap', 'candid'], - }), - new HtmlWebpackPlugin({ - template: 'src/login.html', - filename: 'login.html', - chunks: ['login'], - }), - new CopyWebpackPlugin([ - { - from: 'src/dfinity.png', - to: 'favicon.ico', - }, - ]), - ], -}; From 43137c658b0259901683a5ca479f1041ccdae05b Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 17:04:39 -0700 Subject: [PATCH 26/36] chore: update niv ref to agent-js-monorepo@6da3e0a71a500965a901b01e1311581bcca88a95 --- nix/sources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/sources.json b/nix/sources.json index 5ce833a059..d43d8253ae 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "373eb2e0ee1e3b71a3a3cca58fa91db18fab8b9b", + "rev": "6da3e0a71a500965a901b01e1311581bcca88a95", "type": "git" }, "bats-support": { From b0fcf5b59ee97f7bb8526d53f8f563d2f97bfe84 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 17:13:47 -0700 Subject: [PATCH 27/36] chore: add newline to end of README to force new commit --- README.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/README.adoc b/README.adoc index 0f9297c18e..6239e19ff4 100644 --- a/README.adoc +++ b/README.adoc @@ -91,3 +91,4 @@ make sure the installer actually downloads and installs the new DFX release the job which will monitor the aforementioned `publish.install-sh.x86_64-linux` job for new builds, whenever there's a new build it will download the output (the CD script) and execute it. + From 7c20d9ff61e895dd075550877edb6a5c31daebf7 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 17:22:34 -0700 Subject: [PATCH 28/36] fix: fix ci.nix by removing broken references to old agent-js --- assets.nix | 2 +- default.nix | 2 +- dfx.nix | 1 - e2e/node/default.nix | 2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/assets.nix b/assets.nix index a519a789ec..56d88b10ae 100644 --- a/assets.nix +++ b/assets.nix @@ -1,5 +1,5 @@ { pkgs ? import ./nix {} -, bootstrap-js ? import ./src/bootstrap { inherit pkgs; } +, bootstrap-js ? import ./nix/agent-js/bootstrap-js.nix { inherit pkgs; } , distributed-canisters ? import ./distributed-canisters.nix { inherit pkgs; } }: pkgs.runCommandNoCCLocal "assets" {} '' diff --git a/default.nix b/default.nix index e94d956c8e..2d697b1159 100644 --- a/default.nix +++ b/default.nix @@ -7,7 +7,7 @@ , labels ? {} }: rec { - dfx = import ./dfx.nix { inherit pkgs agent-js assets; }; + dfx = import ./dfx.nix { inherit pkgs assets; }; e2e-tests = import ./e2e/bats { inherit pkgs dfx; }; e2e-tests-ic-ref = import ./e2e/bats { inherit pkgs dfx; use_ic_ref = true; }; diff --git a/dfx.nix b/dfx.nix index f76418ac54..2901302b4e 100644 --- a/dfx.nix +++ b/dfx.nix @@ -8,7 +8,6 @@ { pkgs ? import ./nix { inherit system; } , system ? builtins.currentSystem -, agent-js ? import ./src/agent/javascript { inherit pkgs; } , assets ? import ./assets.nix { inherit pkgs; } }: let diff --git a/e2e/node/default.nix b/e2e/node/default.nix index f9afac4bcf..e296e1c226 100644 --- a/e2e/node/default.nix +++ b/e2e/node/default.nix @@ -1,7 +1,7 @@ { pkgs ? import ../../nix { inherit system; } , system ? builtins.currentSystem , dfx ? import ../../dfx.nix { inherit pkgs; } -, agent-js ? import ../../src/agent/javascript { inherit pkgs; } +, agent-js ? import ../../nix/agent-js/agent-js.nix { inherit pkgs; } }: pkgs.napalm.buildPackage (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) { root = ./.; From 7765aa90502be5c106a2b1955be6de33ed6e877c Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 1 Sep 2020 18:58:11 -0700 Subject: [PATCH 29/36] fix: fix e2e/node nix build after removing agent/bootstrap --- e2e/node/default.nix | 14 ++++++++++---- nix/agent-js/agent-js-monorepo.nix | 28 +++------------------------- nix/agent-js/agent-js.nix | 4 ++++ nix/agent-js/monorepo-tools.nix | 27 +++++++++++++++++++++++++++ nix/sources.json | 2 +- 5 files changed, 45 insertions(+), 30 deletions(-) create mode 100644 nix/agent-js/monorepo-tools.nix diff --git a/e2e/node/default.nix b/e2e/node/default.nix index e296e1c226..e741ace1cf 100644 --- a/e2e/node/default.nix +++ b/e2e/node/default.nix @@ -2,12 +2,18 @@ , system ? builtins.currentSystem , dfx ? import ../../dfx.nix { inherit pkgs; } , agent-js ? import ../../nix/agent-js/agent-js.nix { inherit pkgs; } +, agentJsMonorepoTools ? import ../../nix/agent-js/monorepo-tools.nix { inherit pkgs system; } +, src ? (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) }: -pkgs.napalm.buildPackage (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) { +pkgs.napalm.buildPackage src { root = ./.; name = "node-e2e-tests"; - buildInputs = [ dfx.standalone agent-js ]; - + buildInputs = [ + dfx.standalone + agent-js + pkgs.python3 + (agentJsMonorepoTools src) + ]; npmCommands = [ "npm install" @@ -21,7 +27,7 @@ pkgs.napalm.buildPackage (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) { agent_node_modules="node_modules/@dfinity/agent" mkdir -p $agent_node_modules - + tar xvzf ${agent-js.out}/dfinity-*.tgz --strip-component 1 --directory $agent_node_modules/ cp -R ${agent-js.lib}/node_modules . '' diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 548fb21dec..a7a943a5f0 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -3,35 +3,13 @@ # This should be a fs path to a checked-out agent-js git repo. # e.g. via niv at `nix-instantiate nix -A sources.agent-js-monorepo --eval` , agent-js-monorepo-src +, agentJsMonorepoTools ? import ./monorepo-tools.nix { inherit pkgs system; } }: let - src = agent-js-monorepo-src; - agentPackagePath = (src + "/packages/agent"); - # derivation that has all system dependencies required to build the npm monorepo: - # * npm requires python3 to build with gyp - # * on mac, npm may try to use fsevents - monorepoSystemRequirements = pkgs.stdenv.mkDerivation { - inherit src; - name = "agent-js-monorepo-systemRequirements"; - propagatedNativeBuildInputs = [ - # Required by node-gyp - pkgs.python3 - ]; - propagatedBuildInputs = [ - ( - pkgs.lib.optional pkgs.stdenv.isDarwin - # Required by fsevents - pkgs.darwin.apple_sdk.frameworks.CoreServices - ) - ]; - installPhase = '' - mkdir -p $out - ''; - }; - monorepo = pkgs.napalm.buildPackage src { + monorepo = pkgs.napalm.buildPackage agent-js-monorepo-src { name = "agent-js-monorepo"; propagatedBuildInputs = [ - monorepoSystemRequirements + (agentJsMonorepoTools agent-js-monorepo-src) ]; outputs = [ "out" diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index 7b735c9798..e4f9c7e873 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -20,6 +20,10 @@ pkgs.stdenv.mkDerivation { mkdir -p $out cp -R ./* $out/ + # back compat required for ../../e2e/node/default.nix: https://github.com/dfinity-lab/sdk/blob/20f051aad0f37d16f040a2c9a54e79db7378492d/src/agent/javascript/default.nix#L33 + npm pack + cp dfinity-*.tgz $out + # $lib/node_modules: node_modules dir that must be resolvable by npm # for future build steps to work (e.g. at ../../node_modules) mkdir -p $lib diff --git a/nix/agent-js/monorepo-tools.nix b/nix/agent-js/monorepo-tools.nix new file mode 100644 index 0000000000..7bb4d7af7d --- /dev/null +++ b/nix/agent-js/monorepo-tools.nix @@ -0,0 +1,27 @@ +{ pkgs ? import ../. { inherit system; } +, system ? builtins.currentSystem +}: +let + # derivation that has all system dependencies required to build the npm monorepo: + # * npm requires python3 to build with gyp + # * on mac, npm may try to use fsevents + agentJsMonorepoTools = src: pkgs.stdenv.mkDerivation { + inherit src; + name = "agent-js-monorepo-systemRequirements"; + propagatedNativeBuildInputs = [ + # Required by node-gyp + pkgs.python3 + ]; + propagatedBuildInputs = [ + ( + pkgs.lib.optional pkgs.stdenv.isDarwin + # Required by fsevents + pkgs.darwin.apple_sdk.frameworks.CoreServices + ) + ]; + installPhase = '' + mkdir -p $out + ''; + }; +in +agentJsMonorepoTools diff --git a/nix/sources.json b/nix/sources.json index d43d8253ae..6d5c9cf2db 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "6da3e0a71a500965a901b01e1311581bcca88a95", + "rev": "38d47f8c0f20c5ab827edb7c27029736659d34f4", "type": "git" }, "bats-support": { From 2d6609b29f91694162e15ca59da4f01f4e118cdd Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 8 Sep 2020 10:39:34 -0700 Subject: [PATCH 30/36] rm e2e node. They will move to agent-js repo --- default.nix | 1 - e2e/node/.prettierrc | 10 - e2e/node/README.adoc | 54 - e2e/node/basic/call.ts | 11 - e2e/node/default.nix | 42 - e2e/node/identity/principal.ts | 10 - e2e/node/jest.config.js | 23 - e2e/node/package-lock.json | 5174 ----------------- e2e/node/package.json | 25 - e2e/node/setup.js | 7 - e2e/node/teardown.js | 12 - e2e/node/test-setup.js | 12 - e2e/node/tsconfig.json | 18 - e2e/node/utils/agent.ts | 14 - e2e/node/utils/canisters/counter.ts | 34 - e2e/node/utils/canisters/counter.wasm | Bin 54786 -> 0 bytes e2e/node/utils/canisters/identity.ts | 20 - e2e/node/utils/canisters/identity/main.did.ts | 14 - e2e/node/utils/canisters/identity/main.mo | 11 - e2e/node/utils/canisters/identity/main.wasm | Bin 92274 -> 0 bytes e2e/node/utils/canisters/index.ts | 2 - 21 files changed, 5494 deletions(-) delete mode 100644 e2e/node/.prettierrc delete mode 100644 e2e/node/README.adoc delete mode 100644 e2e/node/basic/call.ts delete mode 100644 e2e/node/default.nix delete mode 100644 e2e/node/identity/principal.ts delete mode 100644 e2e/node/jest.config.js delete mode 100644 e2e/node/package-lock.json delete mode 100644 e2e/node/package.json delete mode 100644 e2e/node/setup.js delete mode 100644 e2e/node/teardown.js delete mode 100644 e2e/node/test-setup.js delete mode 100644 e2e/node/tsconfig.json delete mode 100644 e2e/node/utils/agent.ts delete mode 100644 e2e/node/utils/canisters/counter.ts delete mode 100644 e2e/node/utils/canisters/counter.wasm delete mode 100644 e2e/node/utils/canisters/identity.ts delete mode 100644 e2e/node/utils/canisters/identity/main.did.ts delete mode 100644 e2e/node/utils/canisters/identity/main.mo delete mode 100644 e2e/node/utils/canisters/identity/main.wasm delete mode 100644 e2e/node/utils/canisters/index.ts diff --git a/default.nix b/default.nix index 2d697b1159..9a61398dc7 100644 --- a/default.nix +++ b/default.nix @@ -11,7 +11,6 @@ rec { e2e-tests = import ./e2e/bats { inherit pkgs dfx; }; e2e-tests-ic-ref = import ./e2e/bats { inherit pkgs dfx; use_ic_ref = true; }; - node-e2e-tests = import ./e2e/node { inherit pkgs dfx; }; # Agents in varous languages agent-js-monorepo = pkgs.agent-js-monorepo; diff --git a/e2e/node/.prettierrc b/e2e/node/.prettierrc deleted file mode 100644 index e3291ef711..0000000000 --- a/e2e/node/.prettierrc +++ /dev/null @@ -1,10 +0,0 @@ -{ - "trailingComma": "all", - "tabWidth": 2, - "printWidth": 100, - "semi": true, - "bracketSpacing": true, - "useTabs": false, - "singleQuote": true, - "arrowParens": "avoid" -} diff --git a/e2e/node/README.adoc b/e2e/node/README.adoc deleted file mode 100644 index 8198416f91..0000000000 --- a/e2e/node/README.adoc +++ /dev/null @@ -1,54 +0,0 @@ -= Node End-to-End Tests - -== High level overview - -These tests are composed of two parts; - -1. a Nix script that installs the Agent in the execution location, as if it was an NPM - package. This is done by building the NPM Package, and the JS Agent derivation outputting - 2 outputs; the NPM package itself (in a packed format), and its node_modules which are - then copied in the execution folder for these tests. -2. a Jest framework in TypeScript that runs and validate the tests. - -The result is you build your tests as you would with Jest. You can import the JavaScript -agent by using `import * as agent from '@dfinity/agent'` which is as -close as it can be to the real world. - -== Starting / Stopping the Replica - -The `setup` Jest step starts the replica using `dfx replica`. The `teardown` step sends -a SIGTERM to the `dfx` process. Nix will wait for all children and descendants to be -stopped, so Nix will timeout and fail if the replica isn't properly killed. - -== Adding New Tests - -Adding a test is just a matter of having a file with a `.ts` extension anywhere outside -the root directory of tests and the `utils/` folder. This is driven by the -`jest.config.js` file which has a pattern matching all those files. - -We don't force users to have a `.test.ts` extension as this whole folder is meant to be -tests. It's just simpler that way. - -== Using HttpAgent - -The `utils/` folder contain an `agent.ts` file which exports an `HttpAgent` instance -which connects to the testing Replica. Unless required by your test to have a special -agent configuration, you should always reuse that one. - -== Creating and Using Canisters - -Right now, the way to add a canister is to manually build it and check in the canisters -WASM. This is a limitation of the current setup and will (hopefully) go away soon. - -Once the WASM is checked in, a canister `.ts` should be added which exports a factory. -That factory reads the WASM, creates an actor with a random canisterId, builds the IDL -manually (currently) and install the canister on the Replica. A good example of this -can be seen in `utils/canisters/counter.ts`. - -= TODOs - -- [ ] Add a dfx project derivation which generates the WASM and IDL through Nix - so it doesn't have to be checked in. -- [ ] Also, reuse canister IDs exposed by the dfx project derivation above instead - of generating a random one. This is important for testing canisters which - have inter-canister calls. diff --git a/e2e/node/basic/call.ts b/e2e/node/basic/call.ts deleted file mode 100644 index 6fedfde977..0000000000 --- a/e2e/node/basic/call.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { counterFactory } from '../utils/canisters'; - -test('can call a canister', async () => { - let counter = await counterFactory(); - - expect(+(await counter.read())).toEqual(0); - expect(+(await counter.inc_read())).toEqual(1); - await counter.write(10); - expect(+(await counter.read())).toEqual(10); - expect(+(await counter.inc_read())).toEqual(11); -}); diff --git a/e2e/node/default.nix b/e2e/node/default.nix deleted file mode 100644 index e741ace1cf..0000000000 --- a/e2e/node/default.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ pkgs ? import ../../nix { inherit system; } -, system ? builtins.currentSystem -, dfx ? import ../../dfx.nix { inherit pkgs; } -, agent-js ? import ../../nix/agent-js/agent-js.nix { inherit pkgs; } -, agentJsMonorepoTools ? import ../../nix/agent-js/monorepo-tools.nix { inherit pkgs system; } -, src ? (pkgs.lib.noNixFiles (pkgs.lib.gitOnlySource ./.)) -}: -pkgs.napalm.buildPackage src { - root = ./.; - name = "node-e2e-tests"; - buildInputs = [ - dfx.standalone - agent-js - pkgs.python3 - (agentJsMonorepoTools src) - ]; - npmCommands = [ - "npm install" - - # Monkey-patch the agent source into our install dir. napalm is unable - # to include dependencies from package-locks in places other than the - # build root. - ( - pkgs.writeScript "include-agent.sh" '' - #!${pkgs.stdenv.shell} - set -eo pipefail - - agent_node_modules="node_modules/@dfinity/agent" - mkdir -p $agent_node_modules - - tar xvzf ${agent-js.out}/dfinity-*.tgz --strip-component 1 --directory $agent_node_modules/ - cp -R ${agent-js.lib}/node_modules . - '' - ) - "npm run ci" - ]; - - installPhase = '' - echo Done. - touch $out - ''; -} diff --git a/e2e/node/identity/principal.ts b/e2e/node/identity/principal.ts deleted file mode 100644 index 1ab87b3078..0000000000 --- a/e2e/node/identity/principal.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { identityFactory } from '../utils/canisters'; - -test('has the same identity when calling a query or a call function', async () => { - const identity = await identityFactory(); - - const call = await identity.hashFromCall(); - const query = await identity.hashFromQuery(); - - expect(+call).toEqual(+query); -}); diff --git a/e2e/node/jest.config.js b/e2e/node/jest.config.js deleted file mode 100644 index 55ea4dec17..0000000000 --- a/e2e/node/jest.config.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - bail: false, - testTimeout: 60000, - globalSetup: './setup', - globalTeardown: './teardown', - setupFiles: [ - "./test-setup", - ], - setupFilesAfterEnv: [ - "jest-expect-message", - ], - // Since we're running e2e tests, ALL typescript files are up for grab. - testMatch: [ - "**/*.ts" - ], - testPathIgnorePatterns: [ - "/node_modules/", - "/utils/", - ], - transform: { - "^.+\\.ts$": "ts-jest" - } -}; diff --git a/e2e/node/package-lock.json b/e2e/node/package-lock.json deleted file mode 100644 index 57380582b6..0000000000 --- a/e2e/node/package-lock.json +++ /dev/null @@ -1,5174 +0,0 @@ -{ - "name": "@do-not-publish/ic-node-e2e-tests", - "version": "0.0.0-do-not-publish", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "@babel/core": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.6.tgz", - "integrity": "sha512-Sheg7yEJD51YHAvLEV/7Uvw95AeWqYPL3Vk3zGujJKIhJ+8oLw2ALaf3hbucILhKsgSoADOvtKRJuNVdcJkOrg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", - "@babel/helpers": "^7.8.4", - "@babel/parser": "^7.8.6", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.8.6", - "@babel/types": "^7.8.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.6.tgz", - "integrity": "sha512-4bpOR5ZBz+wWcMeVtcf7FbjcFzCp+817z2/gHNncIRcM9MmKzUhtWCYAq27RAfUrAFwb+OCG1s9WEaVxfi6cjg==", - "dev": true, - "requires": { - "@babel/types": "^7.8.6", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", - "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.8.3", - "@babel/template": "^7.8.3", - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", - "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", - "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", - "dev": true - }, - "@babel/helper-split-export-declaration": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", - "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", - "dev": true, - "requires": { - "@babel/types": "^7.8.3" - } - }, - "@babel/helpers": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz", - "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==", - "dev": true, - "requires": { - "@babel/template": "^7.8.3", - "@babel/traverse": "^7.8.4", - "@babel/types": "^7.8.3" - } - }, - "@babel/highlight": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", - "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.6.tgz", - "integrity": "sha512-trGNYSfwq5s0SgM1BMEB8hX3NDmO7EP2wsDGDexiaKMB92BaRpS+qZfpkMqUBhcsOTBwNy9B/jieo4ad/t/z2g==", - "dev": true - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/template": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", - "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6" - } - }, - "@babel/traverse": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", - "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.8.6", - "@babel/helper-function-name": "^7.8.3", - "@babel/helper-split-export-declaration": "^7.8.3", - "@babel/parser": "^7.8.6", - "@babel/types": "^7.8.6", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.6.tgz", - "integrity": "sha512-wqz7pgWMIrht3gquyEFPVXeXCti72Rm8ep9b5tQKz9Yg9LzJA3HxosF1SB3Kc81KD1A3XBkkVYtJvCKS2Z/QrA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@trust/keyto": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@trust/keyto/-/keyto-0.3.7.tgz", - "integrity": "sha512-t5kWWCTkPgg24JWVuCTPMx7l13F7YHdxBeJkT1vmoHjROgiOIEAN8eeY+iRmP1Hwsx+S7U55HyuqSsECr08a8A==", - "dev": true, - "requires": { - "asn1.js": "^5.0.1", - "base64url": "^3.0.1", - "elliptic": "^6.4.1" - } - }, - "@trust/webcrypto": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@trust/webcrypto/-/webcrypto-0.9.2.tgz", - "integrity": "sha512-5iMAVcGYKhqLJGjefB1nzuQSqUJTru0nG4CytpBT/GGp1Piz/MVnj2jORdYf4JBYzggCIa8WZUr2rchP2Ngn/w==", - "dev": true, - "requires": { - "@trust/keyto": "^0.3.4", - "base64url": "^3.0.0", - "elliptic": "^6.4.0", - "node-rsa": "^0.4.0", - "text-encoding": "^0.6.1" - }, - "dependencies": { - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - } - } - }, - "@types/babel__core": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.6.tgz", - "integrity": "sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.9.tgz", - "integrity": "sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/base64-js": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/base64-js/-/base64-js-1.2.5.tgz", - "integrity": "sha1-WCskdhaabLpGCiFNR2x0REHYc9U=", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "24.9.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.9.1.tgz", - "integrity": "sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q==", - "dev": true, - "requires": { - "jest-diff": "^24.3.0" - } - }, - "@types/node": { - "version": "13.7.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", - "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==", - "dev": true - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true - }, - "@types/yargs": { - "version": "13.0.8", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.8.tgz", - "integrity": "sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true - }, - "abab": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", - "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", - "dev": true - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.3.0.tgz", - "integrity": "sha512-WHnQJFcOrIWT1RLOkFFBQkFVvyt9BPOOrH+Dp152Zk4R993rSzXUGPmkybIcUFhHE2d/iHH+nCaOWVCDbO8fgA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - } - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "dev": true, - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - }, - "dependencies": { - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "dev": true, - "requires": { - "@types/babel__traverse": "^7.0.6" - } - } - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", - "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", - "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", - "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-escaper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", - "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "dev": true, - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "dev": true, - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "dev": true, - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - } - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", - "dev": true - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "dev": true, - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "dev": true, - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "dev": true, - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "dev": true, - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", - "dev": true - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "dev": true, - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "dev": true, - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@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" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-expect-message": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz", - "integrity": "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==", - "dev": true - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", - "dev": true - }, - "jest-pnp-resolver": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz", - "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", - "dev": true, - "requires": { - "mime-db": "1.43.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-rsa": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-0.4.2.tgz", - "integrity": "sha1-1jkXKewWqDDtWjgEKzFX0tXXJTA=", - "dev": true, - "requires": { - "asn1": "0.2.3" - }, - "dependencies": { - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - } - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "prompts": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", - "integrity": "sha512-qIP2lQyCwYbdzcqHIUi2HAxiWixhoM9OdLCWf8txXsapC/X9YdsCoeyRIXE/GP+Q0J37Q7+XN/MFqbUa7IzXNA==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "react-is": { - "version": "16.13.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.0.tgz", - "integrity": "sha512-GFMtL0vHkiBv9HluwNZTggSn/sCyEt9n02aM0dSAjGGyqyNlAyftYm4phPxdvCigG15JreC5biwxCgTAJZ7yAA==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "dev": true, - "requires": { - "util.promisify": "^1.0.0" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "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" - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sisteransi": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", - "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "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": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "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": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "text-encoding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", - "dev": true - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "ts-jest": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", - "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", - "dev": true, - "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "json5": "2.x", - "lodash.memoize": "4.x", - "make-error": "1.x", - "mkdirp": "0.x", - "resolve": "1.x", - "semver": "^5.5", - "yargs-parser": "10.x" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, - "requires": { - "browser-process-hrtime": "^0.1.2" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } - }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/e2e/node/package.json b/e2e/node/package.json deleted file mode 100644 index 6629949a4d..0000000000 --- a/e2e/node/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "private": true, - "name": "@do-not-publish/ic-node-e2e-tests", - "version": "0.0.0-do-not-publish", - "scripts": { - "ci": "npm run test", - "test": "jest --verbose" - }, - "dependencies": {}, - "devDependencies": { - "@trust/webcrypto": "^0.9.2", - "@types/base64-js": "^1.2.5", - "@types/jest": "^24.0.18", - "@types/node": "^13.7.7", - "jest": "^24.9.0", - "jest-expect-message": "^1.0.2", - "node-fetch": "2.6.0", - "prettier": "^1.19.1", - "text-encoding": "^0.7.0", - "ts-jest": "^24.2.0", - "tslint": "^5.20.0", - "typescript": "^3.6.3", - "whatwg-fetch": "^3.0.0" - } -} diff --git a/e2e/node/setup.js b/e2e/node/setup.js deleted file mode 100644 index b5ba53d539..0000000000 --- a/e2e/node/setup.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = function() { - // Run the Replica by using `dfx start`. - const { spawn } = require('child_process'); - global.replicaProcess = spawn('dfx', ['replica', '--port=8080'], { stdio: 'inherit' }); - - return new Promise(resolve => setTimeout(resolve, 5000)); -}; diff --git a/e2e/node/teardown.js b/e2e/node/teardown.js deleted file mode 100644 index 472fde9baf..0000000000 --- a/e2e/node/teardown.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = function() { - // Sending SIGINT here since the Replica process isn't actually the replica - // but `dfx replica`, which should be interupted to clean up properly. - // (ie. if directly killed it will keep the replica process running in - // the background). - global.replicaProcess.kill('SIGTERM'); - - // Give the replica a second to gather its things and quit. - // We unfortunately cannot exit our own process here because we don't know - // the status of the tests (fail/success). - return new Promise(resolve => setTimeout(resolve, 1000)); -}; diff --git a/e2e/node/test-setup.js b/e2e/node/test-setup.js deleted file mode 100644 index 1e35618217..0000000000 --- a/e2e/node/test-setup.js +++ /dev/null @@ -1,12 +0,0 @@ -// This file may be used to polyfill features that aren't available in the test -// environment, i.e. JSDom. -// -// We sometimes need to do this because our target browsers are expected to have -// a feature that JSDom doesn't. -// -// Note that we can use webpack configuration to make some features available to -// Node.js in a similar way. - -window.crypto = require('@trust/webcrypto'); -window.TextEncoder = require('text-encoding').TextEncoder; -window.fetch = require('node-fetch'); diff --git a/e2e/node/tsconfig.json b/e2e/node/tsconfig.json deleted file mode 100644 index 555dcc808f..0000000000 --- a/e2e/node/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "incremental": true, - "target": "es2017", - "module": "commonjs", - "lib": [ - "dom", - "es2017" - ], - "declaration": true, - "sourceMap": true, - "tsBuildInfoFile": "./build_info.json", - "strict": true, - "baseUrl": "./", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - } -} diff --git a/e2e/node/utils/agent.ts b/e2e/node/utils/agent.ts deleted file mode 100644 index 421849ec7a..0000000000 --- a/e2e/node/utils/agent.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { - HttpAgent, - Principal, - generateKeyPair, - makeAuthTransform, - makeNonceTransform, -} from '@dfinity/agent'; - -const keyPair = generateKeyPair(); -const principal = Principal.selfAuthenticating(keyPair.publicKey); - -export const httpAgent = new HttpAgent({ host: 'http://localhost:8080', principal }); -httpAgent.addTransform(makeNonceTransform()); -httpAgent.setAuthTransform(makeAuthTransform(keyPair)); \ No newline at end of file diff --git a/e2e/node/utils/canisters/counter.ts b/e2e/node/utils/canisters/counter.ts deleted file mode 100644 index b106a31170..0000000000 --- a/e2e/node/utils/canisters/counter.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Actor, IDL, blobFromUint8Array } from '@dfinity/agent'; -import * as path from 'path'; -import { readFileSync } from 'fs'; -import { httpAgent } from '../agent'; - -const wasm = readFileSync(path.join(__dirname, 'counter.wasm')); - -type CounterActor = Actor & { - read(): Promise; - inc_read(): Promise; - inc(): Promise; - write(n: number): Promise; -}; - -const factory: IDL.InterfaceFactory = ({ IDL }) => - IDL.Service({ - read: IDL.Func([], [IDL.Nat], ['query']), - inc_read: IDL.Func([], [IDL.Nat], []), - inc: IDL.Func([], [], []), - write: IDL.Func([IDL.Nat], [], []), - }); - -// TODO(hansl): Add a type to create an Actor interface from a IDL.Service definition. -export async function counterFactory(): Promise { - return ((await Actor.createAndInstallCanister( - factory, - { - module: blobFromUint8Array(wasm), - }, - { - agent: httpAgent, - }, - )) as unknown) as CounterActor; -} diff --git a/e2e/node/utils/canisters/counter.wasm b/e2e/node/utils/canisters/counter.wasm deleted file mode 100644 index 9653efbc6e6b03434517940e5c01456d114d7d06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54786 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 diff --git a/e2e/node/utils/canisters/identity.ts b/e2e/node/utils/canisters/identity.ts deleted file mode 100644 index d3b2200c05..0000000000 --- a/e2e/node/utils/canisters/identity.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Actor, IDL, blobFromUint8Array } from '@dfinity/agent'; -import * as path from 'path'; -import { readFileSync } from 'fs'; -import { httpAgent } from '../agent'; -import { default as factory, Identity } from './identity/main.did'; - -const wasm = readFileSync(path.join(__dirname, 'identity/main.wasm')); - -// TODO(hansl): Add a type to create an Actor interface from a IDL.Service definition. -export async function identityFactory(): Promise { - return ((await Actor.createAndInstallCanister( - factory, - { - module: blobFromUint8Array(wasm), - }, - { - agent: httpAgent, - }, - )) as unknown) as Identity; -} diff --git a/e2e/node/utils/canisters/identity/main.did.ts b/e2e/node/utils/canisters/identity/main.did.ts deleted file mode 100644 index c55d43eb19..0000000000 --- a/e2e/node/utils/canisters/identity/main.did.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Actor, IDL } from '@dfinity/agent'; - -export type Identity = Actor & { - hashFromCall(): Promise; - hashFromQuery(): Promise; -}; - -const factory: IDL.InterfaceFactory = ({ IDL }: any) => { - return IDL.Service({ - hashFromCall: IDL.Func([], [IDL.Nat], []), - hashFromQuery: IDL.Func([], [IDL.Nat], ['query']), - }); -}; -export default factory; diff --git a/e2e/node/utils/canisters/identity/main.mo b/e2e/node/utils/canisters/identity/main.mo deleted file mode 100644 index 41c00475ab..0000000000 --- a/e2e/node/utils/canisters/identity/main.mo +++ /dev/null @@ -1,11 +0,0 @@ -import Prim "mo:prim"; -import P "mo:base/Principal"; - -actor { - public shared(msg) func hashFromCall(): async Nat { - Prim.word32ToNat(P.hash(msg.caller)) - }; - public shared query(msg) func hashFromQuery() : async Nat { - Prim.word32ToNat(P.hash(msg.caller)) - }; -}; diff --git a/e2e/node/utils/canisters/identity/main.wasm b/e2e/node/utils/canisters/identity/main.wasm deleted file mode 100644 index 37ac09bf932d3c410146dd59deedd9a4bbb02302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92274 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%0DY&7jcA)5gTi6oIyOfer)WW*e@Y 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 Pd6brYRLcCno5}wNU1Zl= diff --git a/e2e/node/utils/canisters/index.ts b/e2e/node/utils/canisters/index.ts deleted file mode 100644 index e789a2d1ee..0000000000 --- a/e2e/node/utils/canisters/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './counter'; -export * from './identity'; From 2f11bb6f42ed8a530b1a401ab148733b7c6b9b12 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 8 Sep 2020 11:45:21 -0700 Subject: [PATCH 31/36] Add configureScript to agent-js-monorepo to fix npm trying to write to $HOME --- nix/agent-js/agent-js-monorepo.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index a7a943a5f0..e7ea4a6d28 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -17,6 +17,9 @@ let "agent" "bootstrap" ]; + configureScript = (builtins.toFile "tmp-nix-configure.sh" '' + export HOME=$(mktemp -d) + ''); installPhase = '' # $out: Everything! mkdir -p $out From eb6c2cb6b64e0ea62003aa65ae104dd5721542f7 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Tue, 8 Sep 2020 11:53:15 -0700 Subject: [PATCH 32/36] fmt nix/agent-js/\*.nix with nixfmt --- nix/agent-js/agent-js-monorepo.nix | 15 +++-------- nix/agent-js/agent-js.nix | 29 +++++++++------------ nix/agent-js/bootstrap-js.nix | 13 ++++------ nix/agent-js/monorepo-tools.nix | 41 +++++++++++++++--------------- 4 files changed, 41 insertions(+), 57 deletions(-) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index e7ea4a6d28..8972f3d0a9 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -8,18 +8,11 @@ let monorepo = pkgs.napalm.buildPackage agent-js-monorepo-src { name = "agent-js-monorepo"; - propagatedBuildInputs = [ - (agentJsMonorepoTools agent-js-monorepo-src) - ]; - outputs = [ - "out" - "lib" - "agent" - "bootstrap" - ]; - configureScript = (builtins.toFile "tmp-nix-configure.sh" '' + propagatedBuildInputs = [ (agentJsMonorepoTools agent-js-monorepo-src) ]; + outputs = [ "out" "lib" "agent" "bootstrap" ]; + configureScript = builtins.toFile "tmp-nix-configure.sh" '' export HOME=$(mktemp -d) - ''); + ''; installPhase = '' # $out: Everything! mkdir -p $out diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix index e4f9c7e873..6c334fb836 100644 --- a/nix/agent-js/agent-js.nix +++ b/nix/agent-js/agent-js.nix @@ -1,34 +1,29 @@ -{ pkgs ? import ../. { inherit system; } -, system ? builtins.currentSystem -}: +{ pkgs ? import ../. { inherit system; }, system ? builtins.currentSystem }: pkgs.stdenv.mkDerivation { name = "agent-js-monorepo-package-agent"; - src = "${pkgs.agent-js-monorepo}/packages/agent"; - buildInputs = [ pkgs.nodejs ]; + src = "${pkgs.agent-js-monorepo}"; outputs = [ "out" "lib" ]; - buildPhase = '' - # Don't run `npm run build` here, which will call `tsc -b`. - # `tsc -b` will use typescript project references to build things, - # which may try to read from other packages, which will fail due to writing in an external nix store. - # We expect pkgs.agent-js-monorepo to have already taken care of the `npm install` part of fetching deps. + buildInputs = [ + pkgs.nodejs + pkgs.agent-js-monorepo + ]; + configurePhase = '' + export HOME=$(mktemp -d) ''; installPhase = '' # $out: everything mkdir -p $out - cp -R ./* $out/ - - # back compat required for ../../e2e/node/default.nix: https://github.com/dfinity-lab/sdk/blob/20f051aad0f37d16f040a2c9a54e79db7378492d/src/agent/javascript/default.nix#L33 - npm pack - cp dfinity-*.tgz $out + cp -R ${pkgs.agent-js-monorepo.agent}/* $out/ # $lib/node_modules: node_modules dir that must be resolvable by npm # for future build steps to work (e.g. at ../../node_modules) mkdir -p $lib - if test -d node_modules; then - cp -R node_modules $lib; + agent_node_modules="${pkgs.agent-js-monorepo}/packages/agent/node_modules" + if test -d "$agent_node_modules"; then + cp -R "$agent_node_modules" $lib; fi ''; } diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index fc1d4c25bc..e7d18d4aa0 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -1,14 +1,9 @@ -{ pkgs ? import ../. { inherit system; } -, system ? builtins.currentSystem -}: +{ pkgs ? import ../. { inherit system; }, system ? builtins.currentSystem }: pkgs.stdenv.mkDerivation { name = "agent-js-monorepo-package-bootstrap"; - src = "${pkgs.agent-js-monorepo}/packages/bootstrap/"; + src = "${pkgs.agent-js-monorepo}"; buildInputs = [ pkgs.nodejs ]; - outputs = [ - "out" - "lib" - ]; + outputs = [ "out" "lib" ]; buildPhase = '' # Don't run `npm run build` here, which will call `tsc -b`. # `tsc -b` will use typescript project references to build things, @@ -16,6 +11,8 @@ pkgs.stdenv.mkDerivation { # We expect pkgs.agent-js-monorepo to have already taken care of the `npm install` part of fetching deps. ''; installPhase = '' + cd packages/bootstrap + # $out: everything mkdir -p $out cp -R ./* $out/ diff --git a/nix/agent-js/monorepo-tools.nix b/nix/agent-js/monorepo-tools.nix index 7bb4d7af7d..53299eac60 100644 --- a/nix/agent-js/monorepo-tools.nix +++ b/nix/agent-js/monorepo-tools.nix @@ -1,27 +1,26 @@ -{ pkgs ? import ../. { inherit system; } -, system ? builtins.currentSystem -}: +{ pkgs ? import ../. { inherit system; }, system ? builtins.currentSystem }: let # derivation that has all system dependencies required to build the npm monorepo: # * npm requires python3 to build with gyp # * on mac, npm may try to use fsevents - agentJsMonorepoTools = src: pkgs.stdenv.mkDerivation { - inherit src; - name = "agent-js-monorepo-systemRequirements"; - propagatedNativeBuildInputs = [ - # Required by node-gyp - pkgs.python3 - ]; - propagatedBuildInputs = [ - ( - pkgs.lib.optional pkgs.stdenv.isDarwin - # Required by fsevents - pkgs.darwin.apple_sdk.frameworks.CoreServices - ) - ]; - installPhase = '' - mkdir -p $out - ''; - }; + agentJsMonorepoTools = src: + pkgs.stdenv.mkDerivation { + inherit src; + name = "agent-js-monorepo-systemRequirements"; + propagatedNativeBuildInputs = [ + # Required by node-gyp + pkgs.python3 + ]; + propagatedBuildInputs = [ + ( + pkgs.lib.optional pkgs.stdenv.isDarwin + # Required by fsevents + pkgs.darwin.apple_sdk.frameworks.CoreServices + ) + ]; + installPhase = '' + mkdir -p $out + ''; + }; in agentJsMonorepoTools From 64eff051da0a3f6a593bd31229bed9736d162a1d Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Wed, 9 Sep 2020 08:39:58 -0700 Subject: [PATCH 33/36] Fix assets.bootstrap fs layout breaking frontend.bats test --- assets.nix | 2 +- nix/agent-js/agent-js-monorepo.nix | 3 ++- nix/agent-js/bootstrap-js.nix | 35 ++++++++++++++++++++++-------- nix/sources.json | 2 +- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/assets.nix b/assets.nix index 4b573cbedf..13a1ccf914 100644 --- a/assets.nix +++ b/assets.nix @@ -14,7 +14,7 @@ pkgs.runCommandNoCCLocal "assets" {} '' # Install bootstrap mkdir $out/bootstrap - cp -R ${bootstrap-js.out}/* $out/bootstrap/ + cp -R ${bootstrap-js.dist}/* $out/bootstrap/ cp -R ${distributed-canisters} $out/canisters '' diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 8972f3d0a9..bb520d735c 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -29,7 +29,8 @@ let # $bootstrap: npm subpackage @dfinity/bootstrap mkdir -p $bootstrap - cp -R node_modules $bootstrap/ + cp -R $out/node_modules $bootstrap/ + cp -R node_modules/* $bootstrap/node_modules/ cp -R ./packages/bootstrap/* $bootstrap/ ''; }; diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index e7d18d4aa0..2728920aa8 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -2,20 +2,28 @@ pkgs.stdenv.mkDerivation { name = "agent-js-monorepo-package-bootstrap"; src = "${pkgs.agent-js-monorepo}"; - buildInputs = [ pkgs.nodejs ]; - outputs = [ "out" "lib" ]; + buildInputs = [ + pkgs.agent-js-monorepo + pkgs.nodejs + ]; + outputs = [ + "out" + "lib" + "dist" + ]; + configurePhase = '' + export HOME=$(mktemp -d) + ''; + unpackPhase = '' + mkdir bootstrap-bundle + cp -R ${pkgs.agent-js-monorepo}/* bootstrap-bundle/ + ''; buildPhase = '' - # Don't run `npm run build` here, which will call `tsc -b`. - # `tsc -b` will use typescript project references to build things, - # which may try to read from other packages, which will fail due to writing in an external nix store. - # We expect pkgs.agent-js-monorepo to have already taken care of the `npm install` part of fetching deps. ''; installPhase = '' - cd packages/bootstrap - # $out: everything mkdir -p $out - cp -R ./* $out/ + cp -R ${pkgs.agent-js-monorepo.bootstrap}/* $out/ # $lib/node_modules: node_modules dir that must be resolvable by npm # for future build steps to work (e.g. at ../../node_modules) @@ -23,5 +31,14 @@ pkgs.stdenv.mkDerivation { if test -d node_modules; then cp -R node_modules $lib; fi + + # $dist: Store src files as outputed from typescript compiler + mkdir -p $dist + ls -alh + dist_src="bootstrap-bundle/packages/bootstrap/ts-out/src" + ls -alh $dist_src + if test -d "$dist_src"; then + cp -R $dist_src/* $dist/ + fi ''; } diff --git a/nix/sources.json b/nix/sources.json index 536cf60f35..a7ce0fd2e1 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "38d47f8c0f20c5ab827edb7c27029736659d34f4", + "rev": "cca8d022693ef940d4ebe941b57a4d2a30912fcd", "type": "git" }, "bats-support": { From 45fc2e89523e05979f6c36e980af93cc99de3b28 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Wed, 9 Sep 2020 14:13:17 -0700 Subject: [PATCH 34/36] update ref on agent-js-monorepo and make nixes pass --- nix/agent-js/agent-js-monorepo.nix | 1 - nix/agent-js/bootstrap-js.nix | 6 +----- nix/sources.json | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index bb520d735c..1ba4efd03e 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -30,7 +30,6 @@ let # $bootstrap: npm subpackage @dfinity/bootstrap mkdir -p $bootstrap cp -R $out/node_modules $bootstrap/ - cp -R node_modules/* $bootstrap/node_modules/ cp -R ./packages/bootstrap/* $bootstrap/ ''; }; diff --git a/nix/agent-js/bootstrap-js.nix b/nix/agent-js/bootstrap-js.nix index 2728920aa8..db647aac22 100644 --- a/nix/agent-js/bootstrap-js.nix +++ b/nix/agent-js/bootstrap-js.nix @@ -18,8 +18,6 @@ pkgs.stdenv.mkDerivation { mkdir bootstrap-bundle cp -R ${pkgs.agent-js-monorepo}/* bootstrap-bundle/ ''; - buildPhase = '' - ''; installPhase = '' # $out: everything mkdir -p $out @@ -34,9 +32,7 @@ pkgs.stdenv.mkDerivation { # $dist: Store src files as outputed from typescript compiler mkdir -p $dist - ls -alh - dist_src="bootstrap-bundle/packages/bootstrap/ts-out/src" - ls -alh $dist_src + dist_src="bootstrap-bundle/packages/bootstrap/dist" if test -d "$dist_src"; then cp -R $dist_src/* $dist/ fi diff --git a/nix/sources.json b/nix/sources.json index a7ce0fd2e1..ecaec21d77 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -15,7 +15,7 @@ "agent-js-monorepo": { "ref": "master", "repo": "ssh://git@github.com/dfinity-lab/agent-js", - "rev": "cca8d022693ef940d4ebe941b57a4d2a30912fcd", + "rev": "5799552008dff90ee2fcc4de06206a0fa2ee77d1", "type": "git" }, "bats-support": { From 088fe366b2c391e82254a9dbe1096308218cef08 Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Wed, 9 Sep 2020 14:23:30 -0700 Subject: [PATCH 35/36] agent-js-monorepo does npm install --ignore scripts once before regular install, allowing for patchShebangs --- nix/agent-js/agent-js-monorepo.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nix/agent-js/agent-js-monorepo.nix b/nix/agent-js/agent-js-monorepo.nix index 1ba4efd03e..4f7624deaa 100644 --- a/nix/agent-js/agent-js-monorepo.nix +++ b/nix/agent-js/agent-js-monorepo.nix @@ -13,6 +13,14 @@ let configureScript = builtins.toFile "tmp-nix-configure.sh" '' export HOME=$(mktemp -d) ''; + npmCommands = [ + # Do this with --ignore-scripts to ensure we fetch deps, but don't trigger any npm scripts. + # This is to allow for npm scripts that depend on dep's npm bin scripts. + # Those scripts may have shebangs in them, and nix can only patchShebangs after each command. + # So we fetch deps, let it patchShebangs, and then npm install again w/ postinstall scripts + "npm install --ignore-scripts" + "npm install" + ]; installPhase = '' # $out: Everything! mkdir -p $out From fae073ee8667daf6d88010ff164ea1037394777b Mon Sep 17 00:00:00 2001 From: Benjamin Goering Date: Wed, 9 Sep 2020 15:39:37 -0700 Subject: [PATCH 36/36] rm nix/agent-js/agent-js.nix, which is not used by anything (#1008) --- default.nix | 1 - nix/agent-js/agent-js.nix | 29 ----------------------------- 2 files changed, 30 deletions(-) delete mode 100644 nix/agent-js/agent-js.nix diff --git a/default.nix b/default.nix index 9a61398dc7..685c866c30 100644 --- a/default.nix +++ b/default.nix @@ -14,7 +14,6 @@ rec { # Agents in varous languages agent-js-monorepo = pkgs.agent-js-monorepo; - agent-js = import ./nix/agent-js/agent-js.nix { inherit system pkgs; }; # Bootstrap frontend. bootstrap-js = import ./nix/agent-js/bootstrap-js.nix { inherit system pkgs; }; diff --git a/nix/agent-js/agent-js.nix b/nix/agent-js/agent-js.nix deleted file mode 100644 index 6c334fb836..0000000000 --- a/nix/agent-js/agent-js.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ pkgs ? import ../. { inherit system; }, system ? builtins.currentSystem }: -pkgs.stdenv.mkDerivation { - name = "agent-js-monorepo-package-agent"; - src = "${pkgs.agent-js-monorepo}"; - outputs = [ - "out" - "lib" - ]; - buildInputs = [ - pkgs.nodejs - pkgs.agent-js-monorepo - ]; - configurePhase = '' - export HOME=$(mktemp -d) - ''; - installPhase = '' - # $out: everything - mkdir -p $out - cp -R ${pkgs.agent-js-monorepo.agent}/* $out/ - - # $lib/node_modules: node_modules dir that must be resolvable by npm - # for future build steps to work (e.g. at ../../node_modules) - mkdir -p $lib - agent_node_modules="${pkgs.agent-js-monorepo}/packages/agent/node_modules" - if test -d "$agent_node_modules"; then - cp -R "$agent_node_modules" $lib; - fi - ''; -}