From b00eb954abdf371ee78fac6abfbbe9bf6e7f1b44 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:05:34 -0700 Subject: [PATCH 001/108] add base action script --- .github/workflows/test.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000000..cb3623e7f6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,33 @@ +# This is a basic workflow to help you get started with Actions + +name: CI-testing + +# Controls when the action will run. Triggers the workflow on push or pull request +# events +on: + push: + branches: [ develop, master ] + pull_request: + branches: [ develop, master ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. From 4b6e8673f0529eb51b36d4fc6444f16996e5fb3b Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:09:56 -0700 Subject: [PATCH 002/108] add dependency install step --- .github/workflows/test.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cb3623e7f6..0024adf931 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,6 +22,17 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + - name: Install dependencies + run: | + gem install coveralls-lcov + pip install coveralls + nvm install $TRAVIS_NODE_VERSION + npm install -g bower + npm install -g grunt-cli + npm install -g karma-cli + + + # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! From ed8ff0daf98725251230439ddd6b323aef8b0f3e Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:23:11 -0700 Subject: [PATCH 003/108] tweak deps --- .github/workflows/test.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0024adf931..3b0cc1b432 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,11 +22,10 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + # gem install coveralls-lcov + # pip install coveralls - name: Install dependencies run: | - gem install coveralls-lcov - pip install coveralls - nvm install $TRAVIS_NODE_VERSION npm install -g bower npm install -g grunt-cli npm install -g karma-cli From 4236a939cc3330d50b34e99908e7324b7ee976fd Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:31:26 -0700 Subject: [PATCH 004/108] tweak deps some more, add conda --- .github/workflows/test.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b0cc1b432..64223dd54f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,11 +24,21 @@ jobs: # gem install coveralls-lcov # pip install coveralls - - name: Install dependencies + # npm install -g bower + # npm install -g grunt-cli + # npm install -g karma-cli + - name: Install JS dependencies run: | - npm install -g bower - npm install -g grunt-cli - npm install -g karma-cli + bower install + npm ci + + - name: Create conda environment + run: | + conda config --set always_yes yes --set changeps1 no + conda update -q conda + conda info -a + conda create -q -n test-environment python=3.6.10 + conda activate test-environment From 50713705ff4114b7308c453a52b0f5eb37cecb1f Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:33:52 -0700 Subject: [PATCH 005/108] add node env --- .github/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 64223dd54f..7ceb3be860 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,6 +22,11 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + - name: Use Node js 10.x + uses: actions/setup-node@v1 + with: + node-version: 10.x + # gem install coveralls-lcov # pip install coveralls # npm install -g bower From 02cde11a6f1f5fe7287f43ff580142eb9949f1e4 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:39:53 -0700 Subject: [PATCH 006/108] reverse dep order --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7ceb3be860..2a1891731d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,8 +34,8 @@ jobs: # npm install -g karma-cli - name: Install JS dependencies run: | - bower install npm ci + bower install - name: Create conda environment run: | From 9e19c413aa7200091155c4b98f27ee1e37a18010 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:42:46 -0700 Subject: [PATCH 007/108] coax bower into installing --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2a1891731d..d4ffcd3bed 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -35,7 +35,8 @@ jobs: - name: Install JS dependencies run: | npm ci - bower install + npm install bower + ./node_modules/bower/bin/bower install - name: Create conda environment run: | From e047e098a8adbbafb08cc5a37e40c1362e8985d3 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 14:47:16 -0700 Subject: [PATCH 008/108] js deps work, on to conda --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d4ffcd3bed..db451d0c1f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,7 @@ jobs: conda update -q conda conda info -a conda create -q -n test-environment python=3.6.10 - conda activate test-environment + source activate test-environment From 25baab6a50b80eb614511980069a7d5f6456987b Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 15:09:42 -0700 Subject: [PATCH 009/108] another conda test --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db451d0c1f..8601e94470 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,8 @@ jobs: conda update -q conda conda info -a conda create -q -n test-environment python=3.6.10 - source activate test-environment + conda init + conda activate test-environment From 1f46b750ec76f9e6e398550117c479f004373f7b Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 15:34:14 -0700 Subject: [PATCH 010/108] try miniconda action --- .github/workflows/test.yml | 22 +++++++++++++--------- test/condarc.yml | 3 +++ 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 test/condarc.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8601e94470..a6ae9da260 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,6 +21,14 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + - uses: goanpeca/setup-miniconda@v1 + with: + miniconda-version: 'latest' + activate-environment: test-environment + python-version: 3.6.10 + auto-activate-base: false + auto-update-conda: true + condarc-file: test/condarc.yml - name: Use Node js 10.x uses: actions/setup-node@v1 @@ -38,16 +46,12 @@ jobs: npm install bower ./node_modules/bower/bin/bower install - - name: Create conda environment + - name: Install Python deps + shell: bash -l {0} run: | - conda config --set always_yes yes --set changeps1 no - conda update -q conda - conda info -a - conda create -q -n test-environment python=3.6.10 - conda init - conda activate test-environment - - + conda info + conda list + conda env list # Runs a single command using the runners shell - name: Run a one-line script diff --git a/test/condarc.yml b/test/condarc.yml new file mode 100644 index 0000000000..d0d3206d75 --- /dev/null +++ b/test/condarc.yml @@ -0,0 +1,3 @@ +# Used for testing in Github Actions +changeps1: False +always_yes: True From 7fd8a97c3f5c3bc10c6176ad9c43a0bf4c1847e4 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 15:39:46 -0700 Subject: [PATCH 011/108] run the narrative installer --- .github/workflows/test.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a6ae9da260..da7466b1c8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -46,12 +46,14 @@ jobs: npm install bower ./node_modules/bower/bin/bower install - - name: Install Python deps + - name: Install Narrative Application shell: bash -l {0} run: | - conda info - conda list - conda env list + bash ./scripts/install_narrative.sh + grunt minify + sed src/config.json "s/{{ .Env.CONFIG_ENV }}/dev/" + sed -i 's/{{ if ne .Env.CONFIG_ENV "prod" }} true {{- else }} false {{- end }}/true/' src/config.json + jupyter notebook --version # Runs a single command using the runners shell - name: Run a one-line script From ec55cd345f85a161bfdd1d0f2324802850d19006 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 21 May 2020 15:47:24 -0700 Subject: [PATCH 012/108] add make test to the runner... --- .github/workflows/test.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index da7466b1c8..7dd2651b5d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,12 +55,6 @@ jobs: sed -i 's/{{ if ne .Env.CONFIG_ENV "prod" }} true {{- else }} false {{- end }}/true/' src/config.json jupyter notebook --version - # Runs a single command using the runners shell - - name: Run a one-line script - run: echo Hello, world! - - # Runs a set of commands using the runners shell - - name: Run a multi-line script - run: | - echo Add other actions to build, - echo test, and deploy your project. + - name: Run Narrative Test Suite + shell: bash -l {0} + run: make test From 31de8b3b0d893a8831ad6ff2a19de8538d5b37c6 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 10:20:45 -0700 Subject: [PATCH 013/108] set up coveralls --- .github/workflows/test.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7dd2651b5d..ef5d9c4a91 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,3 +58,15 @@ jobs: - name: Run Narrative Test Suite shell: bash -l {0} run: make test + + - name: Combine coverage results + uses: + shell: bash -l {0} + run: | + coveralls-lcov -v -n js-coverage/lcov/lcov.info > js-coverage.json + coveralls --merge js-coverage.json + + - name: Send to coveralls.io + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} From f5e5389474c7fce836cf2910471dcb6f83ad4a03 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 10:26:26 -0700 Subject: [PATCH 014/108] set up ruby correctly for coveralls-lcov converter --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ef5d9c4a91..b3558b697d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,9 +60,10 @@ jobs: run: make test - name: Combine coverage results - uses: + uses: actions/setup-ruby@v1 shell: bash -l {0} run: | + gem install coveralls-lcov coveralls-lcov -v -n js-coverage/lcov/lcov.info > js-coverage.json coveralls --merge js-coverage.json From 9ec66a775cffa82fb515a3575fa74c2611b93310 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 10:30:47 -0700 Subject: [PATCH 015/108] correct the formatting --- .github/workflows/test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3558b697d..899f13fe76 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -59,8 +59,12 @@ jobs: shell: bash -l {0} run: make test - - name: Combine coverage results + - name: Setup Ruby for coverage mapping uses: actions/setup-ruby@v1 + with: + ruby-version: 2.6 + + - name: Combine coverage results shell: bash -l {0} run: | gem install coveralls-lcov From 87a219dd4056d2a42015b4b3cb3b95482bc53a7c Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 10:31:33 -0700 Subject: [PATCH 016/108] yaml spacing --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 899f13fe76..d2b48411a4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,8 +61,8 @@ jobs: - name: Setup Ruby for coverage mapping uses: actions/setup-ruby@v1 - with: - ruby-version: 2.6 + with: + ruby-version: 2.6 - name: Combine coverage results shell: bash -l {0} From 2cd5d2064cc148d253c947fdf7fd6874537b5886 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 11:32:20 -0700 Subject: [PATCH 017/108] try with "parallel" coveralls (not really parallel, but w/e) --- .github/workflows/test.yml | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d2b48411a4..f317f3e6cb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,8 +12,7 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" - build: + build-and-test: # The type of runner that the job will run on runs-on: ubuntu-latest @@ -55,23 +54,36 @@ jobs: sed -i 's/{{ if ne .Env.CONFIG_ENV "prod" }} true {{- else }} false {{- end }}/true/' src/config.json jupyter notebook --version - - name: Run Narrative Test Suite + - name: Run Narrative Backend Unit Tests shell: bash -l {0} - run: make test + run: make test-backend - - name: Setup Ruby for coverage mapping - uses: actions/setup-ruby@v1 + - name: Coveralls Backend + uses: coverallsapp/github-action@master with: - ruby-version: 2.6 + github-token: ${{ secrets.GITHUB_TOKEN }} + flag-name: run-backend + parallel: true + path-to-lcov: ./cover/status.json - - name: Combine coverage results + - name: Run Narrative Frontend Unit Tests shell: bash -l {0} - run: | - gem install coveralls-lcov - coveralls-lcov -v -n js-coverage/lcov/lcov.info > js-coverage.json - coveralls --merge js-coverage.json + run: make test-frontend-unit - - name: Send to coveralls.io + - name: Coveralls Frontend uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} + flag-name: run-frontend-unit + parallel: true + path-to-lcov: ./js-coverage/lcov/lcov.info + + finish: + needs: build-and-test + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true From d92d0f4354ef96c2a1d5eb85a7ed09e667a7a31f Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 12:24:15 -0700 Subject: [PATCH 018/108] try with codecov --- .github/workflows/test.yml | 67 ++++++++++++++++++------------ scripts/narrative_backend_tests.sh | 2 +- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f317f3e6cb..1afdb805b0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -54,36 +54,49 @@ jobs: sed -i 's/{{ if ne .Env.CONFIG_ENV "prod" }} true {{- else }} false {{- end }}/true/' src/config.json jupyter notebook --version - - name: Run Narrative Backend Unit Tests + - name: Run Narrative Test Suite shell: bash -l {0} - run: make test-backend + run: make test - - name: Coveralls Backend - uses: coverallsapp/github-action@master + - name: Send to Codecov + uses: codecov/codecov-action@v1 with: - github-token: ${{ secrets.GITHUB_TOKEN }} - flag-name: run-backend - parallel: true - path-to-lcov: ./cover/status.json + token: ${{ secrets.CODECOV_TOKEN }} + file: | + ./coverage.xml + ./js-coverage/lcov/lcov.info + fail_ci_if_error: true - - name: Run Narrative Frontend Unit Tests - shell: bash -l {0} - run: make test-frontend-unit + # - name: Run Narrative Backend Unit Tests + # shell: bash -l {0} + # run: make test-backend - - name: Coveralls Frontend - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - flag-name: run-frontend-unit - parallel: true - path-to-lcov: ./js-coverage/lcov/lcov.info + # - name: Coveralls Backend + # uses: coverallsapp/github-action@master + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + # flag-name: run-backend + # parallel: true + # path-to-lcov: ./cover/status.json - finish: - needs: build-and-test - runs-on: ubuntu-latest - steps: - - name: Coveralls Finished - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.github_token }} - parallel-finished: true + # - name: Run Narrative Frontend Unit Tests + # shell: bash -l {0} + # run: make test-frontend-unit + + # - name: Coveralls Frontend + # uses: coverallsapp/github-action@master + # with: + # github-token: ${{ secrets.GITHUB_TOKEN }} + # flag-name: run-frontend-unit + # parallel: true + # path-to-lcov: ./js-coverage/lcov/lcov.info + +# finish: +# needs: build-and-test +# runs-on: ubuntu-latest +# steps: +# - name: Coveralls Finished +# uses: coverallsapp/github-action@master +# with: +# github-token: ${{ secrets.github_token }} +# parallel-finished: true diff --git a/scripts/narrative_backend_tests.sh b/scripts/narrative_backend_tests.sh index 49a86482d0..7a37fd8c62 100755 --- a/scripts/narrative_backend_tests.sh +++ b/scripts/narrative_backend_tests.sh @@ -1,3 +1,3 @@ #!/bin/sh export NARRATIVE_DIR=$(pwd) -python -m nose $@ --nocapture --with-coverage --cover-html --cover-package=biokbase.narrative src/biokbase/narrative/tests +python -m nose $@ --nocapture --with-coverage --cover-html --cover-xml --cover-package=biokbase.narrative src/biokbase/narrative/tests From 9817615bec984c4d7dd1781310e01e00b13fef5e Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 13:44:25 -0700 Subject: [PATCH 019/108] don't use codecov secret --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1afdb805b0..4e68260a32 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,7 +61,6 @@ jobs: - name: Send to Codecov uses: codecov/codecov-action@v1 with: - token: ${{ secrets.CODECOV_TOKEN }} file: | ./coverage.xml ./js-coverage/lcov/lcov.info From bf34d8ee4d29379a25e2b5aba5c84c10cfc629d9 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 14:23:08 -0700 Subject: [PATCH 020/108] update test yaml --- .github/workflows/test.yml | 45 +------------------------------------- 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4e68260a32..d8f7756d61 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,12 +13,8 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build-and-test: - # The type of runner that the job will run on runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - uses: goanpeca/setup-miniconda@v1 with: @@ -29,16 +25,11 @@ jobs: auto-update-conda: true condarc-file: test/condarc.yml - - name: Use Node js 10.x + - name: Use Node JS 10.x uses: actions/setup-node@v1 with: node-version: 10.x - # gem install coveralls-lcov - # pip install coveralls - # npm install -g bower - # npm install -g grunt-cli - # npm install -g karma-cli - name: Install JS dependencies run: | npm ci @@ -65,37 +56,3 @@ jobs: ./coverage.xml ./js-coverage/lcov/lcov.info fail_ci_if_error: true - - # - name: Run Narrative Backend Unit Tests - # shell: bash -l {0} - # run: make test-backend - - # - name: Coveralls Backend - # uses: coverallsapp/github-action@master - # with: - # github-token: ${{ secrets.GITHUB_TOKEN }} - # flag-name: run-backend - # parallel: true - # path-to-lcov: ./cover/status.json - - # - name: Run Narrative Frontend Unit Tests - # shell: bash -l {0} - # run: make test-frontend-unit - - # - name: Coveralls Frontend - # uses: coverallsapp/github-action@master - # with: - # github-token: ${{ secrets.GITHUB_TOKEN }} - # flag-name: run-frontend-unit - # parallel: true - # path-to-lcov: ./js-coverage/lcov/lcov.info - -# finish: -# needs: build-and-test -# runs-on: ubuntu-latest -# steps: -# - name: Coveralls Finished -# uses: coverallsapp/github-action@master -# with: -# github-token: ${{ secrets.github_token }} -# parallel-finished: true From 263dfba073f9b7e7db67f792ec1820c211ce3941 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 16:34:41 -0700 Subject: [PATCH 021/108] add build image script (first part) --- .github/workflows/build_images.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/build_images.yml diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml new file mode 100644 index 0000000000..1215115715 --- /dev/null +++ b/.github/workflows/build_images.yml @@ -0,0 +1,23 @@ +name: Build-Images + +on: + pull_request: + # types: [ closed ] + branches: [ develop, master ] + +jobs: + build-images: + runs-on: ubuntu-latest + # if: github.event.pull_request.merged + steps: + - uses: actions/checkout@v2 + + - name: Set up environment variables + run: | + echo '::set-env name=DATE::$(date -u +"%Y-%m-%dT%H:%M%SZ")' + echo "::set-env name=NARRATIVE_VERSION_NUM::$(grep '\"version\":' src/config.json.templ | awk '{print $2}' | sed 's/\"//g')" + + - name: Test environment variables + run: | + echo $DATE + echo $NARRATIVE_VERSION_NUM From 6894538a37ed9815c1a5021fdb7bc3aa13cfc62b Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 16:36:14 -0700 Subject: [PATCH 022/108] fix date env var --- .github/workflows/build_images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index 1215115715..90b082f869 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -14,7 +14,7 @@ jobs: - name: Set up environment variables run: | - echo '::set-env name=DATE::$(date -u +"%Y-%m-%dT%H:%M%SZ")' + echo '::set-env name=DATE::`$(date -u +"%Y-%m-%dT%H:%M%SZ")`' echo "::set-env name=NARRATIVE_VERSION_NUM::$(grep '\"version\":' src/config.json.templ | awk '{print $2}' | sed 's/\"//g')" - name: Test environment variables From b697157493122200551fa3e1025ae4a1e56f0c54 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 16:37:49 -0700 Subject: [PATCH 023/108] maybe it's the single quotes? --- .github/workflows/build_images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index 90b082f869..53ea68ba5c 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -14,7 +14,7 @@ jobs: - name: Set up environment variables run: | - echo '::set-env name=DATE::`$(date -u +"%Y-%m-%dT%H:%M%SZ")`' + echo "::set-env name=DATE::$(date -u +'%Y-%m-%dT%H:%M%SZ')" echo "::set-env name=NARRATIVE_VERSION_NUM::$(grep '\"version\":' src/config.json.templ | awk '{print $2}' | sed 's/\"//g')" - name: Test environment variables From c3d13fe614f1110e914b3fc947ba321a9ebfff35 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 22 May 2020 16:38:45 -0700 Subject: [PATCH 024/108] missed a semicolon --- .github/workflows/build_images.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml index 53ea68ba5c..dc1405a253 100644 --- a/.github/workflows/build_images.yml +++ b/.github/workflows/build_images.yml @@ -14,7 +14,7 @@ jobs: - name: Set up environment variables run: | - echo "::set-env name=DATE::$(date -u +'%Y-%m-%dT%H:%M%SZ')" + echo "::set-env name=DATE::$(date -u +'%Y-%m-%dT%H:%M:%SZ')" echo "::set-env name=NARRATIVE_VERSION_NUM::$(grep '\"version\":' src/config.json.templ | awk '{print $2}' | sed 's/\"//g')" - name: Test environment variables From 572556ccd6f355157e626fa426ad4a73a67c0f95 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 1 Oct 2020 16:14:37 -0800 Subject: [PATCH 025/108] Changes plus test skeleton --- .../static/kbase/css/kbaseNarrative.css | 8 ++-- .../narrative_core/kbaseNarrativeDataList.js | 3 +- test/unit/karma.conf.js | 3 +- .../kbaseNarrativeDataList-spec.js | 39 +++++++++++++++++-- 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 7ed67eab8a..aa9a959f6f 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -2437,7 +2437,7 @@ button.kb-data-obj { .kb-data-list-add-data-button { cursor:pointer; - background-color: #F44336; + background-color: #4379B1; color: #fff; border: none; box-shadow: 1px 1px 3px #aaa; @@ -2463,11 +2463,11 @@ button.kb-data-obj { .kb-data-list-add-data-button:hover { cursor:pointer; - background-color: #DC3C31; + background-color: #4379B1; } .kb-data-list-add-data-text-button { - background-color: #F44336; + background-color: #4379B1; border-radius: 1px; color: #fff; border: none; @@ -2481,7 +2481,7 @@ button.kb-data-obj { moz-box-shadow: 1px 1px 3px #aaa; } .kb-data-list-add-data-text-button:hover { - background-color: #DC3C31; + background-color: #4379B1; } diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeDataList.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeDataList.js index f1e277f6d6..02367d5995 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeDataList.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeDataList.js @@ -282,7 +282,8 @@ define([ } }); - this.$addDataButton = $('').addClass('kb-data-list-add-data-button fa fa-plus fa-2x') + this.$addDataButton = $(' -{{#each path}}/ {{#if @last}}{{term}}{{else}}{{term}}{{/if}} {{/each}} + +
+{{#each path}}/ {{#if @last}}{{ term }}{{ else }}{{ term }}{{/if}} {{/each}} +
+ +
\ No newline at end of file diff --git a/kbase-extension/static/kbase/templates/data_staging/ftp_file_table.html b/kbase-extension/static/kbase/templates/data_staging/ftp_file_table.html index c86e3c70b5..0cf3aef86a 100644 --- a/kbase-extension/static/kbase/templates/data_staging/ftp_file_table.html +++ b/kbase-extension/static/kbase/templates/data_staging/ftp_file_table.html @@ -17,7 +17,7 @@ {{mtime}} {{#if imported }} -
+
{{#each ../uploaders}} From a248bf84d099e426760e2ba38800d3ef9d3b70ad Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 6 Oct 2020 17:06:19 -0500 Subject: [PATCH 039/108] Matching font family generic default --- kbase-extension/static/kbase/css/kbaseNarrative.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index caf4f705ef..e6c9f1b670 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -26,7 +26,7 @@ } .kb-data-staging-metadata-list { - font-family : Oxygen; + font-family : Oxygen, Arial, sans-serif; font-weight: bold; width : 115px; display : inline-block; @@ -47,7 +47,7 @@ background: none; border: none; cursor: pointer; - font-family: Oxygen, serif; + font-family: Oxygen, Arial, sans-serif; font-style: normal; font-weight: bold; font-size: 14px; @@ -62,7 +62,7 @@ } .kb-data-stagingarea{ - font-family: Oxygen, serif; + font-family: Oxygen, Arial, sans-serif; font-style: normal; font-weight: bold; font-size: 24px; From 9063e03b571eaab07f857ac49d85f078da3981f1 Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 6 Oct 2020 17:06:31 -0500 Subject: [PATCH 040/108] Matching font family generic default --- kbase-extension/static/kbase/css/kbaseNarrative.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index e6c9f1b670..e0cad182e4 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -62,7 +62,7 @@ } .kb-data-stagingarea{ - font-family: Oxygen, Arial, sans-serif; + font-family: Oxygen; font-style: normal; font-weight: bold; font-size: 24px; From c7c6fb99ff08807f042f22ea08214eafd662fa14 Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 6 Oct 2020 17:07:11 -0500 Subject: [PATCH 041/108] Matching font family generic default --- kbase-extension/static/kbase/css/kbaseNarrative.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index e0cad182e4..e6c9f1b670 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -62,7 +62,7 @@ } .kb-data-stagingarea{ - font-family: Oxygen; + font-family: Oxygen, Arial, sans-serif; font-style: normal; font-weight: bold; font-size: 24px; From b50aa0f463fe4113dd1e831cd47bcd78f00c479f Mon Sep 17 00:00:00 2001 From: eamahanna Date: Tue, 6 Oct 2020 15:56:31 -0800 Subject: [PATCH 042/108] get a test appCell working --- test/unit/karma.conf.js | 3 +- .../appCell2/widgets/appCellWidget-spec.js | 91 +++++++++++++++++-- 2 files changed, 83 insertions(+), 11 deletions(-) diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 949f09ccca..02fd0f5219 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,7 +32,8 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - {pattern: 'test/unit/spec/**/*.js', included: false}, + // {pattern: 'test/unit/spec/**/*.js', included: false}, + {pattern: 'test/unit/spec/nbextensions/appCell2/widgets/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index f7cd5a192b..859a3f517c 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -6,11 +6,11 @@ define([ 'jquery', '../../../../../../../narrative/nbextensions/appCell2/widgets/appCellWidget', - 'kbase/js/common/monoBus' + 'common/runtime', ], function( $, AppCell, - MonoBus + Runtime ) { 'use strict'; describe('The appCell widget module', function() { @@ -48,27 +48,98 @@ define([ user_permission: "a" }; - var bus = MonoBus.make(); + var cell = { + metadata: { + kbase: { + attributes:{ + created: "Fri, 27 Mar 2020 17:39:10 GMT", + id: "71e12dca-3a12-4dd7-862b-125f4337e723", + info: { + label: "more...", + url: "/#appcatalog/app/simpleapp/example_method/beta" + }, + lastLoaded: "Tue, 06 Oct 2020 23:28:26 GMT", + status: "new", + subtitle: "Perform some kind of method", + title: "SimpleApp Simple Add" + }, + appCell: { + app: { + spec: { + parameters: [{ + advanced: 0, + allow_multiple: 0, + default_values: ["0"], + description: "The first parameter that needs to be entered to drive the method. This might be the first of many.", + disabled: 0, + field_type: "text", + id: "base_number", + optional: 1, + short_hint: "The first parameter", + text_options:{ + is_output_name: 0, + placeholder: "", + regex_constraint: [], + valid_ws_types: [], + validate_as: "int", + ui_class: "parameter", + ui_name: "base_number", + } + }] + } + } + } + } + } + }; - beforeEach( () => { + // Can't create a cell each time. I don't know how to kill the cellBus... + // beforeEach( () => { + var bus = Runtime.make().bus() $node = $("
"); mockAppCell = AppCell.make({ workspaceInfo: workspaceInfo, bus: bus, - cell: {}, + cell: cell, }); appCell = mockAppCell.start({$node}); + // }); + + // afterEach(() => { + // $node = null; + // appCell = null; + // mockAppCell = null; + // bus.stop(); + // }); + + it('Should render an app cell', function() { + expect(true).toEqual(true); }); - afterEach(() => { - $node = null; - appCell = null; - mockAppCell = null; + it('Should render the runtime control panel', function() { + expect(true).toEqual(true); }); - it('Should return a make function', function() { + it('Should an action button in the control panel', function() { + expect(true).toEqual(true); + }); + + it('When the mode: execution-requsted, the cancel button should be enabled', function() { expect(true).toEqual(true); }); + + it('When the mode: execution-requsted, the cancel button should be enabled', function() { + expect(true).toEqual(true); + }); + + it('When the cancel button is clicked a confimation modal should appear', function() { + expect(true).toEqual(true); + }); + + it('When the cancel button is clicked a confimation modal should appear', function() { + expect(true).toEqual(true); + }); + }); }); From e6914e8031c05047716bee47dff1f3bd8395793e Mon Sep 17 00:00:00 2001 From: eamahanna Date: Tue, 6 Oct 2020 15:58:49 -0800 Subject: [PATCH 043/108] get a test appCell working --- .../spec/nbextensions/appCell2/widgets/appCellWidget-spec.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index 859a3f517c..b805826e12 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -27,7 +27,7 @@ define([ describe('The appCell widget instance', () => { var $node = null; - var appCell = null; + var $appCell = null; var mockAppCell = null; var workspaceInfo = { @@ -103,7 +103,7 @@ define([ cell: cell, }); - appCell = mockAppCell.start({$node}); + $appCell = mockAppCell.start({$node}); // }); // afterEach(() => { @@ -114,6 +114,7 @@ define([ // }); it('Should render an app cell', function() { + console.log($appCell) expect(true).toEqual(true); }); From 2e5efa0d4a8cc9cd29f32c886a01fb25151a4ebc Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 6 Oct 2020 19:14:00 -0500 Subject: [PATCH 044/108] ran pycharm linter --- .../static/kbase/css/kbaseNarrative.css | 1012 ++++++++++------- .../templates/data_staging/file_path.html | 4 +- 2 files changed, 621 insertions(+), 395 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index e6c9f1b670..3da76befa7 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -12,38 +12,38 @@ } .kb-data-breadcrumb a { - cursor: pointer; + cursor: pointer; } .kb-data-staging-footer { - font-family : Oxygen, Arial, sans-serif; + font-family: Oxygen, Arial, sans-serif; font-weight: bold; - font-size : 105%; - text-align : center; - background-color : #EEEEEE; - height : 32px; - padding : 8px; + font-size: 105%; + text-align: center; + background-color: #EEEEEE; + height: 32px; + padding: 8px; } .kb-data-staging-metadata-list { - font-family : Oxygen, Arial, sans-serif; - font-weight: bold; - width : 115px; - display : inline-block; - font-size : 90%; + font-family: Oxygen, Arial, sans-serif; + font-weight: bold; + width: 115px; + display: inline-block; + font-size: 90%; } .kb-data-staging-metadata-file-lines { - white-space : pre; - overflow : scroll; - font-family : monospace; - font-size : 90%; - background-color : #DDDDDD; - max-height : 200px; + white-space: pre; + overflow: scroll; + font-family: monospace; + font-size: 90%; + background-color: #DDDDDD; + max-height: 200px; } /* https://www.figma.com/file/T30UN3QhWhhV5SpXiqY1ij/KBase-component-library?node-id=1%3A4 */ -.kb-data-staging-button{ +.kb-data-staging-button { background: none; border: none; cursor: pointer; @@ -55,13 +55,13 @@ text-align: center; text-transform: uppercase; color: #4379B1; - height:25px; - margin:5px; + height: 25px; + margin: 5px; position: relative; top: -3px; } -.kb-data-stagingarea{ +.kb-data-stagingarea { font-family: Oxygen, Arial, sans-serif; font-style: normal; font-weight: bold; @@ -69,13 +69,13 @@ line-height: 30px; } -.kb-data-staging-spacer{ +.kb-data-staging-spacer { margin-top: 10px; } .kb-dropzone { border: 2px dashed #2196F3 !important; - margin-bottom:5px; + margin-bottom: 5px; max-height: 150px; overflow-y: auto; } @@ -151,6 +151,7 @@ border-radius: 4px; z-index: 1000; } + .ui-draggable.kb-data-inflight.-over { border-color: green; background-color: #EFFCEB !important; @@ -169,6 +170,7 @@ border-color: green; } + .kb-data-list-drag-target.-drag-hover { height: 90px; transition: all 0.25s ease; @@ -235,10 +237,10 @@ nav[role="navigation"] ul li a { border: 1px solid #5c9531; } -li#searchlabel a{ - } +li#searchlabel a { +} -input#search_terms{ +input#search_terms { padding: .4em 1em; display: inline; border-color: #5c9531; @@ -248,28 +250,41 @@ input#search_terms{ margin-top: -3px; background-image: url("../images/search.png"); background-size: 22px; - background-repeat:no-repeat; - background-position:right center; + background-repeat: no-repeat; + background-position: right center; border-top-left-radius: 0px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 0px; } -span#searchspan{ + +span#searchspan { display: inline-block; width: 50%; } -@media screen and (max-width: 1170px){ - span#searchspan{width: 50%;} + +@media screen and (max-width: 1170px) { + span#searchspan { + width: 50%; + } } -@media screen and (max-width: 980px){ - span#searchspan{width: 40%;} + +@media screen and (max-width: 980px) { + span#searchspan { + width: 40%; + } } -@media screen and (max-width: 768px){ - span#searchspan{width: 30%;} + +@media screen and (max-width: 768px) { + span#searchspan { + width: 30%; + } } -@media screen and (max-width: 590px){ - span#searchspan{width: 60%;} + +@media screen and (max-width: 590px) { + span#searchspan { + width: 60%; + } } @@ -296,6 +311,7 @@ span#searchspan{ margin-right: 5px; min-width: 50px; } + .navbar-right .fa::before { /* color nav icons */ color: #2196F3; } @@ -308,35 +324,45 @@ span#searchspan{ #kb-nav-menu { /* don't add shadows here */ box-shadow: none; } + .kb-nav-btn > div { color: #666 !important; } + .kb-nav-btn .kb-nav-btn-txt { font-size: 10pt; margin-top: -5px; } + .navbar-right .kb-nav-btn:hover { background-color: #F5F5F5; } + .kb-nav-btn-upgrade { background-color: #4BB856 !important; display: none; } + .kb-nav-btn-upgrade .fa::before { color: #FFF !important; } + .kb-nav-btn-upgrade > div { color: #FFF !important; } + .kb-nav-btn-upgrade:hover { background-color: #43A047 !important; } + .kb-nav-btn-upgrade.warning { background-color: #F44336 !important; } + .kb-nav-btn-upgrade.warning:hover { background-color: #DC3C31 !important; } + .kb-nav-menu-icon { display: inline-block; width: 20px; @@ -344,20 +370,21 @@ span#searchspan{ vertical-align: middle; margin-right: 5px; } + .kb-nav-menu-icon .fa { font-size: 150%; } #kb-ipy-menu { /* restore rounded corners */ - border-radius: 4px !important; - margin-right: 0; + border-radius: 4px !important; + margin-right: 0; } .btn { /* don't use drop-shadow on profile menu */ - box-shadow: none; - -webkit-box-shadow: none; - moz-box-shadow: none; - xfont-size: 18px; + box-shadow: none; + -webkit-box-shadow: none; + moz-box-shadow: none; + xfont-size: 18px; } #signin-button .btn { @@ -365,8 +392,9 @@ span#searchspan{ } .btn-xs .glyphicon-user { /* also resize user btn */ - padding: 14px 5px 14px 5px; + padding: 14px 5px 14px 5px; } + /* -------------------------- */ @@ -382,7 +410,7 @@ span#searchspan{ margin-left: auto } -p.clear{ +p.clear { height: 0px; clear: both; } @@ -441,9 +469,6 @@ p#site-title { } - - - #search-input { margin: -11px 0; } @@ -494,10 +519,10 @@ p#site-title { /* footer */ -#bottom-tabs{ +#bottom-tabs { clear: left; - position : fixed; - bottom : 0; + position: fixed; + bottom: 0; width: 1170px; margin: 0 auto; background-color: #fff; @@ -523,12 +548,12 @@ p#site-title { .kb-side-overlay-container { width: 730px; - border : 1px solid #CECECE; - z-index : 1030; - background : white; - position : fixed; + border: 1px solid #CECECE; + z-index: 1030; + background: white; + position: fixed; max-height: calc(100% - 73px); - overflow-y:auto; + overflow-y: auto; } .kb-side-overlay-header { @@ -636,19 +661,21 @@ p#site-title { } - .kb-side-tab.active { display: inherit; } + .kb-side-tab { display: none; - height:100%; + height: 100%; } -.kb-narr-side-panel-set{ - height:100%; + +.kb-narr-side-panel-set { + height: 100%; } -.kb-narr-side-panel-set:last-child{ - height:50%; + +.kb-narr-side-panel-set:last-child { + height: 50%; } .kb-overlay-dimmer { @@ -679,7 +706,7 @@ p#site-title { } #data-add-btn:hover { - color:#000; + color: #000; } #data-tab-nav { @@ -728,10 +755,12 @@ p#site-title { border-bottom: 1px solid #AAA; overflow: auto; } -#data-pane p{ + +#data-pane p { margin: 0px 0; } -#data-pane p span{ + +#data-pane p span { display: block; padding: 2px 10px; color: #fff; @@ -740,16 +769,19 @@ p#site-title { margin: 0; text-align: center; } -#data-pane p span.tab1{ + +#data-pane p span.tab1 { float: right; background: -moz-linear-gradient(top, #666, #bbb); background: -webkit-linear-gradient(top, #666, #bbb); color: #fff; } -#data-pane p span.tab2{ + +#data-pane p span.tab2 { background: -moz-linear-gradient(top, #ccc, #999); background: -webkit-linear-gradient(top, #ccc, #999); } + #function-pane { height: 30%; margin-top: 1px; @@ -762,14 +794,14 @@ p#site-title { } #kb-function-panel .kb-function-body { - height: 100% ; - max-height: 100% ; + height: 100%; + max-height: 100%; } h3.pane-title { margin: 0; position: relative; - background-color: rgb(224,224,224); + background-color: rgb(224, 224, 224); padding: 3px 5px; border: 1px solid #C2C2C2; font-size: 16px; @@ -784,7 +816,7 @@ h3.pane-title { ul.pane-list { margin: 0; - padding : 2px + padding: 2px } ul.pane-list li { @@ -796,13 +828,13 @@ ul.pane-list li { /* --- KBase method list styles --*/ .kb-method-list-logo { - width: 30pt; + width: 30pt; height: 30pt; - color: #fff; + color: #fff; background-color: #607D8B; - border-style: solid; - border-width: 0px; - border-color: #555; + border-style: solid; + border-width: 0px; + border-color: #555; text-align: center; display: inline-block; padding-top: 6pt; @@ -813,19 +845,19 @@ ul.pane-list li { } .kb-method-list-logo:hover { - border-width: 5px; - padding-top: 2.5pt; + border-width: 5px; + padding-top: 2.5pt; } .kb-method-list-more-div { - color:#777; + color: #777; font-size: 10pt; margin: 2px; text-align: justify; } .kb-method-list-more-div > div:last-child { - text-align: right; + text-align: right; } .kb-method-search-clear { @@ -837,20 +869,23 @@ ul.pane-list li { /* A function in the function pane */ li.function a { text-decoration: none; - color: rgb(80,130,50); + color: rgb(80, 130, 50); } + li.function a:visited { /* don't recolor */ - color: rgb(80,130,50); + color: rgb(80, 130, 50); } + /* dataset in data pane */ li.dataset a { text-decoration: none; - color: rgb(130,80,50); + color: rgb(130, 80, 50); } + li.dataset a:visited { /* don't recolor */ - color: rgb(130,80,50); + color: rgb(130, 80, 50); } @@ -880,8 +915,9 @@ fieldset { } fieldset label { -/* display: block; -*/ margin: 0 0 3px 0; + /* display: block; + */ + margin: 0 0 3px 0; font-weight: bold; font-size: 1em; @@ -890,6 +926,7 @@ fieldset label { fieldset input[type="text"], fieldset select { width: 200px; } + fieldset input[type="password"], fieldset select { width: 200px; } @@ -902,24 +939,29 @@ div.dataset-cell, div.function-cell { padding: 7px 17px; border: 1px solid #ccc; } -img.dataset-cell{ + +img.dataset-cell { margin: 3px auto; padding: 0; } -.function-cell{ + +.function-cell { background-image: url("../images/gears.png"); background-position: right; background-repeat: no-repeat; #background-color: #f2f2f2; } + .dataset-cell p, .function-cell p { font-size: .875em; } -.dataset-cell h2, .function-cell h2{ + +.dataset-cell h2, .function-cell h2 { margin-bottom: 0; font-size: 1.1em; } -.textcell{ + +.textcell { width: 90%; margin: 3px auto; padding: 5px 17px; @@ -929,11 +971,11 @@ img.dataset-cell{ color: #111; } -.textcell:hover{ +.textcell:hover { border: 2px dotted #ccc; } -p.textcuepara{ +p.textcuepara { color: #ccc; padding: 0; margin: 0; @@ -941,10 +983,11 @@ p.textcuepara{ display: none; } -div.tools p, div.texttools p{ +div.tools p, div.texttools p { margin: 0; } -div.textarea{ + +div.textarea { width: 650px; border: none; padding: 0; @@ -952,51 +995,60 @@ div.textarea{ min-height: 1.2em; display: none; } -.tools, .texttools{ + +.tools, .texttools { display: none; } -.tools{ + +.tools { height: 1em; margin-top: .5em; margin-left: 10px; } -.tools a{ + +.tools a { border: 1px solid #018841; padding: 2px 4px; font-size: 13px; } -#narrative-header .tools{ +#narrative-header .tools { display: block; width: 30em; position: relative; top: -2.0em; left: 350px; } -.texttools img{ + +.texttools img { vertical-align: middle; } -img.remove{ + +img.remove { float: right; } -.ui-state-highlight{ + +.ui-state-highlight { background-color: fbfaed; } -div.metadata{ + +div.metadata { display: block; width: 200px; padding: 0 10px; height: 100px; float: left; } -div.social{ + +div.social { float: right; display: block; width: 80px; padding: 0 10px; display: none; } -p span.notification{ + +p span.notification { background-color: #ff3333; color: #fff; padding: 4px 8px; @@ -1009,12 +1061,53 @@ p span.notification{ * http://stackoverflow.com/questions/18023493/bootstrap-3-dropdown-sub-menu-missing */ -.dropdown-submenu{position:relative;} -.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} -.dropdown-submenu:hover>.dropdown-menu{display:block;} -.dropdown-submenu>a:after{display:block;content:" ";float:right;width:0;height:0;border-color:transparent;border-style:solid;border-width:5px 0 5px 5px;border-left-color:#cccccc;margin-top:5px;margin-right:-10px;} -.dropdown-submenu:hover>a:after{border-left-color:#ffffff;} -.dropdown-submenu.pull-left{float:none;}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px;} +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: #cccccc; + margin-top: 5px; + margin-right: -10px; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} /** End Bootstrap 3 submenu fix **/ @@ -1060,7 +1153,7 @@ p span.notification{ background-color: #f8f8f8; } -#menubar .navbar-nav>li>a { +#menubar .navbar-nav > li > a { padding-top: 10px; padding-bottom: 7px; } @@ -1069,7 +1162,7 @@ p span.notification{ background-image: none; } -.panel-default>.panel-heading { +.panel-default > .panel-heading { background-image: none; } @@ -1083,7 +1176,7 @@ p span.notification{ padding-left: 0px; } -#menubar .navbar { +#menubar .navbar { width: 100%; } @@ -1124,7 +1217,7 @@ div#notebook_panel { .kb-narr-side-panel { margin-bottom: 5px; - height:100%; + height: 100%; } .kb-narr-side-panel .kb-title { @@ -1188,11 +1281,11 @@ div#notebook_panel { } .kbujs-error-traceback { - white-space : nowrap; - float : left; - max-width : 516px; + white-space: nowrap; + float: left; + max-width: 516px; max-height: 250px; - overflow-x : scroll; + overflow-x: scroll; overflow-y: scroll; } @@ -1203,13 +1296,13 @@ div#notebook_panel { } - /* tab.js */ .nav-tabs .glyphicon-remove { margin: 0 0 0 3px; color: #aaa; } + .nav-tabs .glyphicon-remove:hover { color: #666; cursor: hand; @@ -1234,9 +1327,11 @@ div#notebook_panel { height: 22px; line-height: 22px; } + .paging_full_numbers a:active { outline: none } + .paging_full_numbers a:hover { text-decoration: none; } @@ -1275,8 +1370,8 @@ div#notebook_panel { /* * Styles for KBase Narrative notebook page, function panel */ - /* Header for panel */ - .kb-function-header { +/* Header for panel */ +.kb-function-header { padding: 10px 0; color: #0064b6; font-weight: bold; @@ -1289,14 +1384,17 @@ div#notebook_panel { height: calc(100%); padding: 3px; } -.kb-narr-panel-body > div{ + +.kb-narr-panel-body > div { height: 100%; } + .kb-narr-panel-body-wrapper { overflow-y: auto; height: 100%; } -.kb-narr-panel-body-wrapper > div{ + +.kb-narr-panel-body-wrapper > div { height: 100%; } @@ -1306,8 +1404,8 @@ div#notebook_panel { cursor: pointer; color: #888; -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ } /* Container for func list */ @@ -1329,6 +1427,7 @@ div#notebook_panel { padding: 0; width: 100%; } + .kb-function-body li { padding: 5px 5px; width: 100%; @@ -1340,6 +1439,7 @@ div#notebook_panel { background-color: #eee; border-bottom: 1px solid #ddd; } + .kb-function-body li:nth-child(even) { background-color: #fff; border-bottom: 1px solid #ddd; @@ -1356,6 +1456,7 @@ div#notebook_panel { .kb-function-body a { text-decoration: none; } + .kb-function-body a:hover { text-decoration: none; } @@ -1458,10 +1559,10 @@ div#notebook_panel { } #kb-function-error-traceback { - white-space : nowrap; - float : left; - max-width : 250px; - overflow-x : scroll; + white-space: nowrap; + float: left; + max-width: 250px; + overflow-x: scroll; } .kb-function-dim { @@ -1554,6 +1655,7 @@ div#notebook_panel { z-index: auto; opacity: 1; } + .kb-cell-run h1 { font-family: 'Roboto'; font-weight: normal; @@ -1564,6 +1666,7 @@ div#notebook_panel { opacity: inherit; display: inline; } + .kb-cell-run div.kb-func-desc { opacity: inherit; display: block; @@ -1578,15 +1681,18 @@ div#notebook_panel { margin: 3px; opacity: inherit; } + .kb-cell-run form input[type="submit"] { float: right; opacity: inherit; margin-top: 5px; } + .kb-cell-run form .buttons { float: right; margin-top: 5px; } + .kb-cell-params table { border: none; margin-bottom: 10px; @@ -1594,32 +1700,35 @@ div#notebook_panel { margin-left: auto; margin-right: auto; } -.kb-cell-params table > tr,td { + +.kb-cell-params table > tr, td { border: none; vertical-align: middle; } -.kb-cell-params thead>tr>th, -.kb-cell-params tbody>tr>th, -.kb-cell-params tfoot>tr>th, -.kb-cell-params thead>tr>td, -.kb-cell-params tbody>tr>td, -.kb-cell-params tfoot>tr>td { +.kb-cell-params thead > tr > th, +.kb-cell-params tbody > tr > th, +.kb-cell-params tfoot > tr > th, +.kb-cell-params thead > tr > td, +.kb-cell-params tbody > tr > td, +.kb-cell-params tfoot > tr > td { padding: 2px 4px; } .kb-cell-params tr:hover td, .kb-cell-params tr:hover th { - background:#eee; + background: #eee; } /* grey out the form while running */ .kb-cell-run.running form { opacity: 0.6; } + /* progress "meter" */ .kb-cell-progress { display: none; } + .kb-cell-progress.running { display: block; } @@ -1673,31 +1782,30 @@ div#notebook_panel { } .kb-func-panel { - border-color: #bce8f1; - border-radius: 1px; + border-color: #bce8f1; + border-radius: 1px; } .kb-func-panel > .panel-heading { - color: #31708f; - border-radius: 1px; - background-color: #d9edf7; - border-color: #bce8f1; - padding: 5px 10px; + color: #31708f; + border-radius: 1px; + background-color: #d9edf7; + border-color: #bce8f1; + padding: 5px 10px; } - .kb-func-panel .panel-body { padding: 0px 10px; - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } .kb-func-panel > .panel-heading + .panel-collapse .panel-body { - border-top-color: #bce8f1; + border-top-color: #bce8f1; } .kb-func-panel > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #bce8f1; + border-bottom-color: #bce8f1; } /** output cell styling */ @@ -1720,10 +1828,10 @@ div#notebook_panel { /* override from some jupyter style? */ .rendered_html :link { - text-decoration: none; + text-decoration: none; } -.kb-cell-output .nav>li>a { +.kb-cell-output .nav > li > a { padding: 5px 10px; } @@ -1731,6 +1839,7 @@ div#notebook_panel { background-image: none; padding: 5px 10px; } + /*** styling for the jobs manager */ .kb-jobs-title { font-family: Oxygen, Arial, sans-serif; @@ -1752,7 +1861,7 @@ div#notebook_panel { font-family: Oxygen, Arial, sans-serif; font-weight: bold; color: #777; - vertical-align:top; + vertical-align: top; padding-right: 5px; width: 30%; max-width: 30%; @@ -1769,9 +1878,11 @@ div#notebook_panel { .kb-jobs-error { background-color: #f2dede; } + .kb-jobs-error-btn { font-size: 10pt; } + .kb-jobs-item:last-child { border-bottom: none; } @@ -1786,53 +1897,59 @@ div#notebook_panel { /** new method parameter styling **/ .kb-method-parameter-panel { - border-left: 3px solid #fff; + border-left: 3px solid #fff; } + .kb-method-parameter-panel-hover { - border-left: 3px solid #428bca; + border-left: 3px solid #428bca; } + .kb-method-parameter-row { - margin:0px; - padding:5px; - border-radius:5px; + margin: 0px; + padding: 5px; + border-radius: 5px; } + /* for some reason, the css :hover doesn't work right on this div, so we use jquery to toggle this class */ .kb-method-parameter-row-hover { - background:#F9F9F9; + background: #F9F9F9; } .kb-method-parameter-row-error { - background: #f2dede; + background: #f2dede; } + .kb-method-parameter-error-mssg { - padding:5px; - text-align:center; - font-family: Oxygen, sans-serif; - font-weight: bold; - font-size: 9pt; - color:#F44336; + padding: 5px; + text-align: center; + font-family: Oxygen, sans-serif; + font-weight: bold; + font-size: 9pt; + color: #F44336; } /* not sure how to get text in these divs to valign middle... */ .kb-method-parameter-name { - font-family: Oxygen, sans-serif; - font-weight: bold; - color:#777; - text-align:right; - vertical-align:middle; - margin-top:3px; - padding-right:0px; - padding-left:0px; - white-space: normal; + font-family: Oxygen, sans-serif; + font-weight: bold; + color: #777; + text-align: right; + vertical-align: middle; + margin-top: 3px; + padding-right: 0px; + padding-left: 0px; + white-space: normal; } + .kb-method-parameter-input { - vertical-align:middle; - white-space: nowrap; - padding-left:10px; + vertical-align: middle; + white-space: nowrap; + padding-left: 10px; } + .kb-method-parameter-input input { - font-weight: bold; + font-weight: bold; } /* @@ -1850,67 +1967,73 @@ control with padding, and then scooting the icon back into its column. /* allow space for the required (red arrow), satisfied (green checkbox) icon */ padding-right: 20px; } + .kb-method-parameter-input .kb-method-parameter-accepted-glyph, .kb-method-parameter-input .kb-method-parameter-required-glyph { /* This scoots the icon inside */ margin-left: -15px; font-size: 15px; } + .kb-method-parameter-hint { padding-left: 7px; } .kb-parameter-data-selection { - font-weight: bold; + font-weight: bold; } .kb-method-parameter-hint { - color: #777; - text-align:left; - margin-top:3px; + color: #777; + text-align: left; + margin-top: 3px; } .kb-method-parameter-required-glyph { - color: #F44336; - margin-left:7px; + color: #F44336; + margin-left: 7px; } + .kb-method-parameter-accepted-glyph { - color: #4BB856; - margin-left:7px; + color: #4BB856; + margin-left: 7px; } .kb-method-parameter-info { - color: #777; - margin-left:7px; + color: #777; + margin-left: 7px; } .kb-parameter-data-row-remove { - color: #777; + color: #777; } + .kb-parameter-data-row-add { - color: #777; + color: #777; } .kb-method-advanced-options-controller-inactive { - font-family: Oxygen, sans-serif; - font-weight: bold; - font-style: italic; - font-size: 10pt; - line-height: 14px; - color: #777; - text-align: center; + font-family: Oxygen, sans-serif; + font-weight: bold; + font-style: italic; + font-size: 10pt; + line-height: 14px; + color: #777; + text-align: center; } + .kb-method-advanced-options-controller { - font-family: Oxygen, sans-serif; - font-weight: bold; - font-style: italic; - cursor:pointer; - font-size: 10pt; - line-height: 14px; - color: #0088cc; - text-align: center; + font-family: Oxygen, sans-serif; + font-weight: bold; + font-style: italic; + cursor: pointer; + font-size: 10pt; + line-height: 14px; + color: #0088cc; + text-align: center; } + .kb-method-advanced-options-controller:hover { color: #2a6496; } @@ -1940,6 +2063,7 @@ control with padding, and then scooting the icon back into its column. .kb-app-step-container { margin-top: 6px; } + .kb-app-panel > .panel-footer { border: 0; border-radius: 0px; @@ -1955,35 +2079,38 @@ control with padding, and then scooting the icon back into its column. line-height: 15px; color: #2E618D; } + .kb-app-step-error-mssg { - font-family: sans-serif; - font-size: 11pt; - line-height: 14px; - color: #A63232; - text-align: left; - /* pading-left:30px; */ - margin:10px; + font-family: sans-serif; + font-size: 11pt; + line-height: 14px; + color: #A63232; + text-align: left; + /* pading-left:30px; */ + margin: 10px; } + .kb-app-step-error-heading { - font-family: Oxygen, sans-serif; - font-weight: bold; - font-size: 13pt; - line-height: 14px; - color: #555; - text-align: left; - padding-left:5px; - margin-top:20px; + font-family: Oxygen, sans-serif; + font-weight: bold; + font-size: 13pt; + line-height: 14px; + color: #555; + text-align: left; + padding-left: 5px; + margin-top: 20px; } + .kb-app-step-error-main-heading { - font-family: Oxygen, sans-serif; - cursor:pointer; - font-size: 16pt; - line-height: 18px; - color:#555; - /*background:#f2dede;*/ - text-align: left; - padding-left:20px; - margin-top:20px; + font-family: Oxygen, sans-serif; + cursor: pointer; + font-size: 16pt; + line-height: 18px; + color: #555; + /*background:#f2dede;*/ + text-align: left; + padding-left: 20px; + margin-top: 20px; } .kb-app-step-error { @@ -2001,49 +2128,65 @@ control with padding, and then scooting the icon back into its column. /* -- "next steps" text and links -- */ .kb-app-next { - border-top: 2px solid #CECECE; + border-top: 2px solid #CECECE; } + .kb-app-next h3 { - font-family: Roboto, Helvetica, Arial, sans-serif; - font-size: 0.9em; - font-style: italic; - color: #888; - float: left; - padding: 0.5em 0 0.25em 0; - margin: 0; - -webkit-margin-before: 0; - -webkit-margin-after: 0.25em; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-size: 0.9em; + font-style: italic; + color: #888; + float: left; + padding: 0.5em 0 0.25em 0; + margin: 0; + -webkit-margin-before: 0; + -webkit-margin-after: 0.25em; } + .kb-app-next-hide { - float: right; - color: #2196F3; - font-family: Roboto, Helvetica, Arial, sans-serif; - font-size: 0.9em; - margin-top: 0.25em; - margin-right: 0.5em; + float: right; + color: #2196F3; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-size: 0.9em; + margin-top: 0.25em; + margin-right: 0.5em; } + .kb-app-next-unhide { - color: #2196F3; - font-family: Roboto, Helvetica, Arial, sans-serif; - font-size: 0.9em; - margin-top: 0.25em; + color: #2196F3; + font-family: Roboto, Helvetica, Arial, sans-serif; + font-size: 0.9em; + margin-top: 0.25em; } + .kb-app-next div { /* container for links */ - clear: both; + clear: both; } /* -- END method/app styling --*/ @-webkit-keyframes pulse { - 0% { opacity: 1.0; } - 50% { opacity: 0.7; } - 100% { opacity: 1.0; } + 0% { + opacity: 1.0; + } + 50% { + opacity: 0.7; + } + 100% { + opacity: 1.0; + } } @keyframes pulse { - 0% { opacity: 1.0; } - 50% { opacity: 0.7; } - 100% { opacity: 1.0; } + 0% { + opacity: 1.0; + } + 50% { + opacity: 0.7; + } + 100% { + opacity: 1.0; + } } button.kb-app-run { @@ -2057,12 +2200,15 @@ button.kb-app-run { -webkit-box-shadow: 1px 1px 1px #ccc; moz-box-shadow: 1px 1px 1px #ccc; } + button.kb-app-run:hover { background-color: #1E88E5; } + button.kb-app-run.kb-app-cancel { background-color: #F44336; } + button.kb-app-run.kb-app-cancel:hover { background-color: #E53935; } @@ -2079,6 +2225,7 @@ button.kb-method-run { -webkit-box-shadow: 1px 1px 1px #ccc; moz-box-shadow: 1px 1px 1px #ccc; } + button.kb-method-run:hover { background-color: #1E88E5; } @@ -2106,35 +2253,45 @@ div[class="tooltip-inner"] { white-space: pre-wrap; text-align: left; } + .notebook_app .tooltip { z-index: 2000 !important; } + .notebook_app .tooltip-inner { background-color: #1B69B6; } + .notebook_app .tooltip.top .tooltip-arrow { - border-top-color: #1B69B6; + border-top-color: #1B69B6; } + .notebook_app .tooltip.top-left .tooltip-arrow { - border-top-color: #1B69B6; + border-top-color: #1B69B6; } + .notebook_app .tooltip.top-right .tooltip-arrow { - border-top-color: #1B69B6; + border-top-color: #1B69B6; } + .notebook_app .tooltip.right .tooltip-arrow { - border-right-color: #1B69B6; + border-right-color: #1B69B6; } + .notebook_app .tooltip.left .tooltip-arrow { - border-left-color: #1B69B6; + border-left-color: #1B69B6; } + .notebook_app .tooltip.bottom .tooltip-arrow { - border-bottom-color: #1B69B6; + border-bottom-color: #1B69B6; } + .notebook_app .tooltip.bottom-left .tooltip-arrow { - border-bottom-color: #1B69B6; + border-bottom-color: #1B69B6; } + .notebook_app .tooltip.bottom-right .tooltip-arrow { - border-bottom-color: #1B69B6; + border-bottom-color: #1B69B6; } .kb-data-main-panel { @@ -2144,11 +2301,12 @@ div[class="tooltip-inner"] { } #kb-ws { -/* background-color: #fff; - width: 100%; - padding-bottom: 5px; - height: 425px !important; -*/} + /* background-color: #fff; + width: 100%; + padding-bottom: 5px; + height: 425px !important; + */ +} #data-tabs { height: 375px !important; @@ -2170,14 +2328,16 @@ div[class="tooltip-inner"] { } /* Data table */ -.kb-data-table thead{ +.kb-data-table thead { max-width: 100%; width: 281px; } + .kb-data-table { max-height: 265px; width: 100% !important; } + .kb-data-table tbody tr { border-bottom: 1px solid gainsboro; } @@ -2196,7 +2356,7 @@ div[class="tooltip-inner"] { .kb-data-obj-name { text-overflow: ellipsis; - overflow:hidden; + overflow: hidden; white-space: nowrap; display: inline-block; max-width: 88%; @@ -2212,7 +2372,9 @@ div[class="tooltip-inner"] { vertical-align: middle; } -#kb-ws .dataTables_filter { display: none; } +#kb-ws .dataTables_filter { + display: none; +} /*------------------------------------------ * View details on KBase objects @@ -2224,29 +2386,35 @@ div[class="tooltip-inner"] { button.kb-data-obj { float: right; } + /* Panel */ .kb-data-obj-panel { background: linear-gradient(to bottom, #00d2ff, #B2ADCB); padding: 0; margin: 10px; } + .kb-data-obj-panel button.close { margin: 5px; font-size: 125%; } + .kb-data-obj-panel-info { - background: rgba(255,255,255,0.5); + background: rgba(255, 255, 255, 0.5); height: 100%; padding: 10px; } + .kb-data-obj-panel-graph { background: transparent; height: 100%; padding: 10px; } + .kb-data-obj-panel-info dl { margin: 0; } + .kb-data-obj-panel-info dl dt { float: left; clear: left; @@ -2255,36 +2423,43 @@ button.kb-data-obj { color: rgba(0, 0, 0, 0.5); /*padding: 0 0 5px 0;*/ } + .kb-data-obj-panel-info dl dt:after { content: ":"; } + .kb-data-obj-panel-info dl dd { margin: 0 0 0 100px; /*padding: 0 0 5px 0;*/ } + .kb-data-obj-panel-verlist span { padding: 0px 5px; margin-left: 3px; border-radius: 2px; - background-color: rgba(255,255,255,0.5); - color: rgba(0,0,0,0.5); + background-color: rgba(255, 255, 255, 0.5); + color: rgba(0, 0, 0, 0.5); cursor: pointer; } + .kb-data-obj-panel-verlist span.selected { background-color: #2196F3; color: white; cursor: default; } + .kb-data-obj-panel-graph table { background-color: rgba(255, 255, 255, 0.9); width: 100%; border: none; color: rgba(0, 0, 0, 0.8); } + .kb-data-obj-panel-graph thead tr { background-color: rgb(230, 230, 230); color: rgba(0, 0, 0, 1); } + .kb-data-obj-graph-ref-to { margin-top: 8px; } @@ -2303,18 +2478,21 @@ button.kb-data-obj { padding: 10px 20px; margin: 3px; font-size: 14px; - font-family: "Roboto",Helvetica,Arial,sans-serif; + font-family: "Roboto", Helvetica, Arial, sans-serif; font-weight: 400; box-shadow: 1px 1px 3px #aaa; } + .kb-primary-btn:hover { background-color: #1E88E5; } + .kb-primary-btn[disabled] { box-shadow: none; background-color: #BBDEFB; color: #fff; } + /* gray button in the new style */ .kb-default-btn { background-color: #F5F5F5; @@ -2324,13 +2502,15 @@ button.kb-data-obj { padding: 10px 20px; margin: 3px; font-size: 14px; - font-family: "Roboto",Helvetica,Arial,sans-serif; + font-family: "Roboto", Helvetica, Arial, sans-serif; font-weight: 400; box-shadow: 1px 1px 3px #aaa; } + .kb-default-btn:hover { background-color: #CECECE; } + .kb-default-btn[disabled] { box-shadow: none; color: #aaa; @@ -2343,33 +2523,33 @@ button.kb-data-obj { /* card layout */ -.narrative-card-logo{ +.narrative-card-logo { display: flex; width: 50px; margin-right: 2px; } -.narrative-card-row-main{ +.narrative-card-row-main { display: flex; align-items: center; - width:98%; - margin:0px 2px; - padding:0px 4px; + width: 98%; + margin: 0px 2px; + padding: 0px 4px; } -.narrative-data-list-subcontent{ - padding-left :10px; +.narrative-data-list-subcontent { + padding-left: 10px; } -.narrative-card-ellipsis{ - display:flex; +.narrative-card-ellipsis { + display: flex; align-items: center; justify-content: center; - width:20px; + width: 20px; } -.narrative-card-palette-icon{ +.narrative-card-palette-icon { position: relative; color: '#888'; left: 15px; @@ -2377,14 +2557,14 @@ button.kb-data-obj { } -.narrative-card-action-button-wrapper{ +.narrative-card-action-button-wrapper { width: 80px; height: 50px; margin: 0px 10px; } -.narrative-card-action-button{ +.narrative-card-action-button { width: calc(100% - 6px); height: 80%; display: flex; @@ -2392,28 +2572,31 @@ button.kb-data-obj { justify-content: center; } -.narrative-card-action-button > span{ +.narrative-card-action-button > span { margin-right: 5px; } -.narrative-card-action-button-name{ + +.narrative-card-action-button-name { display: inline-block; } -.narrative-data-panel-btnToolbar > span{ + +.narrative-data-panel-btnToolbar > span { color: #888; } -.narrative-data-panel-btnToolbar{ + +.narrative-data-panel-btnToolbar { display: flex; justify-content: center; } /* data list */ -.kb-data-list-obj-row, .narrative-card-row{ +.kb-data-list-obj-row, .narrative-card-row { transition: all 0.1s ease; border-left-style: solid; border-left-width: 5px; border-left-color: #fff; - color:#333; + color: #333; box-shadow: 1px 1px 1px 1px #fff; --webkit-box-shadow: 1px 1px 1px 1px #fff; @@ -2452,9 +2635,9 @@ button.kb-data-obj { .kb-data-list-obj-row-main { - width:100%; - margin:0px; - padding:0px; + width: 100%; + margin: 0px; + padding: 0px; } /* again the css hover over div inherits strangly, so we use js */ @@ -2471,7 +2654,7 @@ button.kb-data-obj { .kb-data-list-add-data-button { - cursor:pointer; + cursor: pointer; background-color: #F44336; color: #fff; border: none; @@ -2480,11 +2663,12 @@ button.kb-data-obj { moz-box-shadow: 1px 1px 3px #aaa; text-align: center; - width: 30pt; + width: 30pt; height: 30pt; border-radius: 50%; padding-top: 5pt; } + /* specialize buttons that hover over narrative */ #kb-add-code-cell, #kb-add-md-cell { box-shadow: #CECECE 2px 2px 1px; @@ -2493,11 +2677,17 @@ button.kb-data-obj { background-color: #2196F3; opacity: 0.5; } -#kb-add-code-cell { right: 100px; } -#kb-add-md-cell { margin-right: 20px; } + +#kb-add-code-cell { + right: 100px; +} + +#kb-add-md-cell { + margin-right: 20px; +} .kb-data-list-add-data-button:hover { - cursor:pointer; + cursor: pointer; background-color: #DC3C31; } @@ -2509,12 +2699,13 @@ button.kb-data-obj { padding: 10px 20px; margin: 3px; font-size: 14px; - font-family: "Roboto",Helvetica,Arial,sans-serif; + font-family: "Roboto", Helvetica, Arial, sans-serif; font-weight: 400; box-shadow: 1px 1px 3px #aaa; -webkit-box-shadow: 1px 1px 3px #aaa; moz-box-shadow: 1px 1px 3px #aaa; } + .kb-data-list-add-data-text-button:hover { background-color: #DC3C31; } @@ -2533,9 +2724,11 @@ button.kb-data-obj { moz-box-shadow: 1px 1px 3px #aaa; margin: 5px; } + .kb-data-list-btn:hover { background-color: #1E88E5; } + .kb-data-list-btn[disabled] { box-shadow: none; background-color: #BBDEFB; @@ -2554,29 +2747,27 @@ button.kb-data-obj { moz-box-shadow: 1px 1px 3px #aaa; margin: 5px; } + .kb-data-list-cancel-btn:hover { background-color: #CECECE; } .kb-data-list-row-hr { - width:70%; + width: 70%; margin: 2px auto; } - - - .kb-data-list-logo { - width: 30pt; + width: 30pt; height: 30pt; - color: #fff; + color: #fff; background-color: #607D8B; border-radius: 50%; - border-style: solid; - border-width: 0px; - border-color: #555; + border-style: solid; + border-width: 0px; + border-color: #555; text-align: center; display: inline-block; padding-top: 6pt; @@ -2584,20 +2775,24 @@ button.kb-data-obj { font-weight: bold; text-shadow: -1px 0 #777, 0 1px #777, 1px 0 #777, 0 -1px #777; } + /* For shifting over logos that are stacked on * top of eachother */ .kb-data-list-logo-shifted1 { margin-left: 1px; margin-top: 1px; } + .kb-data-list-logo-shiftedx1 { margin-left: 8px; margin-top: 6px; } + .kb-data-list-logo-shifted2 { margin-left: 9px; margin-top: 7px; } + .kb-data-list-logo-shiftedx2 { margin-left: 16px; margin-top: 12px; @@ -2615,6 +2810,7 @@ button.kb-data-obj { .kb-data-list-level1 { margin-left: 25px; } + .kb-data-list-level2 { margin-left: 50px; } @@ -2628,86 +2824,95 @@ button.kb-data-obj { .kb-data-list-name { - color:#2e618d; + color: #2e618d; font-size: 11pt; font-family: 'Oyxgen', Arial, sans-serif; font-weight: bold; margin: 2px; cursor: pointer; } + .kb-data-list-name:hover { text-decoration: underline; } + .kb-data-list-version { - color:#777; + color: #777; font-size: 9pt; font-style: italic; white-space: nowrap; - cursor:default; + cursor: default; } + .kb-data-list-type { - color:#777; + color: #777; font-size: 10pt; margin: 2px; - cursor:default; + cursor: default; } + .kb-data-list-date { - color:#777; + color: #777; font-size: 10pt; margin: 2px; white-space: nowrap; - cursor:default; + cursor: default; } + .kb-data-list-edit-by { - color:#777; + color: #777; font-size: 10pt; margin: 2px; margin-left: 0px; white-space: nowrap; cursor: pointer; } + .kb-data-list-edit-by:hover { - color:#444; + color: #444; } .kb-data-list-narinfo { - color:#777; + color: #777; font-size: 10pt; margin: 2px; margin-left: 10px; /* Not a link anymore, so we disable for now cursor: pointer;*/ } + .kb-data-list-narinfo:hover { /*color:#444;*/ } .kb-data-list-narrative-error { - color:#F44336; + color: #F44336; font-size: 10pt; margin: 2px; } .kb-data-list-narrative { - color:#777; + color: #777; font-size: 10pt; margin: 2px; margin-left: 10px; /* cursor:pointer; */ } + .kb-data-list-narrative:hover { /* narrative btn isn't a link yet, so don't highlight *color:#444;*/ } .kb-data-list-more { - color:#777; + color: #777; font-size: 8pt; margin: 0px; padding: 0px; margin-left: 15px; white-space: nowrap; } + .kb-data-list-more-btn { padding: 2px 4px; font-size: 12px; @@ -2718,43 +2923,51 @@ button.kb-data-obj { moz-box-shadow: none; margin: 0; } + .kb-data-list-more-div { - color:#777; + color: #777; font-size: 10pt; margin: 2px; display: flex; flex-direction: column; align-items: center; } + .kb-data-list-more-div tr { - color:#777; + color: #777; font-size: 10pt; margin: 2px; } + .kb-data-list-more-div tr:hover { background-color: #eee; } + .kb-data-list-more-div tr:nth-child(odd) { background-color: #F5F5F5; } + .kb-data-list-more-div tr:hover:nth-child(odd) { background-color: #eee; } + .kb-data-list-more-div th { - color:#777; + color: #777; font-size: 10pt; font-weight: bold; text-align: right; margin: 2px; } + .kb-data-list-more-div td { - color:#777; + color: #777; font-size: 10pt; text-align: left; margin: 2px; padding-left: 8px; word-break: break-all; } + .kb-data-list-job-name:hover { text-decoration: none; } @@ -2772,6 +2985,7 @@ button.kb-data-obj { background-color: #FFF; text-shadow: none; } + .kb-data-list-ctl[enabled] { background-color: lightgrey; } @@ -2779,7 +2993,6 @@ button.kb-data-obj { /* end data list*/ - /* APP CATALOG SLIDEOUT BROWSER STYLES */ .kbcb-browser-container { margin: 0 auto; @@ -2802,14 +3015,15 @@ button.kb-data-obj { .kbcb-loading-panel-div { margin: 0.1em; - text-align:center; - vertical-align:middle; + text-align: center; + vertical-align: middle; } .unselected .prompt .method-icon { color: silver; } + .method-icon { color: rgb(103, 58, 183); } @@ -2817,6 +3031,7 @@ button.kb-data-obj { .unselected .prompt .app-icon { color: silver; } + .app-icon { color: rgb(0, 150, 136); } @@ -2834,7 +3049,7 @@ button.kb-data-obj { .kbcb-app-card-container { margin: 0.4em; width: 300px; - height:110px; + height: 110px; display: block; position: relative; float: left; @@ -2844,48 +3059,52 @@ button.kb-data-obj { background: #f1f1f5; border-radius: 2px; width: 100%; - height:100%; - overflow:hidden; - text-align:center; - vertical-align:middle; - color:#666; + height: 100%; + overflow: hidden; + text-align: center; + vertical-align: middle; + color: #666; } + .kbcb-app-card-header { - max-height:90px; - overflow:hidden; + max-height: 90px; + overflow: hidden; text-align: left; } + .kbcb-app-card-title-panel { padding: 10px 5px 5px 5px; } .kbcb-app-card-title { - font-size:1.1em; + font-size: 1.1em; /*max-height: 2.6em; overflow:hidden;*/ } .kbcb-app-card-module { - font-size:0.8em; + font-size: 0.8em; } + .kbcb-app-card-authors { - font-size:0.8em; + font-size: 0.8em; } + .kbcb-app-card-subtitle { padding: 10px 10px 10px 10px; - font-size:0.9em; - overflow:hidden; + font-size: 0.9em; + overflow: hidden; } .kbcb-app-card-footer { - font-size:0.9em; - position:absolute; - bottom:0; - left:0; - margin:0px 5px 5px 5px; - width:100%; - color:#888; + font-size: 0.9em; + position: absolute; + bottom: 0; + left: 0; + margin: 0px 5px 5px 5px; + width: 100%; + color: #888; } .kbcb-app-card-logo { @@ -2895,28 +3114,31 @@ button.kb-data-obj { } -.kbcb-star-default{ - color:#888; +.kbcb-star-default { + color: #888; } .kbcb-star-favorite { - color:orange; + color: orange; } -.kbcb-star-nonfavorite, .kbcb-star-favorite, .kbcb-star-default{ - cursor:pointer; + +.kbcb-star-nonfavorite, .kbcb-star-favorite, .kbcb-star-default { + cursor: pointer; } + .kbcb-star-nonfavorite:hover, .kbcb-star-default:hover { - color:red; + color: red; } .kbcb-star-favorite:hover { - color:orange; + color: orange; } .kbcb-star-count { margin-left: 0.3em; display: inline-block; } + .kbcb-run-count { margin-left: 0.3em; display: inline-block; @@ -2924,18 +3146,19 @@ button.kb-data-obj { .kbcb-info { } + .kbcb-info:hover { - color:orange; + color: orange; } .kbcb-hover { - box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); - transition: all 0.2s ease-in-out; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + transition: all 0.2s ease-in-out; } .kbcb-hover:hover { - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); - cursor:pointer; + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + cursor: pointer; } @@ -2943,38 +3166,42 @@ button.kb-data-obj { .kbcb-app-page { background: #f1f1f5; border-radius: 2px; - text-align:center; - color:#666; + text-align: center; + color: #666; } + .kbcb-app-page-header { text-align: left; } + .kbcb-app-page-title-panel { padding: 10px 5px 5px 0px; } .kbcb-app-page-title { - font-size:2em; + font-size: 2em; /*max-height: 2.6em; overflow:hidden;*/ } .kbcb-app-page-module { - font-size:1.2em; + font-size: 1.2em; } + .kbcb-app-page-authors { - font-size:1em; - margin:0.3em 0 0 0; + font-size: 1em; + margin: 0.3em 0 0 0; } + .kbcb-app-page-subtitle { padding: 1.5em 2em 0em 2em; - font-size:1.2em; + font-size: 1.2em; } .kbcb-app-page-stats-bar { - font-size:1.2em; - padding:0em 2em 0.8em 3em; - width:100%; + font-size: 1.2em; + padding: 0em 2em 0.8em 3em; + width: 100%; } .kbcb-app-page-logo { @@ -2987,24 +3214,16 @@ button.kb-data-obj { /* END CATALOG SLIDEOUT BROWSER STYLES */ - - - - - - - - /* share panel styles */ .kb-share-user-permissions-dropdown { - border-style:none; + border-style: none; text-shadow: none !important; box-shadow: none; -webkit-box-shadow: none; moz-box-shadow: none; - padding:2px; - width:auto; - height:auto; + padding: 2px; + width: auto; + height: auto; } .kb-share-select { @@ -3021,7 +3240,7 @@ button.kb-data-obj { .kb-nar-manager-titles { font-family: 'Oxygen'; font-weight: bold; - color: #777; + color: #777; margin: 10px; margin-top: 20px; font-size: 14pt; @@ -3032,11 +3251,10 @@ button.kb-data-obj { /* End kbaseData.css */ - /* styling for data import overlay */ .kb-import-content { - position:relative; + position: relative; margin: 0 0 0 0px; /*overflow-x: hidden; overflow-y: auto;*/ @@ -3088,6 +3306,7 @@ button.kb-data-obj { margin-top: 15px; /*override*/ margin-bottom: 0; } + /* .kb-import-item input[type="checkbox"] { margin: 15px 30px 15px 0px; @@ -3127,10 +3346,12 @@ button.kb-data-obj { .kb-error-dialog strong { color: darkgreen; /* Douglas Adams forever */ } + .kb-err-text { color: black; font-family: Consolas, "Courier New", monospace; } + .kb-err-warn { color: firebrick; font-style: italic; @@ -3141,6 +3362,7 @@ button.kb-data-obj { #kb-ro-btn { margin-right: 20px; } + #kb-view-mode { display: inline-block; font-size: 13pt; @@ -3148,6 +3370,7 @@ button.kb-data-obj { padding: 0; cursor: pointer; } + #kb-view-mode-narr div { display: inline-block; /*background-color: #2196F3; @@ -3176,10 +3399,12 @@ button.kb-data-obj { background-color: #2196F3; padding-left: 5px; } + /* move icon down a bit */ #kb-view-mode-narr-hide span { margin-top: 10px; } + /* this is the banner for readonly mode */ .navbar-right div.label-warning { font-family: 'Oxygen', Arial, sans-serif; @@ -3223,13 +3448,13 @@ button.kb-data-obj { } .loading-warning { - position:absolute; + position: absolute; display: none; } /* Override the default max-width of the narrative box */ /*.container {*/ - /*max-width: 2000px !important;*/ +/*max-width: 2000px !important;*/ /*}*/ /* Styles for KNHX trees to remove its document.write nonsense that breaks asynchronous loading */ @@ -3241,6 +3466,7 @@ button.kb-data-obj { visibility: hidden; font-size: 12px; } + #popdiv a.alt { padding-left: 9px; font: 12px monospace; diff --git a/kbase-extension/static/kbase/templates/data_staging/file_path.html b/kbase-extension/static/kbase/templates/data_staging/file_path.html index cd06edff7a..dc1cc485ae 100644 --- a/kbase-extension/static/kbase/templates/data_staging/file_path.html +++ b/kbase-extension/static/kbase/templates/data_staging/file_path.html @@ -1,4 +1,4 @@ -Staging Area +Staging Area
-{{#each path}}/ {{#if @last}}{{ term }}{{ else }}{{ term }}{{/if}} {{/each}} + {{#each path}}/ {{#if @last}}{{ term }}{{ else }}{{ term }}{{/if}} {{/each}}
\ No newline at end of file From 0541cbfd2504c87247db9d2004c815838d5cace1 Mon Sep 17 00:00:00 2001 From: Steve Chan Date: Wed, 7 Oct 2020 11:43:39 -0700 Subject: [PATCH 045/108] Update to see if we can get a PR image now that the latest image builds --- docs/deploy_narrative.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/deploy_narrative.md b/docs/deploy_narrative.md index 872f82db90..018411766e 100644 --- a/docs/deploy_narrative.md +++ b/docs/deploy_narrative.md @@ -75,7 +75,7 @@ The [next](https://next.kbase.us), [appdev](https://appdev.kbase.us), and [prod] ### Deploying Narrative-Refactor -The [narrative-refactor](https://narrative-refactor.kbase.us) image is built against the "truss" branch of the repo and is called narrative-truss:pr### when still in a PR state or narrative-truss:latest after merge +The [narrative-refactor](https://narrative-refactor.kbase.us) image is automatically built against the "truss" branch of the repo and is called narrative-truss:pr### when still in a PR state or narrative-truss:latest after merge. The images can be found here: https://github.com/orgs/kbase/packages #### Create Release Image From 649bd80a45cbc88032d553fb2733763056badd55 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Wed, 7 Oct 2020 13:35:52 -0800 Subject: [PATCH 046/108] make codacy happy --- test/unit/spec/narrative_core/kbaseNarrativeDataList-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/spec/narrative_core/kbaseNarrativeDataList-spec.js b/test/unit/spec/narrative_core/kbaseNarrativeDataList-spec.js index 6f2afad665..27510d8276 100644 --- a/test/unit/spec/narrative_core/kbaseNarrativeDataList-spec.js +++ b/test/unit/spec/narrative_core/kbaseNarrativeDataList-spec.js @@ -34,7 +34,7 @@ define([ contentType: 'application/json', responseText: JSON.stringify(narrativeServiceInfo) }); - }; + } function mockNarrativeServiceListObjects(objData) { jasmine.Ajax.stubRequest(fakeNSUrl).andReturn({ From 46059f3ad3d2ebbd0b82f6015d86b9caf6cbf5fa Mon Sep 17 00:00:00 2001 From: bio-boris Date: Wed, 7 Oct 2020 16:42:07 -0500 Subject: [PATCH 047/108] Moves button. Comments out old section, not sure what that space was for --- .../narrative_core/kbaseCellToolbarMenu.js | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js index 7523f6391c..c604e8469c 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js @@ -368,7 +368,32 @@ define([ var events = Events.make({ node: container }), buttons = [ div({ class: 'buttons pull-right' }, [ - span({ class: 'kb-func-timestamp' }), + renderOptions(cell, events), + (function() { + var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), + toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), + color = (toggleMinMax === 'maximized' ? '#000' : 'rgba(255,137,0,1)'); + return button({ + type: 'button', + class: 'btn btn-default btn-xs', + dataToggle: 'tooltip', + dataPlacement: 'left', + title: true, + dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', + id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) + }, [ + span({ + class: 'fa fa-' + toggleIcon + '-square-o fa-lg', + style: { + color: color + } + }) + ]); + }()), + + + + // span({ class: 'kb-func-timestamp' }), span({ class: 'fa fa-circle-o-notch fa-spin', style: { color: 'rgb(42, 121, 191)', display: 'none' } }), span({ class: 'fa fa-exclamation-triangle', style: { color: 'rgb(255, 0, 0)', display: 'none' } }), (readOnly ? null : button({ @@ -393,28 +418,7 @@ define([ }, [ span({ class: 'fa fa-arrow-down fa-lg' }) ])), - renderOptions(cell, events), - (function() { - var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), - toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), - color = (toggleMinMax === 'maximized' ? '#000' : 'rgba(255,137,0,1)'); - return button({ - type: 'button', - class: 'btn btn-default btn-xs', - dataToggle: 'tooltip', - dataPlacement: 'left', - title: true, - dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', - id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) - }, [ - span({ - class: 'fa fa-' + toggleIcon + '-square-o fa-lg', - style: { - color: color - } - }) - ]); - }()) + ]) ], message = div({ From fca5adbe812293194994a2d33f2f14f3e8e66841 Mon Sep 17 00:00:00 2001 From: bio-boris Date: Wed, 7 Oct 2020 17:14:07 -0500 Subject: [PATCH 048/108] Fixes order of buttons --- .../narrative_core/kbaseCellToolbarMenu.js | 46 +++++++++---------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js index c604e8469c..3272fe006c 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js @@ -369,31 +369,6 @@ define([ buttons = [ div({ class: 'buttons pull-right' }, [ renderOptions(cell, events), - (function() { - var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), - toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), - color = (toggleMinMax === 'maximized' ? '#000' : 'rgba(255,137,0,1)'); - return button({ - type: 'button', - class: 'btn btn-default btn-xs', - dataToggle: 'tooltip', - dataPlacement: 'left', - title: true, - dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', - id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) - }, [ - span({ - class: 'fa fa-' + toggleIcon + '-square-o fa-lg', - style: { - color: color - } - }) - ]); - }()), - - - - // span({ class: 'kb-func-timestamp' }), span({ class: 'fa fa-circle-o-notch fa-spin', style: { color: 'rgb(42, 121, 191)', display: 'none' } }), span({ class: 'fa fa-exclamation-triangle', style: { color: 'rgb(255, 0, 0)', display: 'none' } }), (readOnly ? null : button({ @@ -419,6 +394,27 @@ define([ span({ class: 'fa fa-arrow-down fa-lg' }) ])), + (function() { + var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), + toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), + color = (toggleMinMax === 'maximized' ? '#000' : 'rgba(255,137,0,1)'); + return button({ + type: 'button', + class: 'btn btn-default btn-xs', + dataToggle: 'tooltip', + dataPlacement: 'left', + title: true, + dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', + id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) + }, [ + span({ + class: 'fa fa-' + toggleIcon + '-square-o fa-lg', + style: { + color: color + } + }) + ]); + }()) ]) ], message = div({ From 5ddbbf91921a631097c573a9501f37dec48e0c61 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Wed, 7 Oct 2020 20:11:26 -0800 Subject: [PATCH 049/108] Add working tests --- .../appCell2/widgets/appCellWidget-spec.js | 232 ++++++++++-------- 1 file changed, 127 insertions(+), 105 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index b805826e12..d7b671d1ce 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -7,140 +7,162 @@ define([ 'jquery', '../../../../../../../narrative/nbextensions/appCell2/widgets/appCellWidget', 'common/runtime', + 'base/js/namespace', + 'bluebird' ], function( $, AppCell, - Runtime + Runtime, + Jupyter, + Promise ) { 'use strict'; - describe('The appCell widget module', function() { - var myAppCell = null; - it('Should load', function() { - expect(AppCell).not.toBe(null); - }); - - it('Should return a make function', function() { - expect(AppCell.make).toBeDefined(); - }); - - }); - - describe('The appCell widget instance', () => { - var $node = null; - var $appCell = null; - var mockAppCell = null; - - var workspaceInfo = { - globalread: "n", - id: 54745, - lockstat: "unlocked", - metadata: { - cell_count: "1", - narrative_nice_name: "Test Narrative", - searchtags: "narrative", - is_temporary: "false", - narrative: "1" - }, - moddate: "2020-10-06T03:30:52+0000", - name: "testUser:narrative_1601948894239", - object_count: 1, - owner: "testUser", - user_permission: "a" - }; - - var cell = { - metadata: { - kbase: { - attributes:{ - created: "Fri, 27 Mar 2020 17:39:10 GMT", - id: "71e12dca-3a12-4dd7-862b-125f4337e723", - info: { - label: "more...", - url: "/#appcatalog/app/simpleapp/example_method/beta" - }, - lastLoaded: "Tue, 06 Oct 2020 23:28:26 GMT", - status: "new", - subtitle: "Perform some kind of method", - title: "SimpleApp Simple Add" + let mockAppCell, $node, appCellPromise, $appCell; + + var workspaceInfo = { + globalread: "n", + id: 54745, + lockstat: "unlocked", + metadata: { + cell_count: "1", + narrative_nice_name: "Test Narrative", + searchtags: "narrative", + is_temporary: "false", + narrative: "1" + }, + moddate: "2020-10-06T03:30:52+0000", + name: "testUser:narrative_1601948894239", + object_count: 1, + owner: "testUser", + user_permission: "a" + }; + + var cell = { + cell_type: 'code', + metadata: { + kbase: { + type: 'app', + attributes:{ + created: "Fri, 27 Mar 2020 17:39:10 GMT", + id: "71e12dca-3a12-4dd7-862b-125f4337e723", + info: { + label: "more...", + url: "/#appcatalog/app/simpleapp/example_method/beta" }, - appCell: { - app: { - spec: { - parameters: [{ - advanced: 0, - allow_multiple: 0, - default_values: ["0"], - description: "The first parameter that needs to be entered to drive the method. This might be the first of many.", - disabled: 0, - field_type: "text", - id: "base_number", - optional: 1, - short_hint: "The first parameter", - text_options:{ - is_output_name: 0, - placeholder: "", - regex_constraint: [], - valid_ws_types: [], - validate_as: "int", - ui_class: "parameter", - ui_name: "base_number", - } - }] - } + lastLoaded: "Tue, 06 Oct 2020 23:28:26 GMT", + status: "new", + subtitle: "Perform some kind of method", + title: "SimpleApp Simple Add" + }, + appCell: { + app: { + spec: { + parameters: [{ + advanced: 0, + allow_multiple: 0, + default_values: ["0"], + description: "The first parameter that needs to be entered to drive the method. This might be the first of many.", + disabled: 0, + field_type: "text", + id: "base_number", + optional: 1, + short_hint: "The first parameter", + text_options:{ + is_output_name: 0, + placeholder: "", + regex_constraint: [], + valid_ws_types: [], + validate_as: "int", + ui_class: "parameter", + ui_name: "base_number", + } + }] } } - } - } - }; + }, + input: { - // Can't create a cell each time. I don't know how to kill the cellBus... - // beforeEach( () => { - var bus = Runtime.make().bus() - $node = $("
"); + }, + } + } + }; + + Jupyter.notebook = { + writable: true + }; + Jupyter.narrative = { + readonly: false + }; + + // Can only test the public functions... + describe('The appCell widget', () => { + + beforeEach( async () => { + $node = $('
'); + var bus = Runtime.make().bus(); mockAppCell = AppCell.make({ workspaceInfo: workspaceInfo, bus: bus, cell: cell, - }); - $appCell = mockAppCell.start({$node}); - // }); + }); - // afterEach(() => { - // $node = null; - // appCell = null; - // mockAppCell = null; - // bus.stop(); - // }); + afterEach(() => { + mockAppCell = null; + window.kbaseRuntime = null; + }); - it('Should render an app cell', function() { - console.log($appCell) - expect(true).toEqual(true); + it('Should load', () => { + expect(AppCell).not.toBe(null); }); - it('Should render the runtime control panel', function() { - expect(true).toEqual(true); + it('Should return a make function', () => { + expect(AppCell.make).toBeDefined(); }); - it('Should an action button in the control panel', function() { - expect(true).toEqual(true); + it('Can be instantiated', () => { + expect(mockAppCell).not.toBe(null); }); - it('When the mode: execution-requsted, the cancel button should be enabled', function() { - expect(true).toEqual(true); + it('Has expected functions when instantiated', () => { + expect(mockAppCell.init).toBeDefined(); + expect(mockAppCell.attach).toBeDefined(); + expect(mockAppCell.start).toBeDefined(); + expect(mockAppCell.stop).toBeDefined(); + expect(mockAppCell.detach).toBeDefined(); }); - it('When the mode: execution-requsted, the cancel button should be enabled', function() { - expect(true).toEqual(true); + it('has a method "init" which returns a promise then null', async () => { + var initPromise = mockAppCell.init(); + expect(initPromise instanceof Promise).toBeTrue(); + + var result = await initPromise; + expect(result).toBeNull(); }); - it('When the cancel button is clicked a confimation modal should appear', function() { - expect(true).toEqual(true); + // it('has a method "attach" which returns a promise then null', async () => { + // var attatchPromise = mockAppCell.attach($node); + // expect(attatchPromise instanceof Promise).toBeTrue(); + + // var result = await attatchPromise; + // expect(result).toBeNull(); + // }); + + // it('has a method "start" which returns a Promise', () => { + // expect(appCellPromise instanceof Promise).toBeTrue(); + // } + // ); + + it('has a method "stop" which returns a Promise', () => { + var stopPromise = mockAppCell.stop(); + expect(stopPromise instanceof Promise).toBeTrue(); }); - it('When the cancel button is clicked a confimation modal should appear', function() { - expect(true).toEqual(true); + it('has a method "detach" which returns a Promise', () => { + var detachPromise = mockAppCell.stop(); + expect(detachPromise instanceof Promise).toBeTrue(); }); }); + }); From 5186db733818c09640e73538ace9fb508ebf74d5 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Wed, 7 Oct 2020 20:14:31 -0800 Subject: [PATCH 050/108] Add working tests --- .../appCell2/widgets/appCellWidget-spec.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index d7b671d1ce..906056305e 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -148,10 +148,13 @@ define([ // expect(result).toBeNull(); // }); - // it('has a method "start" which returns a Promise', () => { - // expect(appCellPromise instanceof Promise).toBeTrue(); - // } - // ); + it('has a method "start" which returns a Promise', () => { + var startPromise = mockAppCell.start(); + expect(initPromise instanceof Promise).toBeTrue(); + + var result = await startPromise; + expect(result).toBeNull(); + }); it('has a method "stop" which returns a Promise', () => { var stopPromise = mockAppCell.stop(); From 94e5089995298ec17de491d79fddd5396f8ee33f Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 8 Oct 2020 08:33:20 -0700 Subject: [PATCH 051/108] make folder names clickable --- .../static/kbase/css/kbaseNarrative.css | 5 +++++ .../narrative_core/upload/stagingAreaViewer.js | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 7ed67eab8a..2043d6a4a3 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -11,6 +11,11 @@ text-overflow: ellipsis; } +.kb-data-staging-table-name > .kb-data-staging-folder:hover { + cursor: pointer; + text-decoration: underline; +} + .kb-data-staging-footer { font-family : Oxygen, Arial, sans-serif; font-weight: bold; diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index 3ef919b067..119234c13d 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -272,7 +272,7 @@ define([ if (isFolder) { disp = ''; } else { - disp = " " + disp; + disp = ' ' + disp; } return disp; } else { @@ -283,12 +283,18 @@ define([ aTargets: [1], sClass: 'staging-name', mRender: function (data, type, full) { + console.log(data); + console.log(full[0]); if (type === 'display') { var decompressButton = ''; if (data.match(/\.(zip|tar\.gz|tgz|tar\.bz|tar\.bz2|tar|gz|bz2)$/)) { - decompressButton = " "; + decompressButton = ' '; + } + + if (full[0] === 'true') { + data = '' + data + ''; } return '
' + decompressButton + @@ -333,6 +339,10 @@ define([ hide: Config.get('tooltip').hideDelay } }); + $('td:eq(1)', nRow).find('span.kb-data-staging-folder').off('click').on('click', e => { + $(e.currentTarget).off('click'); + this.updatePathFn(this.path += '/' + $(e.currentTarget).data().name); + }); $('td:eq(4)', nRow).find('select').select2({ placeholder: 'Select format' }); @@ -367,6 +377,7 @@ define([ $('td:eq(0)', nRow).find('button[data-name]').off('click').on('click', e => { + $(e.currentTarget).off('click'); this.updatePathFn(this.path += '/' + $(e.currentTarget).data().name); }); From c05d31de2bbd8220744b6cb0e42d0152d7fee9cd Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 8 Oct 2020 09:00:37 -0700 Subject: [PATCH 052/108] convert some inline styles to classes --- kbase-extension/static/kbase/css/kbaseNarrative.css | 11 ++++++++++- .../narrative_core/upload/stagingAreaViewer.js | 9 +++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 2043d6a4a3..3418d53fa3 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -5,17 +5,26 @@ font-weight: bold; } +.kb-data-staging-decompress { + border: 1px solid #cccccc; + border-radius : 1px; +} + .kb-data-staging-table-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } -.kb-data-staging-table-name > .kb-data-staging-folder:hover { +.kb-data-staging-folder:hover { cursor: pointer; text-decoration: underline; } +.kb-pointer { + cursor: pointer; +} + .kb-data-staging-footer { font-family : Oxygen, Arial, sans-serif; font-weight: bold; diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index 119234c13d..c53d6c29e6 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -272,7 +272,7 @@ define([ if (isFolder) { disp = ''; } else { - disp = ' ' + disp; + disp = ' ' + disp; } return disp; } else { @@ -283,14 +283,11 @@ define([ aTargets: [1], sClass: 'staging-name', mRender: function (data, type, full) { - console.log(data); - console.log(full[0]); if (type === 'display') { - - var decompressButton = ''; + let decompressButton = ''; if (data.match(/\.(zip|tar\.gz|tgz|tar\.bz|tar\.bz2|tar|gz|bz2)$/)) { - decompressButton = ' '; + decompressButton = ' '; } if (full[0] === 'true') { From bc8cb73b908e95e13a515d9e9a3aeed3650de829 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:03:02 -0800 Subject: [PATCH 053/108] Update tests --- .../appCell2/widgets/appCellWidget-spec.js | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index 906056305e..7fd5a86324 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -37,6 +37,8 @@ define([ user_permission: "a" }; + $inputElement = $('
'); + var cell = { cell_type: 'code', metadata: { @@ -80,9 +82,7 @@ define([ } } }, - input: { - - }, + input: [inputElement], } } }; @@ -132,13 +132,13 @@ define([ expect(mockAppCell.detach).toBeDefined(); }); - it('has a method "init" which returns a promise then null', async () => { - var initPromise = mockAppCell.init(); - expect(initPromise instanceof Promise).toBeTrue(); + // it('has a method "init" which returns a promise then null', async () => { + // var initPromise = mockAppCell.init(); + // expect(initPromise instanceof Promise).toBeTrue(); - var result = await initPromise; - expect(result).toBeNull(); - }); + // var result = await initPromise; + // expect(result).toBeNull(); + // }); // it('has a method "attach" which returns a promise then null', async () => { // var attatchPromise = mockAppCell.attach($node); @@ -148,9 +148,9 @@ define([ // expect(result).toBeNull(); // }); - it('has a method "start" which returns a Promise', () => { + it('has a method "start" which returns a Promise', async () => { var startPromise = mockAppCell.start(); - expect(initPromise instanceof Promise).toBeTrue(); + expect(startPromise instanceof Promise).toBeTrue(); var result = await startPromise; expect(result).toBeNull(); From 7a607f2a7db30da74095bbd9f0899b07112f48da Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:13:04 -0800 Subject: [PATCH 054/108] Cleanup comments --- .../appCell2/widgets/appCellWidget-spec.js | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index 7fd5a86324..736439a637 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -17,7 +17,7 @@ define([ Promise ) { 'use strict'; - let mockAppCell, $node, appCellPromise, $appCell; + let mockAppCell, $node; var workspaceInfo = { globalread: "n", @@ -132,22 +132,6 @@ define([ expect(mockAppCell.detach).toBeDefined(); }); - // it('has a method "init" which returns a promise then null', async () => { - // var initPromise = mockAppCell.init(); - // expect(initPromise instanceof Promise).toBeTrue(); - - // var result = await initPromise; - // expect(result).toBeNull(); - // }); - - // it('has a method "attach" which returns a promise then null', async () => { - // var attatchPromise = mockAppCell.attach($node); - // expect(attatchPromise instanceof Promise).toBeTrue(); - - // var result = await attatchPromise; - // expect(result).toBeNull(); - // }); - it('has a method "start" which returns a Promise', async () => { var startPromise = mockAppCell.start(); expect(startPromise instanceof Promise).toBeTrue(); From 6050bb287179bef7a6d0bc3c1664f30f8dc557e3 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:14:36 -0800 Subject: [PATCH 055/108] revert config.json --- src/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.json b/src/config.json index 4edff1a286..f9268f2ab8 100644 --- a/src/config.json +++ b/src/config.json @@ -103,7 +103,7 @@ "google_ad_conversion": "kR9OCLas4JgBEOy2pucC" }, "comm_wait_timeout": 600000, - "config": "dev", + "config": "narrative-refactor", "data_panel": { "initial_sort_limit": 10000, "max_name_length": 33, From 1173b531b668eb36b80e44bca1376ccfd8d2e158 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:16:43 -0800 Subject: [PATCH 056/108] revert karma conf --- test/unit/karma.conf.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 02fd0f5219..949f09ccca 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,8 +32,7 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - // {pattern: 'test/unit/spec/**/*.js', included: false}, - {pattern: 'test/unit/spec/nbextensions/appCell2/widgets/*.js', included: false}, + {pattern: 'test/unit/spec/**/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, From 05baf100aa6268d606bc63004554ef92211361f0 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:41:17 -0800 Subject: [PATCH 057/108] center icon --- kbase-extension/static/kbase/css/kbaseNarrative.css | 1 - 1 file changed, 1 deletion(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 589b2ac2c5..3a214c49b9 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -2448,7 +2448,6 @@ button.kb-data-obj { width: 30pt; height: 30pt; border-radius: 50%; - padding-top: 5pt; } /* specialize buttons that hover over narrative */ #kb-add-code-cell, #kb-add-md-cell { From f32c3025b654cb96795091af9bd27367cc202593 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:51:06 -0800 Subject: [PATCH 058/108] make codacy happy --- .../appCell2/widgets/appCellWidget-spec.js | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index 736439a637..fb79e0aca8 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -1,6 +1,4 @@ -/*global define*/ /*global describe, it, expect*/ -/*global jasmine*/ /*global beforeEach, afterEach*/ /*jslint white: true*/ define([ @@ -20,41 +18,39 @@ define([ let mockAppCell, $node; var workspaceInfo = { - globalread: "n", + globalread: 'n', id: 54745, - lockstat: "unlocked", + lockstat: 'unlocked', metadata: { - cell_count: "1", - narrative_nice_name: "Test Narrative", - searchtags: "narrative", - is_temporary: "false", - narrative: "1" + cell_count: '1', + narrative_nice_name: 'Test Narrative', + searchtags: 'narrative', + is_temporary: 'false', + narrative: '1' }, - moddate: "2020-10-06T03:30:52+0000", - name: "testUser:narrative_1601948894239", + moddate: '2020-10-06T03:30:52+0000', + name: 'testUser:narrative_1601948894239', object_count: 1, - owner: "testUser", - user_permission: "a" + owner: 'testUser', + user_permission: 'a' }; - $inputElement = $('
'); - var cell = { cell_type: 'code', metadata: { kbase: { type: 'app', attributes:{ - created: "Fri, 27 Mar 2020 17:39:10 GMT", - id: "71e12dca-3a12-4dd7-862b-125f4337e723", + created: 'Fri, 27 Mar 2020 17:39:10 GMT', + id: '71e12dca-3a12-4dd7-862b-125f4337e723', info: { - label: "more...", - url: "/#appcatalog/app/simpleapp/example_method/beta" + label: 'more...', + url: '/#appcatalog/app/simpleapp/example_method/beta' }, - lastLoaded: "Tue, 06 Oct 2020 23:28:26 GMT", - status: "new", - subtitle: "Perform some kind of method", - title: "SimpleApp Simple Add" + lastLoaded: 'Tue, 06 Oct 2020 23:28:26 GMT', + status: 'new', + subtitle: 'Perform some kind of method', + title: 'SimpleApp Simple Add' }, appCell: { app: { @@ -62,27 +58,26 @@ define([ parameters: [{ advanced: 0, allow_multiple: 0, - default_values: ["0"], - description: "The first parameter that needs to be entered to drive the method. This might be the first of many.", + default_values: ['0'], + description: 'The first parameter that needs to be entered to drive the method. This might be the first of many.', disabled: 0, - field_type: "text", - id: "base_number", + field_type: 'text', + id: 'base_number', optional: 1, - short_hint: "The first parameter", + short_hint: 'The first parameter', text_options:{ is_output_name: 0, - placeholder: "", + placeholder: '', regex_constraint: [], valid_ws_types: [], - validate_as: "int", - ui_class: "parameter", - ui_name: "base_number", + validate_as: 'int', + ui_class: 'parameter', + ui_name: 'base_number', } }] } } }, - input: [inputElement], } } }; @@ -97,7 +92,7 @@ define([ // Can only test the public functions... describe('The appCell widget', () => { - beforeEach( async () => { + beforeEach( () => { $node = $('
'); var bus = Runtime.make().bus(); mockAppCell = AppCell.make({ @@ -132,7 +127,7 @@ define([ expect(mockAppCell.detach).toBeDefined(); }); - it('has a method "start" which returns a Promise', async () => { + it('has a method start which returns a Promise', async () => { var startPromise = mockAppCell.start(); expect(startPromise instanceof Promise).toBeTrue(); @@ -140,12 +135,12 @@ define([ expect(result).toBeNull(); }); - it('has a method "stop" which returns a Promise', () => { + it('has a method stop which returns a Promise', () => { var stopPromise = mockAppCell.stop(); expect(stopPromise instanceof Promise).toBeTrue(); }); - it('has a method "detach" which returns a Promise', () => { + it('has a method detach which returns a Promise', () => { var detachPromise = mockAppCell.stop(); expect(detachPromise instanceof Promise).toBeTrue(); }); From 7a9953692f388a91993d8b96f289335c6d0bb70e Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 14:59:20 -0800 Subject: [PATCH 059/108] make codacy happy --- .../spec/nbextensions/appCell2/widgets/appCellWidget-spec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index fb79e0aca8..dad49e1f64 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -15,7 +15,7 @@ define([ Promise ) { 'use strict'; - let mockAppCell, $node; + let mockAppCell; var workspaceInfo = { globalread: 'n', @@ -93,7 +93,6 @@ define([ describe('The appCell widget', () => { beforeEach( () => { - $node = $('
'); var bus = Runtime.make().bus(); mockAppCell = AppCell.make({ workspaceInfo: workspaceInfo, From 83e57f7522a9e60ccf9cab9611f68c5b4e437f92 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Thu, 8 Oct 2020 15:09:26 -0800 Subject: [PATCH 060/108] oops --- test/unit/karma.conf.js | 2 +- .../nbextensions/appCell2/widgets/appCellWidget-spec.js | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 949f09ccca..ccd97f52fe 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,7 +32,7 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - {pattern: 'test/unit/spec/**/*.js', included: false}, + {pattern: 'test/unit/spec/nbextensions/appCell2/widgets/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index dad49e1f64..19edd66c3e 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -126,11 +126,11 @@ define([ expect(mockAppCell.detach).toBeDefined(); }); - it('has a method start which returns a Promise', async () => { - var startPromise = mockAppCell.start(); - expect(startPromise instanceof Promise).toBeTrue(); + it('has a method "init" which returns a promise then null', async () => { + var initPromise = mockAppCell.init(); + expect(initPromise instanceof Promise).toBeTrue(); - var result = await startPromise; + var result = await initPromise; expect(result).toBeNull(); }); From 47be99011278c6128d34650ab52a188a4dddc48e Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 8 Oct 2020 16:28:16 -0700 Subject: [PATCH 061/108] add tests for clicking folders and names --- .../upload/stagingAreaViewer.js | 1 + .../upload/stagingAreaViewer-spec.js | 103 ++++++++++-------- 2 files changed, 57 insertions(+), 47 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index c53d6c29e6..bd96ad5a62 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -43,6 +43,7 @@ define([ options: { refreshIntervalDuration: 30000, + path: '/' }, init: function (options) { diff --git a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js index 0b51deb5f9..7a16f4ae72 100644 --- a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js +++ b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js @@ -10,21 +10,21 @@ define ([ 'base/js/namespace', 'kbaseNarrative', 'testUtil' -], function( +], ( $, StagingAreaViewer, Jupyter -) { +) => { 'use strict'; - describe('Test the staging area viewer widget', function() { + describe('Test the staging area viewer widget', () => { let stagingViewer, - $targetNode = $('
'), + $targetNode, startingPath = '/', - updatePathFn = function(newPath) { }, + updatePathFn = () => {}, fakeUser = 'notAUser'; - beforeEach(function() { + beforeEach(() => { jasmine.Ajax.install(); jasmine.Ajax.stubRequest(/.*\/staging_service\/list\/?/).andReturn({ status: 200, @@ -33,14 +33,14 @@ define ([ responseHeaders: '', responseText: JSON.stringify([ { - name: "test_folder", - path: fakeUser + "/test_folder", + name: 'test_folder', + path: fakeUser + '/test_folder', mtime: 1532738637499, size: 34, isFolder: true }, { - name: "file_list.txt", - path: fakeUser + "/test_folder/file_list.txt", + name: 'file_list.txt', + path: fakeUser + '/test_folder/file_list.txt', mtime: 1532738637555, size: 49233, source: 'KBase upload' @@ -49,7 +49,7 @@ define ([ }); Jupyter.narrative = { userId: fakeUser, - getAuthToken: () => { return 'fakeToken'; }, + getAuthToken: () => 'fakeToken', sidePanel: { '$dataWidget': { '$overlayPanel': {} @@ -59,9 +59,10 @@ define ([ } }, showDataOverlay: () => {}, - addAndPopulateApp: (id, tag, inputs) => {}, + addAndPopulateApp: () => {}, hideOverlay: () => {}, }; + $targetNode = $('
'); stagingViewer = new StagingAreaViewer($targetNode, { path: startingPath, updatePathFn: updatePathFn, @@ -78,16 +79,16 @@ define ([ stagingViewer = null; }); - it('Should initialize properly', function() { + it('Should initialize properly', () => { expect(stagingViewer).not.toBeNull(); }); - it('Should render properly', function() { + it('Should render properly', () => { stagingViewer.render(); expect(stagingViewer).not.toBeNull(); }); - it('Should render properly with a Globus linked account', (done) => { + it('Should render properly with a Globus linked account', async () => { let $node = $('
'), linkedStagingViewer = new StagingAreaViewer($node, { path: startingPath, @@ -97,36 +98,26 @@ define ([ globusLinked: true } }); - linkedStagingViewer.render() - .then(() => { - expect($node.html()).toContain('Or upload to this staging area by using'); - expect($node.html()).toContain('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); - done(); - }); + await linkedStagingViewer.render(); + expect($node.html()).toContain('Or upload to this staging area by using'); + expect($node.html()).toContain('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); }); it('Should render properly without a Globus linked account', () => { expect($targetNode.html()).not.toContain('Or upload to this staging area by using'); }); - it('Should start a help tour', function() { + it('Should start a help tour', () => { stagingViewer.render(); stagingViewer.startTour(); expect(stagingViewer.tour).not.toBeNull(); }); - it('Should update its view with a proper subpath', function(done) { - stagingViewer.updateView() - .then(function() { - done(); - }) - .catch(err => { - console.log(err); - fail(); - }); + it('Should update its view with a proper subpath', async () => { + await stagingViewer.updateView(); }); - it('Should show an error when a path does not exist', (done, fail) => { + it('Should show an error when a path does not exist', async () => { const errorText = 'An error occurred while fetching your files'; jasmine.Ajax.stubRequest(/.*\/staging_service\/list\/foo?/).andReturn({ status: 404, @@ -136,16 +127,11 @@ define ([ responseText: errorText }); - stagingViewer.setPath('//foo') - .then(() => { - expect($targetNode.find('.alert.alert-danger').html()).toContain(errorText); - // reset path. something gets cached with how async tests run. - stagingViewer.setPath('/'); - done(); - }); + await stagingViewer.setPath('//foo'); + expect($targetNode.find('.alert.alert-danger').html()).toContain(errorText); }); - it('Should show a "no files" next when a path has no files', (done) => { + it('Should show a "no files" next when a path has no files', async () => { jasmine.Ajax.stubRequest(/.*\/staging_service\/list\/empty?/).andReturn({ status: 200, statusText: 'success', @@ -154,13 +140,8 @@ define ([ responseText: JSON.stringify([]) }); - stagingViewer.setPath('//empty') - .then(() => { - expect($targetNode.find('#kb-data-staging-table').html()).toContain('No files found.'); - // reset path. something gets cached with how async tests run. - stagingViewer.setPath('/'); - done(); - }); + await stagingViewer.setPath('//empty'); + expect($targetNode.find('#kb-data-staging-table').html()).toContain('No files found.'); }); it('Should respond to activate and deactivate commands', () => { @@ -171,6 +152,34 @@ define ([ expect(stagingViewer.refreshInterval).toBeUndefined(); }); + it('Should have clickable folder icons', async () => { + spyOn(stagingViewer, 'updatePathFn'); + await stagingViewer.render(); + stagingViewer.$elem.find('button[data-name="test_folder"]').click(); + expect(stagingViewer.updatePathFn).toHaveBeenCalledWith('//test_folder'); + }); + + it('Should have clickable folder names', async () => { + spyOn(stagingViewer, 'updatePathFn'); + await stagingViewer.render(); + stagingViewer.$elem.find('span.kb-data-staging-folder').click(); + expect(stagingViewer.updatePathFn).toHaveBeenCalledWith('//test_folder'); + }); + + it('Should have multi-clicked folder buttons only fire once', async () => { + spyOn(stagingViewer, 'updatePathFn'); + await stagingViewer.render(); + stagingViewer.$elem.find('button[data-name]').click().click().click(); + expect(stagingViewer.updatePathFn).toHaveBeenCalledTimes(1); + }); + + it('Should have multi-clicked folder names only fire once', async () => { + spyOn(stagingViewer, 'updatePathFn'); + await stagingViewer.render(); + stagingViewer.$elem.find('span.kb-data-staging-folder').click().click().click(); + expect(stagingViewer.updatePathFn).toHaveBeenCalledTimes(1); + }); + it('Should initialize an import app with the expected inputs', () => { const fileType = 'fastq_reads', fileName = 'foobar.txt', From b903878e639dff94d744f4cfed03ddce84777eeb Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 9 Oct 2020 10:37:48 -0700 Subject: [PATCH 062/108] wdio proof of concept --- package.json | 17 +- .../integration/specs/narrative_basic_test.js | 35 +++ test/integration/wdio.conf.js | 272 ++++++++++++++++++ 3 files changed, 320 insertions(+), 4 deletions(-) create mode 100644 test/integration/specs/narrative_basic_test.js create mode 100644 test/integration/wdio.conf.js diff --git a/package.json b/package.json index 333b60bf50..613400f8a5 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,13 @@ "private": true, "repository": "github.com/kbase/narrative", "devDependencies": { + "@wdio/cli": "^6.6.0", + "@wdio/local-runner": "^6.6.0", + "@wdio/mocha-framework": "^6.6.0", + "@wdio/spec-reporter": "^6.6.0", + "@wdio/sync": "^6.6.0", "bower": "^1.8.8", - "geckodriver": "^1.20.0", + "chromedriver": "^86.0.0", "grunt": "1.3.0", "grunt-cli": "1.3.2", "grunt-contrib-copy": "1.0.0", @@ -34,14 +39,18 @@ "puppeteer": "5.3.0", "requirejs": "2.3.6", "selenium-standalone": "6.20.0", - "selenium-webdriver": "3.6.0", + "selenium-webdriver": "^3.6.0", "string.prototype.endswith": "1.0.0", - "string.prototype.startswith": "1.0.0" + "string.prototype.startswith": "1.0.0", + "wdio-chromedriver-service": "^6.0.4", + "webdriverio": "^6.6.0" }, "scripts": { "bower": "bower install", "test": "grunt test", "build": "grunt build" }, - "dependencies": {} + "dependencies": { + "chrome-launcher": "^0.13.4" + } } diff --git a/test/integration/specs/narrative_basic_test.js b/test/integration/specs/narrative_basic_test.js new file mode 100644 index 0000000000..b7d1c54b9c --- /dev/null +++ b/test/integration/specs/narrative_basic_test.js @@ -0,0 +1,35 @@ +/*global describe, it, browser, expect, $, afterEach*/ +describe('Narrative tree page with login', () => { + 'use strict'; + const userToken = browser.config.kbaseToken; + + afterEach(() => { + browser.deleteCookies(); + }); + + // async version + it('should open the narrative tree page', async () => { + await browser.url('http://localhost:8888/narrative/tree'); + await expect(browser).toHaveTitle('KBase Narrative'); + }); + + // sync version + it('sets the user token', () => { + browser.url('http://localhost:8888/narrative/tree'); + $('.form-control').setValue(userToken); + + // find an anchor element with text = OK and click on it + $('=OK').click(); + expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); + }); + + it('opens a narrative', () => { + browser.url('http://localhost:8888/narrative/tree'); + $('.form-control').setValue(userToken); + $('=OK').click(); + browser.pause(1000); + $('span*=ProkkaTest').click(); + browser.switchWindow('http://localhost:8888/narrative/notebooks/ws.31932.obj.1'); + expect($('nav[id="header"]').isDisplayed()).toBeTruthy(); + }); +}); diff --git a/test/integration/wdio.conf.js b/test/integration/wdio.conf.js new file mode 100644 index 0000000000..e1f61bc01f --- /dev/null +++ b/test/integration/wdio.conf.js @@ -0,0 +1,272 @@ +exports.config = { + kbaseToken: 'your-token-here', + // + // ==================== + // Runner Configuration + // ==================== + // + // WebdriverIO allows it to run your tests in arbitrary locations (e.g. locally or + // on a remote machine). + runner: 'local', + // + // ================== + // Specify Test Files + // ================== + // Define which test specs should run. The pattern is relative to the directory + // from which `wdio` was called. Notice that, if you are calling `wdio` from an + // NPM script (see https://docs.npmjs.com/cli/run-script) then the current working + // directory is where your package.json resides, so `wdio` will be called from there. + // + specs: [ + './test/integration/specs/**/*.js' + ], + // Patterns to exclude. + exclude: [ + // 'path/to/excluded/files' + ], + // + // ============ + // Capabilities + // ============ + // Define your capabilities here. WebdriverIO can run multiple capabilities at the same + // time. Depending on the number of capabilities, WebdriverIO launches several test + // sessions. Within your capabilities you can overwrite the spec and exclude options in + // order to group specific specs to a specific capability. + // + // First, you can define how many instances should be started at the same time. Let's + // say you have 3 different capabilities (Chrome, Firefox, and Safari) and you have + // set maxInstances to 1; wdio will spawn 3 processes. Therefore, if you have 10 spec + // files and you set maxInstances to 10, all spec files will get tested at the same time + // and 30 processes will get spawned. The property handles how many capabilities + // from the same test should run tests. + // + maxInstances: 10, + // + // If you have trouble getting all important capabilities together, check out the + // Sauce Labs platform configurator - a great tool to configure your capabilities: + // https://docs.saucelabs.com/reference/platforms-configurator + // + capabilities: [{ + + // maxInstances can get overwritten per capability. So if you have an in-house Selenium + // grid with only 5 firefox instances available you can make sure that not more than + // 5 instances get started at a time. + maxInstances: 5, + // + browserName: 'chrome', + acceptInsecureCerts: true + // If outputDir is provided WebdriverIO can capture driver session logs + // it is possible to configure which logTypes to include/exclude. + // excludeDriverLogs: ['*'], // pass '*' to exclude all driver session logs + // excludeDriverLogs: ['bugreport', 'server'], + }], + // + // =================== + // Test Configurations + // =================== + // Define all options that are relevant for the WebdriverIO instance here + // + // Level of logging verbosity: trace | debug | info | warn | error | silent + logLevel: 'info', + // + // Set specific log levels per logger + // loggers: + // - webdriver, webdriverio + // - @wdio/applitools-service, @wdio/browserstack-service, @wdio/devtools-service, @wdio/sauce-service + // - @wdio/mocha-framework, @wdio/jasmine-framework + // - @wdio/local-runner, @wdio/lambda-runner + // - @wdio/sumologic-reporter + // - @wdio/cli, @wdio/config, @wdio/sync, @wdio/utils + // Level of logging verbosity: trace | debug | info | warn | error | silent + // logLevels: { + // webdriver: 'info', + // '@wdio/applitools-service': 'info' + // }, + // + // If you only want to run your tests until a specific amount of tests have failed use + // bail (default is 0 - don't bail, run all tests). + bail: 0, + // + // Set a base URL in order to shorten url command calls. If your `url` parameter starts + // with `/`, the base url gets prepended, not including the path portion of your baseUrl. + // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url + // gets prepended directly. + baseUrl: 'http://localhost', + // + // Default timeout for all waitFor* commands. + waitforTimeout: 10000, + // + // Default timeout in milliseconds for request + // if browser driver or grid doesn't send response + connectionRetryTimeout: 120000, + // + // Default request retries count + connectionRetryCount: 3, + // + // Test runner services + // Services take over a specific job you don't want to take care of. They enhance + // your test setup with almost no effort. Unlike plugins, they don't add new + // commands. Instead, they hook themselves up into the test process. + services: ['chromedriver'], + + // Framework you want to run your specs with. + // The following are supported: Mocha, Jasmine, and Cucumber + // see also: https://webdriver.io/docs/frameworks.html + // + // Make sure you have the wdio adapter package for the specific framework installed + // before running any tests. + framework: 'mocha', + // + // The number of times to retry the entire specfile when it fails as a whole + // specFileRetries: 1, + // + // Delay in seconds between the spec file retry attempts + // specFileRetriesDelay: 0, + // + // Whether or not retried specfiles should be retried immediately or deferred to the end of the queue + // specFileRetriesDeferred: false, + // + // Test reporter for stdout. + // The only one supported by default is 'dot' + // see also: https://webdriver.io/docs/dot-reporter.html + reporters: ['spec'], + + + + // + // Options to be passed to Mocha. + // See the full list at http://mochajs.org/ + mochaOpts: { + ui: 'bdd', + timeout: 60000 + }, + // + // ===== + // Hooks + // ===== + // WebdriverIO provides several hooks you can use to interfere with the test process in order to enhance + // it and to build services around it. You can either apply a single function or an array of + // methods to it. If one of them returns with a promise, WebdriverIO will wait until that promise got + // resolved to continue. + /** + * Gets executed once before all workers get launched. + * @param {Object} config wdio configuration object + * @param {Array.} capabilities list of capabilities details + */ + // onPrepare: function (config, capabilities) { + // }, + /** + * Gets executed before a worker process is spawned and can be used to initialise specific service + * for that worker as well as modify runtime environments in an async fashion. + * @param {String} cid capability id (e.g 0-0) + * @param {[type]} caps object containing capabilities for session that will be spawn in the worker + * @param {[type]} specs specs to be run in the worker process + * @param {[type]} args object that will be merged with the main configuration once worker is initialised + * @param {[type]} execArgv list of string arguments passed to the worker process + */ + // onWorkerStart: function (cid, caps, specs, args, execArgv) { + // }, + /** + * Gets executed just before initialising the webdriver session and test framework. It allows you + * to manipulate configurations depending on the capability or spec. + * @param {Object} config wdio configuration object + * @param {Array.} capabilities list of capabilities details + * @param {Array.} specs List of spec file paths that are to be run + */ + // beforeSession: function (config, capabilities, specs) { + // }, + /** + * Gets executed before test execution begins. At this point you can access to all global + * variables like `browser`. It is the perfect place to define custom commands. + * @param {Array.} capabilities list of capabilities details + * @param {Array.} specs List of spec file paths that are to be run + */ + // before: function (capabilities, specs) { + // }, + /** + * Runs before a WebdriverIO command gets executed. + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + */ + // beforeCommand: function (commandName, args) { + // }, + /** + * Hook that gets executed before the suite starts + * @param {Object} suite suite details + */ + // beforeSuite: function (suite) { + // }, + /** + * Function to be executed before a test (in Mocha/Jasmine) starts. + */ + // beforeTest: function (test, context) { + // }, + /** + * Hook that gets executed _before_ a hook within the suite starts (e.g. runs before calling + * beforeEach in Mocha) + */ + // beforeHook: function (test, context) { + // }, + /** + * Hook that gets executed _after_ a hook within the suite starts (e.g. runs after calling + * afterEach in Mocha) + */ + // afterHook: function (test, context, { error, result, duration, passed, retries }) { + // }, + /** + * Function to be executed after a test (in Mocha/Jasmine). + */ + // afterTest: function(test, context, { error, result, duration, passed, retries }) { + // }, + + + /** + * Hook that gets executed after the suite has ended + * @param {Object} suite suite details + */ + // afterSuite: function (suite) { + // }, + /** + * Runs after a WebdriverIO command gets executed + * @param {String} commandName hook command name + * @param {Array} args arguments that command would receive + * @param {Number} result 0 - command success, 1 - command error + * @param {Object} error error object if any + */ + // afterCommand: function (commandName, args, result, error) { + // }, + /** + * Gets executed after all tests are done. You still have access to all global variables from + * the test. + * @param {Number} result 0 - test pass, 1 - test fail + * @param {Array.} capabilities list of capabilities details + * @param {Array.} specs List of spec file paths that ran + */ + // after: function (result, capabilities, specs) { + // }, + /** + * Gets executed right after terminating the webdriver session. + * @param {Object} config wdio configuration object + * @param {Array.} capabilities list of capabilities details + * @param {Array.} specs List of spec file paths that ran + */ + // afterSession: function (config, capabilities, specs) { + // }, + /** + * Gets executed after all workers got shut down and the process is about to exit. An error + * thrown in the onComplete hook will result in the test run failing. + * @param {Object} exitCode 0 - success, 1 - fail + * @param {Object} config wdio configuration object + * @param {Array.} capabilities list of capabilities details + * @param {} results object containing test results + */ + // onComplete: function(exitCode, config, capabilities, results) { + // }, + /** + * Gets executed when a refresh happens. + * @param {String} oldSessionId session ID of the old session + * @param {String} newSessionId session ID of the new session + */ + //onReload: function(oldSessionId, newSessionId) { + //} +} From f8660227cef88cd4478518ffe8387e89027ab42c Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 9 Oct 2020 10:48:53 -0700 Subject: [PATCH 063/108] add integration test readme --- test/integration/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/integration/README.md diff --git a/test/integration/README.md b/test/integration/README.md new file mode 100644 index 0000000000..0cd5158f60 --- /dev/null +++ b/test/integration/README.md @@ -0,0 +1,10 @@ +# Quick webdriverio overview and instructions. + +1. `npm install` to get webdriverio (wdio) dependencies installed +2. Add your CI token to `test/integration/wdio.conf.js` under the `kbaseToken` key at the top of the file. +3. From the root of the repo, run `npx wdio test/integration/wdio.conf.js` (if this is accepted, we can move that to a make target, a la `make test-integration`) + +## For more reading: +* https://webdriver.io/ - overview of the project +* https://webdriver.io/docs/browserobject.html - how to use the browser object +* https://github.com/kbase/kbase-ui/tree/develop/src/test/integration-tests/specs - for wdio usage in kbase-ui. specifically, `theSpec.js` is the entrypoint (and invoked by the Makefile, which in turn calls grunt). This is somewhat more complicated as all tests are defined in yaml files, mostly provided by kbase-ui plugins. But it's wdio underneath. From 836b6ad1c1c94cab12086d74a1f8857a458c4306 Mon Sep 17 00:00:00 2001 From: Steve Chan Date: Fri, 9 Oct 2020 11:37:41 -0700 Subject: [PATCH 064/108] NOP change to trigger rebuild --- docs/deploy_narrative.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/deploy_narrative.md b/docs/deploy_narrative.md index 018411766e..6be73dd7fb 100644 --- a/docs/deploy_narrative.md +++ b/docs/deploy_narrative.md @@ -77,6 +77,7 @@ The [next](https://next.kbase.us), [appdev](https://appdev.kbase.us), and [prod] The [narrative-refactor](https://narrative-refactor.kbase.us) image is automatically built against the "truss" branch of the repo and is called narrative-truss:pr### when still in a PR state or narrative-truss:latest after merge. The images can be found here: https://github.com/orgs/kbase/packages + #### Create Release Image 1. Create a new [pull request](https://github.com/kbase/narrative/compare) to merge the `develop` branch into `master`. From 3c223fc6fc43015a4de8b62f13caa7c65b54ce93 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 9 Oct 2020 16:45:06 -0700 Subject: [PATCH 065/108] update from running black --- Makefile | 16 +- package-lock.json | 5049 +++++++++++++---- .../integration/specs/narrative_basic_test.js | 46 +- test/integration/wdio.conf.js | 30 +- test/unit/run_tests.py | 38 +- 5 files changed, 3959 insertions(+), 1220 deletions(-) diff --git a/Makefile b/Makefile index e67d1eaaf9..38a0334f43 100755 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ build-travis-narrative: sed -i 's/{{ if ne .Env.CONFIG_ENV "prod" }} true {{- else }} false {{- end }}/true/' src/config.json && \ jupyter notebook --version -test: test-backend test-frontend-unit test-frontend-e2e +test: test-backend test-frontend @echo "done running backend and frontend test scripts" # test-backend should use nose, or the like, to test our @@ -49,20 +49,20 @@ test-backend: sh $(BACKEND_TEST_SCRIPT) @echo "done" +test-frontend: + TOKEN="$(token)" python test/unit/run_tests.py -u -i + # test-frontend-unit should use karma and jasmine to test # each of the Javascript components of the Narrative. # This is achieved through the grunt test invocation test-frontend-unit: @echo "running frontend unit tests" - python test/unit/run_tests.py + python test/unit/run_tests.py -u @echo "done" -# test-frontend-e2e should use Selenium to perform an end- -# to-end test of the front end components, with a running -# Narrative system. -test-frontend-e2e: - @echo "running frontend end-to-end tests" - cd $(FRONTEND_TEST_DIR) +test-integration: + @echo "running integration tests" + TOKEN="$(token)" python test/unit/run_tests.py -i @echo "done" build-docs: diff --git a/package-lock.json b/package-lock.json index d16109ea92..72b762bee2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,19 +14,19 @@ } }, "@babel/core": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.0.tgz", - "integrity": "sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.6", "@babel/helper-module-transforms": "^7.11.0", "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.0", + "@babel/parser": "^7.11.5", "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", @@ -38,23 +38,29 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } + }, + "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.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", + "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", "dev": true, "requires": { - "@babel/types": "^7.11.0", + "@babel/types": "^7.11.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -178,12 +184,64 @@ "@babel/helper-validator-identifier": "^7.10.4", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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" + } + } } }, "@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", "dev": true }, "@babel/template": { @@ -198,37 +256,43 @@ } }, "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", + "@babel/generator": "^7.11.5", "@babel/helper-function-name": "^7.10.4", "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } + }, + "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.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.10.4", @@ -242,513 +306,1157 @@ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/node": { - "version": "14.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.2.tgz", - "integrity": "sha512-IzMhbDYCpv26pC2wboJ4MMOa9GKtjplXfcAqrMeNJpUUwpM/2ATt2w1JPUXwS6spu856TvKZL2AOmeU2rAxskw==", + "@jest/types": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.5.2.tgz", + "integrity": "sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg==", "dev": true, - "optional": true + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", "dev": true, - "optional": true, "requires": { - "@types/node": "*" + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "^1.1.9" } }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "@nodelib/fs.scandir": "2.1.3", + "fastq": "^1.6.0" } }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "@sindresorhus/is": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-3.1.2.tgz", + "integrity": "sha512-JiX9vxoKMmu8Y3Zr2RVathBL1Cdu4Nt4MuNWemt1Nc06A0RAin9c5FArkhGsyMBWfCu4zj+9b+GxtjAnE4qqLQ==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@testim/chrome-version": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.0.7.tgz", + "integrity": "sha512-8UT/J+xqCYfn3fKtOznAibsHpiuDshCb0fwgWxRazTT19Igp9ovoXMPhXyLD6m3CKQGTMHgqoxaFfMWaL40Rnw==", "dev": true }, - "agent-base": { + "@types/cacheable-request": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", - "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", "dev": true, "requires": { - "debug": "4" - }, - "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" - } - } + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, - "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==", + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "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" + "@types/minimatch": "*", + "@types/node": "*" } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", "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==", + "@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": { - "color-convert": "^1.9.0" + "@types/istanbul-lib-coverage": "*" } }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", "dev": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@types/istanbul-lib-report": "*" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } + "@types/node": "*" } }, - "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-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "@types/lodash": { + "version": "4.14.161", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.161.tgz", + "integrity": "sha512-EP6O3Jkr7bXvZZSZYlsgt5DIjiGr0dXP1/jVEwVLTFgg0d+3lWVQkRavYVQszV7dYUwvg0B8R0MBDpcmXg7XIA==", "dev": true }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true + "@types/lodash.merge": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.merge/-/lodash.merge-4.6.6.tgz", + "integrity": "sha512-IB90krzMf7YpfgP3u/EvZEdXVvm4e3gJbUvh5ieuI+o+XqiNEt6fCzqNRaiLlPVScLI59RxIGZMQ3+Ko/DJ8vQ==", + "dev": true, + "requires": { + "@types/lodash": "*" + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true + "@types/node": { + "version": "14.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.5.tgz", + "integrity": "sha512-jVFzDV6NTbrLMxm4xDSIW/gKnk8rQLF9wAzLWIOg+5nU6ACrIMndeBdXci0FGtqJbP9tQvm6V39eshc96TO2wQ==" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@types/puppeteer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.2.tgz", + "integrity": "sha512-JRuHPSbHZBadOxxFwpyZPeRlpPTTeMbQneMdpFd8LXdyNfFSiX950CGewdm69g/ipzEAXAmMyFF1WOWJOL/nKw==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "@types/node": "*" } }, - "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": { + "@types/responselike": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "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 + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "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 + "@types/yargs": { + "version": "15.0.7", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.7.tgz", + "integrity": "sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", + "@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 }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "@types/yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } }, - "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==", + "@wdio/cli": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-6.6.0.tgz", + "integrity": "sha512-cORaRtI9gQUW4Rrp8ByXxBZdMMhAzTPFEQJ1Qlu3BefDintF14jkScOs8qprxto3K9FOgi5oomp9bPOmd0TKwA==", "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" + "@wdio/config": "6.6.0", + "@wdio/logger": "6.6.0", + "@wdio/utils": "6.6.0", + "async-exit-hook": "^2.0.1", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "cli-spinners": "^2.1.0", + "ejs": "^3.0.1", + "fs-extra": "^9.0.0", + "inquirer": "^7.0.0", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "mkdirp": "^1.0.4", + "recursive-readdir": "^2.2.2", + "webdriverio": "6.6.0", + "yargs": "^16.0.3", + "yarn-install": "^1.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "cliui": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", + "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.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==", + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, - "is-data-descriptor": { + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "universalify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^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==", + "y18n": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.2.tgz", + "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==", + "dev": true + }, + "yargs": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", + "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "cliui": "^7.0.0", + "escalade": "^3.0.2", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.1", + "yargs-parser": "^20.0.0" } + }, + "yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA==", + "dev": true } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "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==", - "dev": true - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "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=", + "@wdio/config": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-6.6.0.tgz", + "integrity": "sha512-7yQds6v1q9oGD+xwDcAmc6klSj1EpjhrgwRXXyVaDxnjyD18Ln03/FOgrpxK5Kr5ra94nvQhA+JkfwlT0k+RdQ==", "dev": true, "requires": { - "tweetnacl": "^0.14.3" + "@wdio/logger": "6.6.0", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "@wdio/local-runner": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-6.6.0.tgz", + "integrity": "sha512-NOhnMSxHfoTh0ldIKI9rejUhlCISrKa1O5oUU/oPTQc+awMxHW1pLNZsUFUdnLS/0Pr8zW7Qv11TFy1eZqKJCw==", "dev": true, "requires": { - "callsite": "1.0.0" + "@wdio/logger": "6.6.0", + "@wdio/repl": "6.6.0", + "@wdio/runner": "6.6.0", + "async-exit-hook": "^2.0.1", + "stream-buffers": "^3.0.2" } }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "@wdio/logger": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-6.6.0.tgz", + "integrity": "sha512-BAvXcnlWdQC93MLWObetpcjHUEGR8niW2mH2KAwLPQhXwJkKxXjhlMKH/DmUn5uQ4/S7iySLlMq9EEEg9KuCwA==", "dev": true, "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "chalk": "^4.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" }, "dependencies": { - "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==", + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "ansi-regex": "^5.0.0" } } } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true + "@wdio/mocha-framework": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-6.6.0.tgz", + "integrity": "sha512-jxDwPWV3b6K1ubh1gUneVT6oJUpeoLL/Pj60F443X1ml4IkAXlY1JpREjzd0eeymx/EtoGNMvaV5NADRno8nIw==", + "dev": true, + "requires": { + "@wdio/logger": "6.6.0", + "@wdio/utils": "6.6.0", + "expect-webdriverio": "^1.1.5", + "mocha": "^8.0.1" + } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "@wdio/protocols": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-6.6.0.tgz", + "integrity": "sha512-0wWSZTB4sBzr9HG3hT9a0jaO+xPhz+eFdE/qMLvM8b1yPOOgHieGPSoTXPjkBaks0CZpqeimbT4myYoim2JK1w==", "dev": true }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "@wdio/repl": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-6.6.0.tgz", + "integrity": "sha512-i6Ss+0S4G6Q/3xsvF8uV1WR4mvrVnO0hKmXSfH5ewPHd67MroqemyURmNNoX0R/euHwG3U7tBZQyaK2JGPI0GA==", "dev": true, "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "@wdio/utils": "6.6.0" + } + }, + "@wdio/reporter": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-6.6.0.tgz", + "integrity": "sha512-9qO1+3IGIr68IkgPoRoJBl+f2bnJKx/xKFKJhnLpzFLmc76tsQ35C9OAw+xZpwEb+j7sXGFLU7N8LDtN/ogFbQ==", + "dev": true, + "requires": { + "fs-extra": "^9.0.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", "dev": true, "requires": { - "ms": "2.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", "dev": true } } }, - "bower": { - "version": "1.8.8", - "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", - "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==", - "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==", + "@wdio/runner": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-6.6.0.tgz", + "integrity": "sha512-1VNp/F9HNHR78U2zLrKyPBfXbec6avEtrMVmkgcYuIbGfdaqUGP1MhQyzwPbhCz1JfRNniqoHWi7gLc5lJvlrw==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@wdio/config": "6.6.0", + "@wdio/logger": "6.6.0", + "@wdio/utils": "6.6.0", + "deepmerge": "^4.0.0", + "gaze": "^1.1.2", + "webdriver": "6.6.0", + "webdriverio": "6.6.0" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "@wdio/spec-reporter": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-6.6.0.tgz", + "integrity": "sha512-JKeFsvVpG3LDfHDEHT/AAZgp8NafgTn7hwlSUBPQy9wiJv7HzbQp81Na1yNHhBIPQog+9VWcx1uIKphX+vSegg==", "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" - } - } + "@wdio/reporter": "6.6.0", + "chalk": "^4.0.0", + "easy-table": "^1.1.1", + "pretty-ms": "^7.0.0" } }, - "browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "@wdio/sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-6.6.0.tgz", + "integrity": "sha512-nv1dn1d6uHkO3zKtj2pbC1xtasOrsMvhGoudywYfExrOGvKax0lrSGEawkUeBaX/Nd4K4omu9qMYN9dpDqKU0A==", "dev": true, "requires": { - "pako": "~0.2.0" + "@types/puppeteer": "^3.0.1", + "@wdio/logger": "6.6.0", + "fibers": "^4.0.1" } }, - "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==", + "@wdio/utils": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-6.6.0.tgz", + "integrity": "sha512-2BcpNRlsaNEx+UvWay04i3+MS92dL+dMn0K/mi9/5XIgZDIHP+K0FISaZFaERzL/j7inyqjkyZu6xAeYup2O2g==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "@wdio/logger": "6.6.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, - "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==", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", "dev": true }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", "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==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "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-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dev": true, + "requires": { + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archiver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "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" + } + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + } + }, + "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" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + } + } + }, + "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-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "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 + }, + "array.prototype.map": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", + "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.4" + } + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "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" + } + }, + "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 + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "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 + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "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.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true + }, + "axios": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", + "dev": true, + "requires": { + "follow-redirects": "1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + } + } + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "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-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "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==", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "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" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "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" + } + } + } + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "bower": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/bower/-/bower-1.8.8.tgz", + "integrity": "sha512-1SrJnXnkP9soITHptSO+ahx3QKp3cVzn8poI6ujqc5SeOkg5iqM1pK9H+DSc2OQ8SnO0jC/NG4Ur/UIwy7574A==", + "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==", + "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" + } + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "~0.2.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==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "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 + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", + "dev": true, + "requires": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "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", @@ -757,6 +1465,27 @@ "unset-value": "^1.0.0" } }, + "cacheable-lookup": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", + "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^2.0.0" + } + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", @@ -779,12 +1508,6 @@ "map-obj": "^1.0.0" } }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -792,20 +1515,25 @@ "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, "chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", - "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", "dev": true, "requires": { "anymatch": "~3.1.1", @@ -868,6 +1596,88 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "chrome-launcher": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", + "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "requires": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + } + }, + "chromedriver": { + "version": "86.0.0", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-86.0.0.tgz", + "integrity": "sha512-byLJWhAfuYOmzRYPDf4asJgGDbI4gJGHa+i8dnQZGuv+6WW1nW1Fg+8zbBMOfLvGn7sKL41kVdmCEVpQHn9oyg==", + "dev": true, + "requires": { + "@testim/chrome-version": "^1.0.7", + "axios": "^0.19.2", + "del": "^5.1.0", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.0", + "mkdirp": "^1.0.4", + "tcp-port-used": "^1.0.1" + }, + "dependencies": { + "agent-base": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", + "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "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 + } + } + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -891,6 +1701,33 @@ } } }, + "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 + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.4.0.tgz", + "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -919,6 +1756,22 @@ } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "optional": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -930,18 +1783,18 @@ } }, "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colors": { @@ -983,11 +1836,35 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", "dev": true }, + "compress-commons": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", + "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "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" + } + } + } + }, "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 + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.2", @@ -1011,23 +1888,6 @@ "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "content-type": { @@ -1076,13 +1936,36 @@ "request": "^2.88.2" } }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", + "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", "dev": true, "requires": { - "capture-stack-trace": "^1.0.0" + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "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" + } + } } }, "cross-spawn": { @@ -1098,6 +1981,12 @@ "which": "^1.2.9" } }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", + "dev": true + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -1135,12 +2024,11 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "decamelize": { @@ -1155,6 +2043,51 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "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 + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "optional": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", + "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1205,6 +2138,33 @@ } } }, + "del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dev": true, + "requires": { + "globby": "^10.0.1", + "graceful-fs": "^4.2.2", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.1", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0" + }, + "dependencies": { + "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" + } + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1223,6 +2183,36 @@ "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", "dev": true }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "devtools": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-6.6.0.tgz", + "integrity": "sha512-gPMIlx+YV9v/rpSzGsWJL3wWleOxscqWtoCn7zHyJ6LNEbiTcTYSAvsfaaPHd24WLQ68W1zCguhLuzMQSIGfyg==", + "dev": true, + "requires": { + "@wdio/config": "6.6.0", + "@wdio/logger": "6.6.0", + "@wdio/protocols": "6.6.0", + "@wdio/utils": "6.6.0", + "chrome-launcher": "^0.13.1", + "puppeteer-core": "^5.1.0", + "ua-parser-js": "^0.7.21", + "uuid": "^8.0.0" + }, + "dependencies": { + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "dev": true + } + } + }, "devtools-protocol": { "version": "0.0.799653", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.799653.tgz", @@ -1235,6 +2225,35 @@ "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "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": "26.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.5.0.tgz", + "integrity": "sha512-ZXx86srb/iYy6jG71k++wBN9P9J05UNQ5hQHQd9MtMPvcqXPx/vKU69jfHV637D00Q2gSgPk2D+jSx3l1lDW/Q==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -1247,21 +2266,30 @@ "void-elements": "^2.0.0" } }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, "each-async": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/each-async/-/each-async-0.1.3.tgz", "integrity": "sha1-tDYCWwjaL4ZggCVRnjCWdj3t/KM=", "dev": true }, + "easy-table": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", + "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0", + "wcwidth": ">=1.0.1" + }, + "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 + } + } + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -1278,6 +2306,15 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, + "ejs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1321,37 +2358,55 @@ "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 } } }, "engine.io-client": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.3.tgz", - "integrity": "sha512-0NGY+9hioejTEJCaSJZfWZLk4FPI9dN+1H1C4+wj2iuFba47UgZbJzfWs4aNFajnX/qAaYKbe2lLTfEEWzCmcw==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.4.tgz", + "integrity": "sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ==", "dev": true, "requires": { "component-emitter": "~1.3.0", "component-inherit": "0.0.3", - "debug": "~4.1.0", + "debug": "~3.1.0", "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", + "parseqs": "0.0.6", + "parseuri": "0.0.6", "ws": "~6.1.0", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, "ws": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", @@ -1364,14 +2419,14 @@ } }, "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", + "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", "dev": true, "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", + "base64-arraybuffer": "0.1.4", "blob": "0.0.5", "has-binary2": "~1.0.2" } @@ -1392,22 +2447,51 @@ } }, "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", "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", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", + "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", + "dev": true, + "requires": { + "es-abstract": "^1.17.4", + "has-symbols": "^1.0.1", + "is-arguments": "^1.0.4", + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } } }, "es-to-primitive": { @@ -1439,6 +2523,12 @@ "integrity": "sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg==", "dev": true }, + "escalade": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", + "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1448,8 +2538,7 @@ "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 + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "esprima": { "version": "4.0.1", @@ -1464,9 +2553,9 @@ "dev": true }, "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "exit": { @@ -1490,15 +2579,6 @@ "to-regex": "^3.0.1" }, "dependencies": { - "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" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -1516,12 +2596,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -1534,6 +2608,30 @@ "homedir-polyfill": "^1.0.1" } }, + "expect": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.5.2.tgz", + "integrity": "sha512-ccTGrXZd8DZCcvCz4htGXTkd/LOoy6OEtiDS38x3/VVf6E4AQL0QoeksBiw7BtGR5xDNiRYPB8GN6pfbuTOi7w==", + "dev": true, + "requires": { + "@jest/types": "^26.5.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.5.2", + "jest-message-util": "^26.5.2", + "jest-regex-util": "^26.0.0" + } + }, + "expect-webdriverio": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-1.4.0.tgz", + "integrity": "sha512-UxlSw9VmU1IFCHWyWK3ZyzHFwrpAY1KAEHAcwNm2ODMaCCUCXV3VJjGRPZ99o0+YAcHxOd82A+xKDhdANY3bXg==", + "dev": true, + "requires": { + "expect": "^26.4.2", + "jest-matcher-utils": "^26.4.2" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -1561,6 +2659,28 @@ } } }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + } + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -1636,23 +2756,6 @@ "debug": "^2.6.9", "mkdirp": "^0.5.4", "yauzl": "^2.10.0" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } } }, "extsprintf": { @@ -1662,17 +2765,85 @@ "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==", + "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-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": 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, + "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==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "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, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "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 }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -1682,6 +2853,15 @@ "pend": "~1.2.0" } }, + "fibers": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-4.0.3.tgz", + "integrity": "sha512-MW5VrDtTOLpKK7lzw4qD7Z9tXaAhdOmOED5RHzg3+HjUk+ibkjVW0Py2ERtdqgTXaerLkVkBy2AEmJiT6RMyzg==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -1698,6 +2878,15 @@ "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", "dev": true }, + "filelist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz", + "integrity": "sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -1723,34 +2912,17 @@ }, "finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" } }, "find-up": { @@ -1806,6 +2978,23 @@ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true + } + } + }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", @@ -1813,9 +3002,9 @@ "dev": true }, "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", "dev": true }, "for-in": { @@ -1876,20 +3065,10 @@ "universalify": "^0.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.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.1.3", @@ -1904,17 +3083,13 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "geckodriver": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.20.0.tgz", - "integrity": "sha512-5nVF4ixR+ZGhVsc4udnVihA9RmSlO6guPV1d2HqxYsgAOUNh0HfzxbzG7E49w4ilXq/CSu87x9yWvrsOstrADQ==", + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", "dev": true, "requires": { - "adm-zip": "0.4.16", - "bluebird": "3.7.2", - "got": "5.6.0", - "https-proxy-agent": "5.0.0", - "tar": "6.0.2" + "globule": "^1.0.0" } }, "gensync": { @@ -1929,6 +3104,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", @@ -1969,7 +3150,6 @@ "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", @@ -2029,28 +3209,50 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + }, + "globule": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", + "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, "got": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz", - "integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=", - "dev": true, - "requires": { - "create-error-class": "^3.0.1", - "duplexer2": "^0.1.4", - "is-plain-obj": "^1.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "node-status-codes": "^1.0.0", - "object-assign": "^4.0.1", - "parse-json": "^2.1.0", - "pinkie-promise": "^2.0.0", - "read-all-stream": "^3.0.0", - "readable-stream": "^2.0.5", - "timed-out": "^2.0.0", - "unzip-response": "^1.0.0", - "url-parse-lax": "^1.0.0" + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-11.7.0.tgz", + "integrity": "sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg==", + "dev": true, + "requires": { + "@sindresorhus/is": "^3.1.1", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { @@ -2059,6 +3261,18 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "grunt": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.3.0.tgz", @@ -2082,30 +3296,11 @@ "rimraf": "~3.0.2" }, "dependencies": { - "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" - } - }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } } } }, @@ -2280,20 +3475,6 @@ "lodash": "^4.17.4" }, "dependencies": { - "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" - } - }, "jasmine-core": { "version": "2.99.1", "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", @@ -2337,58 +3518,6 @@ "requires": { "chalk": "~4.1.0", "lodash": "~4.17.19" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "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 - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "grunt-legacy-util": { @@ -2404,14 +3533,6 @@ "lodash": "~4.17.20", "underscore.string": "~3.3.5", "which": "~1.3.0" - }, - "dependencies": { - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true - } } }, "grunt-regex-replace": { @@ -2437,12 +3558,12 @@ "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==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -2488,9 +3609,9 @@ "dev": true }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { @@ -2541,6 +3662,12 @@ "pinkie-promise": "^2.0.0" } }, + "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 + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -2568,6 +3695,12 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -2611,24 +3744,40 @@ "sshpk": "^1.7.0" } }, + "http2-wrapper": { + "version": "1.0.0-beta.5.2", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.5.2.tgz", + "integrity": "sha512-xYz9goEyBnC8XwXDTuC/MZ6t+MrKVQZOk4s7+PaDkwIsQd8IwqvM+0M6bA/2lvG8GHXcPdf+MejTUeO2LCPCeQ==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", "dev": true, "requires": { - "agent-base": "6", + "agent-base": "5", "debug": "4" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } + }, + "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 } } }, @@ -2647,6 +3796,12 @@ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -2672,7 +3827,6 @@ "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" @@ -2681,8 +3835,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -2690,12 +3843,65 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", "dev": true }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, "is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -2726,6 +3932,12 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -2748,9 +3960,9 @@ "dev": true }, "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true }, "is-data-descriptor": { @@ -2799,10 +4011,9 @@ } }, "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" }, "is-extendable": { "version": "0.1.1", @@ -2837,6 +4048,18 @@ "is-extglob": "^2.1.0" } }, + "is-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", + "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2857,6 +4080,18 @@ } } }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -2872,16 +4107,10 @@ "isobject": "^3.0.1" } }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, "requires": { "has-symbols": "^1.0.1" @@ -2896,10 +4125,10 @@ "is-unc-path": "^1.0.0" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "is-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", + "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", "dev": true }, "is-stream": { @@ -2908,6 +4137,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -2932,6 +4167,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -2948,11 +4189,21 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "requires": { "is-docker": "^2.0.0" } }, + "is2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is2/-/is2-2.0.1.tgz", + "integrity": "sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "ip-regex": "^2.1.0", + "is-url": "^1.2.2" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3018,23 +4269,6 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", "supports-color": "^7.1.0" - }, - "dependencies": { - "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 - }, - "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" - } - } } }, "istanbul-lib-source-maps": { @@ -3049,32 +4283,124 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", + "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", + "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "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": { - "ms": "^2.1.1" + "color-convert": "^1.9.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "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" + } } } }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, "jasmine-ajax": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jasmine-ajax/-/jasmine-ajax-4.0.0.tgz", @@ -3088,6 +4414,58 @@ "dev": true, "requires": { "chalk": "^2.1.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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" + } + } } }, "jasmine-core": { @@ -3112,6 +4490,103 @@ "xmldom": "^0.1.22" } }, + "jest-diff": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.5.2.tgz", + "integrity": "sha512-HCSWDUGwsov5oTlGzrRM+UPJI/Dpqi9jzeV0fdRNi3Ch5bnoXhnyJMmVg2juv9081zLIy3HGPI5mcuGgXM2xRA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.5.0", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.5.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-matcher-utils": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.5.2.tgz", + "integrity": "sha512-W9GO9KBIC4gIArsNqDUKsLnhivaqf8MSs6ujO/JDcPIQrmY+aasewweXVET8KdrJ6ADQaUne5UzysvF/RR7JYA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.5.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.5.2" + } + }, + "jest-message-util": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.5.2.tgz", + "integrity": "sha512-Ocp9UYZ5Jl15C5PNsoDiGEk14A4NG0zZKknpWdZGoMzJuGAkVt10e97tnEVMYpk7LnQHZOfuK2j/izLBMcuCZw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.5.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": 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, + "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==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "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, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3119,9 +4594,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "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", @@ -3140,6 +4615,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -3189,9 +4670,9 @@ } }, "jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.5.0.tgz", + "integrity": "sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA==", "dev": true, "requires": { "lie": "~3.3.0", @@ -3209,24 +4690,23 @@ } }, "karma": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-5.1.1.tgz", - "integrity": "sha512-xAlOr5PMqUbiKXSv5PCniHWV3aiwj6wIZ0gUVcwpTCPVQm/qH2WAMFWxtnpM6KJqhkRWrIpovR4Rb0rn8GtJzQ==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/karma/-/karma-5.2.3.tgz", + "integrity": "sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.0.0", + "chokidar": "^3.4.2", "colors": "^1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "flatted": "^2.0.2", "glob": "^7.1.6", "graceful-fs": "^4.2.4", "http-proxy": "^1.18.1", "isbinaryfile": "^4.0.6", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "log4js": "^6.2.1", "mime": "^2.4.5", "minimatch": "^3.0.4", @@ -3236,7 +4716,7 @@ "socket.io": "^2.3.0", "source-map": "^0.6.1", "tmp": "0.2.1", - "ua-parser-js": "0.7.21", + "ua-parser-js": "0.7.22", "yargs": "^15.3.1" }, "dependencies": { @@ -3270,15 +4750,6 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3364,6 +4835,47 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "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" + } + }, + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3372,6 +4884,15 @@ "requires": { "ansi-regex": "^3.0.0" } + }, + "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" + } } } }, @@ -3403,6 +4924,15 @@ "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", "dev": true }, + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -3418,6 +4948,15 @@ "graceful-fs": "^4.1.9" } }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, "lcov-parse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", @@ -3463,6 +5002,15 @@ } } }, + "lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "requires": { + "debug": "^2.6.8", + "marky": "^1.2.0" + } + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -3486,9 +5034,75 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, "log-driver": { @@ -3504,6 +5118,58 @@ "dev": true, "requires": { "chalk": "^2.0.1" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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 + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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" + } + } } }, "log4js": { @@ -3520,16 +5186,34 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } + }, + "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 } } }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "dev": true + }, + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", @@ -3541,11 +5225,21 @@ } }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3593,6 +5287,11 @@ "object-visit": "^1.0.0" } }, + "marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==" + }, "maxmin": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz", @@ -3624,154 +5323,456 @@ "supports-color": "^2.0.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "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": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.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==", + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "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": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + }, + "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 + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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==" + }, + "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==", + "requires": { + "minimist": "^1.2.5" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mocha": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.3.tgz", + "integrity": "sha512-ZbaYib4hT4PpF4bdSO2DohooKXIn4lDeiYqB+vTmCdr6l2woW0b6H3pf5x4sM5nwQMru9RvjjHYWVGltR50ZBw==", + "dev": true, + "requires": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.4.2", + "debug": "4.1.1", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "object.assign": "4.1.0", + "promise.allsettled": "1.0.2", + "serialize-javascript": "4.0.0", + "strip-json-comments": "3.0.1", + "supports-color": "7.1.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.0", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.1" + }, + "dependencies": { + "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" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "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" + } + }, + "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 + }, + "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" + } + }, + "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 + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "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 + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "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 + }, + "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" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.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" + } + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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": { - "is-plain-object": "^2.0.4" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, - "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" - } - }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nanomatch": { @@ -3805,12 +5806,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -3838,6 +5833,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -3888,9 +5889,9 @@ } }, "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==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", "dev": true }, "object-keys": { @@ -3909,15 +5910,37 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "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.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } } }, "object.defaults": { @@ -3964,11 +5987,19 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3991,6 +6022,12 @@ "os-tmpdir": "^1.0.0" } }, + "p-cancelable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", + "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -4009,6 +6046,15 @@ "p-limit": "^2.2.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-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -4041,6 +6087,12 @@ "error-ex": "^1.2.0" } }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true + }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -4089,8 +6141,7 @@ "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 + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", @@ -4241,12 +6292,6 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, "pretty-bytes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", @@ -4257,6 +6302,35 @@ "meow": "^3.1.0" } }, + "pretty-format": { + "version": "26.5.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.5.2.tgz", + "integrity": "sha512-VizyV669eqESlkOikKJI8Ryxl/kPpbdLwNdPs2GrbQs18MpySB5S0Yo0N7zkg2xTRiFq4CFw8ct5Vg4a0xP0og==", + "dev": true, + "requires": { + "@jest/types": "^26.5.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + } + } + }, + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "requires": { + "parse-ms": "^2.1.0" + } + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -4269,12 +6343,31 @@ "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", "dev": true }, + "promise.allsettled": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", + "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.1", + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "iterate-value": "^1.0.0" + } + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -4317,11 +6410,68 @@ "ws": "^7.2.3" }, "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true + } + } + }, + "puppeteer-core": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.3.1.tgz", + "integrity": "sha512-YE6c6FvHAFKQUyNTqFs78SgGmpcqOPhhmVfEVNYB4abv7bV2V+B3r72T3e7vlJkEeTloy4x9bQLrGbHHoKSg1w==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.799653", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } }, "extract-zip": { "version": "2.0.1", @@ -4335,30 +6485,17 @@ "yauzl": "^2.10.0" } }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - } + "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 }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } } } }, @@ -4374,6 +6511,21 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "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" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4392,15 +6544,11 @@ "unpipe": "1.0.0" } }, - "read-all-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", - "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0", - "readable-stream": "^2.0.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": "1.1.0", @@ -4438,6 +6586,15 @@ "util-deprecate": "~1.0.1" } }, + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "readdirp": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", @@ -4456,6 +6613,15 @@ "resolve": "^1.1.6" } }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "requires": { + "minimatch": "3.0.4" + } + }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", @@ -4567,6 +6733,12 @@ "path-parse": "^1.0.6" } }, + "resolve-alpn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", + "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "dev": true + }, "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", @@ -4583,41 +6755,93 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "resq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.8.0.tgz", + "integrity": "sha512-VObcnfPcE6/EKfHqsi5qoJ0+BF9qfl5181CytP1su3HgzilqF03DrQ+Y7kZQrd+5myfmantl9W3/5uUcpwvKeg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "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 + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "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 }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rfdc": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, + "rgb2hex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.0.tgz", + "integrity": "sha512-cHdNTwmTMPu/TpP1bJfdApd6MbD+Kzi4GNnM6h35mdFChhQPSi9cAI8J7DMn5kQDKX8NuBaQXAyo360Oa7tOEA==", + "dev": true + }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "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" - } - } + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "dev": true + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -4683,11 +6907,50 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 + }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true + }, + "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" + } + }, + "tar-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", + "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "dev": true, + "requires": { + "bl": "^4.0.1", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } } } }, @@ -4703,6 +6966,15 @@ "xml2js": "^0.4.17" }, "dependencies": { + "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" + } + }, "tmp": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", @@ -4720,6 +6992,24 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "requires": { + "type-fest": "^0.13.1" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -4782,6 +7072,12 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -4798,15 +7094,6 @@ "use": "^3.1.0" }, "dependencies": { - "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" - } - }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -4824,12 +7111,6 @@ "requires": { "is-extendable": "^0.1.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -4926,6 +7207,12 @@ "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 } } }, @@ -4957,6 +7244,12 @@ "to-array": "0.1.4" }, "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -4978,17 +7271,29 @@ "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "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 + }, "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.1.tgz", + "integrity": "sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ==", "dev": true, "requires": { - "component-emitter": "1.2.1", + "component-emitter": "~1.3.0", "debug": "~3.1.0", "isarray": "2.0.1" }, "dependencies": { + "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 + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -5039,6 +7344,12 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "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 } } }, @@ -5094,9 +7405,9 @@ } }, "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==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", "dev": true }, "split-string": { @@ -5131,6 +7442,23 @@ "tweetnacl": "~0.14.0" } }, + "stack-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.2.tgz", + "integrity": "sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -5158,6 +7486,12 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true + }, "streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -5176,13 +7510,19 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } + }, + "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 } } }, @@ -5244,28 +7584,6 @@ "es-abstract": "^1.17.5" } }, - "string.prototype.trimleft": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", - "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimstart": "^1.0.0" - } - }, - "string.prototype.trimright": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", - "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "string.prototype.trimend": "^1.0.0" - } - }, "string.prototype.trimstart": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", @@ -5312,41 +7630,25 @@ "get-stdin": "^4.0.1" } }, - "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" - } + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true }, - "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", + "suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } + "has-flag": "^4.0.0" } }, "tar-fs": { @@ -5362,12 +7664,12 @@ } }, "tar-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.3.tgz", - "integrity": "sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", "dev": true, "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -5387,6 +7689,39 @@ } } }, + "tcp-port-used": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tcp-port-used/-/tcp-port-used-1.0.1.tgz", + "integrity": "sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==", + "dev": true, + "requires": { + "debug": "4.1.0", + "is2": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "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 + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -5399,30 +7734,13 @@ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "timed-out": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", - "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", - "dev": true - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" } }, "to-array": { @@ -5501,6 +7819,12 @@ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", "dev": true }, + "tslib": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.0.tgz", + "integrity": "sha512-+Zw5lu0D9tvBMjGP8LpvMb0u2WW2QV3y+D8mO6J+cNzCYIN4sVy43Bf9vl92nqFahutN0I8zHa7cc4vihIshnw==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5516,6 +7840,12 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5533,9 +7863,9 @@ "dev": true }, "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==", + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", "dev": true }, "uglify-es": { @@ -5646,16 +7976,10 @@ } } }, - "unzip-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", - "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", - "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==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -5679,15 +8003,6 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -5748,6 +8063,130 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "optional": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "wdio-chromedriver-service": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/wdio-chromedriver-service/-/wdio-chromedriver-service-6.0.4.tgz", + "integrity": "sha512-ed0ctxRJ4KbhAX/BkGUFS/sy6zDrZ3oB1Tqvokrs3r7GPX115w/AcOySofXdAk7Pdjm2JLDW/marHG/LmVoBuw==", + "dev": true, + "requires": { + "fs-extra": "^9.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, + "webdriver": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-6.6.0.tgz", + "integrity": "sha512-X0gzx5ynd0/VI1yaQaXiRCdV5mz+cDDX7U38Dhjw3UMkEtYpli43xS3jrdMLkgMdBLGKGBCqU6XDkur/LNW/EQ==", + "dev": true, + "requires": { + "@types/lodash.merge": "^4.6.6", + "@wdio/config": "6.6.0", + "@wdio/logger": "6.6.0", + "@wdio/protocols": "6.6.0", + "@wdio/utils": "6.6.0", + "got": "^11.0.2", + "lodash.merge": "^4.6.1" + } + }, + "webdriverio": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-6.6.0.tgz", + "integrity": "sha512-+/W0Csy3rM8f9YqYVhoJv1VEOF9PXkKE9qujFiFn4YNmFF5O+TsVslMVLvsqNxjJ0R0+ZduMAxzbGJjI9kc0MA==", + "dev": true, + "requires": { + "@types/puppeteer": "^3.0.1", + "@wdio/config": "6.6.0", + "@wdio/logger": "6.6.0", + "@wdio/repl": "6.6.0", + "@wdio/utils": "6.6.0", + "archiver": "^5.0.0", + "atob": "^2.1.2", + "css-value": "^0.0.1", + "devtools": "6.6.0", + "fs-extra": "^9.0.1", + "get-port": "^5.1.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "minimatch": "^3.0.4", + "puppeteer-core": "^5.1.0", + "resq": "^1.6.0", + "rgb2hex": "^0.2.0", + "serialize-error": "^7.0.0", + "webdriver": "6.6.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + } + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5763,6 +8202,54 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "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 + }, + "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 + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "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" + } + } + } + }, + "workerpool": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", + "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -5780,31 +8267,6 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -5819,13 +8281,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.0.tgz", - "integrity": "sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", "dev": true }, "xml2js": { @@ -5863,9 +8324,9 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { @@ -5923,6 +8384,222 @@ } } }, + "yargs-unparser": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", + "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "decamelize": "^1.2.0", + "flat": "^4.1.0", + "is-plain-obj": "^1.1.0", + "yargs": "^14.2.3" + }, + "dependencies": { + "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" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.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": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA=", + "dev": true, + "requires": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -5938,6 +8615,30 @@ "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", "dev": true + }, + "zip-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", + "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "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" + } + } + } } } } diff --git a/test/integration/specs/narrative_basic_test.js b/test/integration/specs/narrative_basic_test.js index b7d1c54b9c..189391fed2 100644 --- a/test/integration/specs/narrative_basic_test.js +++ b/test/integration/specs/narrative_basic_test.js @@ -1,35 +1,35 @@ -/*global describe, it, browser, expect, $, afterEach*/ +/*global describe, it, browser, expect, $, afterEach, beforeEach*/ describe('Narrative tree page with login', () => { 'use strict'; const userToken = browser.config.kbaseToken; - afterEach(() => { - browser.deleteCookies(); - }); + // // async version + // it('should open the narrative tree page', async () => { + // await browser.url('/narrative/tree'); + // await expect(browser).toHaveTitle('KBase Narrative'); + // }); - // async version - it('should open the narrative tree page', async () => { - await browser.url('http://localhost:8888/narrative/tree'); - await expect(browser).toHaveTitle('KBase Narrative'); - }); + // // sync version + // it('sets the user token', () => { + // browser.url('/narrative/tree'); + // $('.form-control').setValue(userToken); - // sync version - it('sets the user token', () => { - browser.url('http://localhost:8888/narrative/tree'); - $('.form-control').setValue(userToken); + // // find an anchor element with text = OK and click on it + // $('=OK').click(); + // expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); + // }); - // find an anchor element with text = OK and click on it - $('=OK').click(); + it('opens a narrative', async () => { + await browser.url('/narrative/tree'); + await browser.setCookies({name: 'kbase_session', value: userToken, path: '/'}); expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); - }); - - it('opens a narrative', () => { - browser.url('http://localhost:8888/narrative/tree'); - $('.form-control').setValue(userToken); - $('=OK').click(); - browser.pause(1000); + await browser.url('/narrative/31932'); + // $('.form-control').setValue(userToken); + // $('=OK').click(); + expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); + browser.pause(100000); $('span*=ProkkaTest').click(); - browser.switchWindow('http://localhost:8888/narrative/notebooks/ws.31932.obj.1'); + browser.switchWindow('/narrative/notebooks/ws.31932.obj.1'); expect($('nav[id="header"]').isDisplayed()).toBeTruthy(); }); }); diff --git a/test/integration/wdio.conf.js b/test/integration/wdio.conf.js index e1f61bc01f..e315e441f4 100644 --- a/test/integration/wdio.conf.js +++ b/test/integration/wdio.conf.js @@ -1,5 +1,19 @@ -exports.config = { - kbaseToken: 'your-token-here', +/* eslint-env node */ +/* eslint no-console: 0 */ +/* eslint {strict: ['error', 'global']} */ +'use strict'; + +let baseUrl = 'http://localhost:8888'; +if (process.env.BASE_URL) { + baseUrl = process.env.BASE_URL; +} +let authToken = 'fakeToken'; +if (process.env.TOKEN) { + authToken = process.env.TOKEN; +} + +const wdioConfig = { + kbaseToken: authToken, // // ==================== // Runner Configuration @@ -47,11 +61,13 @@ exports.config = { // https://docs.saucelabs.com/reference/platforms-configurator // capabilities: [{ - // maxInstances can get overwritten per capability. So if you have an in-house Selenium // grid with only 5 firefox instances available you can make sure that not more than // 5 instances get started at a time. - maxInstances: 5, + maxInstances: 1, + 'goog:chromeOptions': { + args: ['--disable-gpu'] + }, // browserName: 'chrome', acceptInsecureCerts: true @@ -91,7 +107,7 @@ exports.config = { // with `/`, the base url gets prepended, not including the path portion of your baseUrl. // If your `url` parameter starts without a scheme or `/` (like `some/path`), the base url // gets prepended directly. - baseUrl: 'http://localhost', + baseUrl: baseUrl, // // Default timeout for all waitFor* commands. waitforTimeout: 10000, @@ -269,4 +285,6 @@ exports.config = { */ //onReload: function(oldSessionId, newSessionId) { //} -} +}; + +exports.config = wdioConfig; diff --git a/test/unit/run_tests.py b/test/unit/run_tests.py index 1eda401a28..b2c84f75f2 100644 --- a/test/unit/run_tests.py +++ b/test/unit/run_tests.py @@ -26,6 +26,12 @@ argparser.add_argument( "-d", "--debug", action="store_true", help="Whether to enter debug mode in Karma" ) +argparser.add_argument( + "-u", "--unit", action="store_true", help="Whether to run unit tests" +) +argparser.add_argument( + "-i", "--integration", action="store_true", help="Whether to run integration tests" +) options = argparser.parse_args(sys.argv[1:]) nb_command = [ @@ -72,18 +78,32 @@ def readlines(): thread = threading.Thread(target=readlines) thread.setDaemon(True) thread.start() -# time.sleep(15) -test_command = ["grunt", "test"] +print("Jupyter server started!") + -resp = 1 +resp_unit = 0 +resp_integration = 0 try: - print("Jupyter server started, starting test script.") - resp = subprocess.check_call(test_command, stderr=subprocess.STDOUT) -except subprocess.CalledProcessError: - pass + if options.unit: + test_command = ["grunt", "test"] + print("starting unit tests") + try: + resp_unit = subprocess.check_call(test_command, stderr=subprocess.STDOUT) + except subprocess.CalledProcessError: + pass + if options.integration: + base_url = f"http://localhost:{JUPYTER_PORT}" + env = os.environ.copy() + env["BASE_URL"] = base_url + test_command = ["npx", "wdio", "test/integration/wdio.conf.js"] + try: + resp_integration = subprocess.check_call( + test_command, stderr=subprocess.STDOUT, env=env + ) + except subprocess.CalledProcessError: + pass finally: print("Done running tests, killing server.") os.killpg(os.getpgid(nb_server.pid), signal.SIGTERM) - # nb_server.terminate() -sys.exit(resp) + sys.exit(resp_unit | resp_integration) From 306e1d666f626953985ffda4fd031cd2038e5b0d Mon Sep 17 00:00:00 2001 From: eamahanna Date: Tue, 13 Oct 2020 18:23:04 -0800 Subject: [PATCH 066/108] fix test path --- test/unit/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index ccd97f52fe..949f09ccca 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,7 +32,7 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - {pattern: 'test/unit/spec/nbextensions/appCell2/widgets/*.js', included: false}, + {pattern: 'test/unit/spec/**/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, From 77d4d102bc87b76f11e96220d65c77b871b2f02a Mon Sep 17 00:00:00 2001 From: eamahanna Date: Tue, 13 Oct 2020 18:48:56 -0800 Subject: [PATCH 067/108] have travis build on truss branch --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index f53af98a04..3c11e75eae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,7 @@ branches: - develop - master - py3-update + - truss before_install: - gem install coveralls-lcov From 1ded4e55f0a7ef6ff7710efea95c12ada488a832 Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 13 Oct 2020 23:24:31 -0500 Subject: [PATCH 068/108] Added margin, letter spacing, and button states --- .../static/kbase/css/kbaseNarrative.css | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index ba0e5b7845..e511dbb6de 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -5,6 +5,10 @@ font-weight: bold; } +#kb-data-staging-table_wrapper{ + margin-top: 15px; +} + .kb-data-staging-table-name { white-space: nowrap; overflow: hidden; @@ -59,7 +63,28 @@ margin: 5px; position: relative; top: -3px; + letter-spacing: .5pt; +} + +.kb-data-staging-button:hover{ + background: rgba(67, 121, 177, 0.1); + border-radius: 4px; +} +.kb-data-staging-button:focus{ + background: rgba(67, 121, 177, 0.15); + border-radius: 4px; } +.kb-data-staging-button:active{ + background: rgba(67, 121, 177, 0.2); + border-radius: 4px; +} +.kb-data-staging-button:disabled{ + background: rgba(0, 0, 0, 0.02); + border-radius: 4px; + color: #929292; +} + + .kb-data-stagingarea { font-family: Oxygen, Arial, sans-serif; From 9d03053b0485c189a9013de10ad7f7812e3c37df Mon Sep 17 00:00:00 2001 From: bio-boris Date: Tue, 13 Oct 2020 23:32:09 -0500 Subject: [PATCH 069/108] remove whitespace --- .../static/kbase/templates/data_staging/file_path.html | 1 - 1 file changed, 1 deletion(-) diff --git a/kbase-extension/static/kbase/templates/data_staging/file_path.html b/kbase-extension/static/kbase/templates/data_staging/file_path.html index dc1cc485ae..0cb3344561 100644 --- a/kbase-extension/static/kbase/templates/data_staging/file_path.html +++ b/kbase-extension/static/kbase/templates/data_staging/file_path.html @@ -1,5 +1,4 @@ Staging Area - + {{else}} + + {{/if}} +
@@ -18,4 +19,4 @@
- + \ No newline at end of file diff --git a/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js b/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js index 0bc75af341..0450fc2a80 100644 --- a/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js +++ b/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js @@ -62,45 +62,6 @@ define([ jasmine.Ajax.uninstall(); }); - it('Should render properly when linked to globus', () => { - const $node = $('
'), - fuw = new FileUploadWidget($node, { - path: '/', - userInfo: { - user: fakeUser, - globusLinked: true - } - }), - renderedMsg = $node.find('.dz-message').html(); - expect(renderedMsg).toContain('

Three ways to add data to the staging area:

'); - expect(renderedMsg).toContain('
  • Click in this box.
  • '); - expect(renderedMsg).toContain('
  • Drag and drop data files.
  • '); - expect(renderedMsg).toContain('For large files (over 20GB) or a large number of files use'); - expect(renderedMsg).toContain(Config.get('upload').globus_upload_url); - expect(renderedMsg).toContain(fakeUser); - expect(renderedMsg).not.toContain('For large files (over 20GB), use Globus. Click'); - expect(renderedMsg).not.toContain('https://docs.kbase.us/data/globus'); - }); - - it('Should render properly when not linked to globus', () => { - const $node = $('
    '), - fuw = new FileUploadWidget($node, { - path: '/', - userInfo: { - user: fakeUser, - globusLinked: false - } - }), - renderedMsg = $node.find('.dz-message').html(); - expect(renderedMsg).toContain('

    Three ways to add data to the staging area:

    '); - expect(renderedMsg).toContain('
  • Click in this box.
  • '); - expect(renderedMsg).toContain('
  • Drag and drop data files.
  • '); - expect(renderedMsg).toContain('For large files (over 20GB), use Globus. Click'); - expect(renderedMsg).toContain('https://docs.kbase.us/data/globus'); - expect(renderedMsg).not.toContain('For large files (over 20GB) or a large number of files use'); - expect(renderedMsg).not.toContain(Config.get('upload').globus_upload_url); - }); - it('Should be able to set and retrieve the path', () => { const $node = $('
    '), fuw = new FileUploadWidget($node, { @@ -157,23 +118,5 @@ define([ fuWidget.dropzone.addFile(mockFile); }); - it('Should open a Globus window on click', () => { - // first pass = no globus link. - const unlinkedLink = 'https://docs.kbase.us/data/globus'; - spyOn(window, 'open').and.callThrough(); - fuWidget.$elem.find('a.globus_link').click(); - expect(window.open).toHaveBeenCalledWith(unlinkedLink, '_blank'); - const $node = $('
    '), - fuw = new FileUploadWidget($node, { - path: '/', - userInfo: { - user: fakeUser, - globusLinked: true - } - }); - fuw.$elem.find('a.globus_link').click(); - expect(window.open).toHaveBeenCalledWith('', 'dz-globus'); - }); - }); }); diff --git a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js index 7a16f4ae72..125181d09a 100644 --- a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js +++ b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js @@ -88,7 +88,7 @@ define ([ expect(stagingViewer).not.toBeNull(); }); - it('Should render properly with a Globus linked account', async () => { + it('Should render properly with a Globus linked account', async (done) => { let $node = $('
    '), linkedStagingViewer = new StagingAreaViewer($node, { path: startingPath, @@ -98,16 +98,33 @@ define ([ globusLinked: true } }); - await linkedStagingViewer.render(); - expect($node.html()).toContain('Or upload to this staging area by using'); - expect($node.html()).toContain('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); + await linkedStagingViewer.render() + .then(() => { + var $globusButton = $node.find('.globus_linked'); + expect($globusButton).toBeDefined(); + expect($globusButton.html()).toContain('Upload with Globus'); + expect($globusButton.html()).toContain('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); + done(); + }); + }); + + it('Should render properly without a Globus linked account', async () => { + await stagingViewer.render(); + var $globusButton = $targetNode.find('.globus_not_linked'); + expect($globusButton).toBeDefined(); + expect($globusButton.html()).toContain('Upload with Globus'); + expect($globusButton.html()).toContain('https://docs.kbase.us/data/globus'); }); - it('Should render properly without a Globus linked account', () => { - expect($targetNode.html()).not.toContain('Or upload to this staging area by using'); + it('Should render a url button', async () => { + await stagingViewer.render(); + var $urlButton = $targetNode.find('.web_upload_div'); + expect($urlButton).toBeDefined(); + expect($urlButton.html()).toContain('Upload with URL'); }); - it('Should start a help tour', () => { + + it('Should start a help tour', function() { stagingViewer.render(); stagingViewer.startTour(); expect(stagingViewer.tour).not.toBeNull(); From 35ea95139ca3929d2bfe824dec5c1b98e9fade2b Mon Sep 17 00:00:00 2001 From: bio-boris Date: Thu, 15 Oct 2020 00:21:42 -0500 Subject: [PATCH 072/108] Add data-test attribute to test order of cell buttons --- .../narrative_core/kbaseCellToolbarMenu.js | 6 ++- .../kbaseCellToolbarMenu-spec.js | 51 +++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js index 3272fe006c..0864f76d7d 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js @@ -279,7 +279,8 @@ define([ id: dropdownId, dataToggle: 'dropdown', ariaHaspopup: 'true', - ariaExpanded: 'true' + ariaExpanded: 'true', + 'data-test' : 'cell-dropdown' }, [span({ class: 'fa fa-ellipsis-h fa-lg' })]), ul({ class: 'dropdown-menu dropdown-menu-right', @@ -378,6 +379,7 @@ define([ dataPlacement: 'left', title: true, dataOriginalTitle: 'Move Cell Up', + 'data-test' : 'cell-move-up', id: events.addEvent({ type: 'click', handler: doMoveCellUp }) }, [ span({ class: 'fa fa-arrow-up fa-lg' }) @@ -389,6 +391,7 @@ define([ dataPlacement: 'left', title: true, dataOriginalTitle: 'Move Cell Down', + 'data-test' : 'cell-move-down', id: events.addEvent({ type: 'click', handler: doMoveCellDown }) }, [ span({ class: 'fa fa-arrow-down fa-lg' }) @@ -404,6 +407,7 @@ define([ dataToggle: 'tooltip', dataPlacement: 'left', title: true, + 'data-test' : 'cell-toggle-expansion', dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) }, [ diff --git a/test/unit/spec/narrative_core/kbaseCellToolbarMenu-spec.js b/test/unit/spec/narrative_core/kbaseCellToolbarMenu-spec.js index db5e9568c8..05ed11f49b 100644 --- a/test/unit/spec/narrative_core/kbaseCellToolbarMenu-spec.js +++ b/test/unit/spec/narrative_core/kbaseCellToolbarMenu-spec.js @@ -1,14 +1,16 @@ /*global describe, it, expect, beforeAll */ /*jslint white: true*/ define([ + 'jquery', 'kbaseCellToolbarMenu', 'base/js/namespace' -], function( +], function ( + $, Widget, Jupyter ) { 'use strict'; - describe('Test the kbaseCellToolbarMenu widget', function() { + describe('Test the kbaseCellToolbarMenu widget', function () { beforeAll(() => { Jupyter.narrative = { readonly: false @@ -40,6 +42,7 @@ define([ } }; }; + const mockToolbar = (mode, stage, collapsedState) => { const instance = Widget.make(); const parentCell = mockParentCell(mode, stage, collapsedState); @@ -50,49 +53,77 @@ define([ )[0].innerText; }; - it('Should say Error when minimized and mode is error', function() { + + const mockToolbarDataTestNodes = (mode, stage, collapsedState) => { + const instance = Widget.make(); + const parentCell = mockParentCell(mode, stage, collapsedState); + const toolbarDiv = document.createElement('div'); + instance.register_callback([toolbarDiv], parentCell); + return toolbarDiv.querySelectorAll( + '[data-test]' + ); + }; + + // This test might better be served through Snapshot Testing + // This test might want to check to see if each buttton has the correct fa-* class + it('Should render the correct app cell buttons in the correct order', function () { + var testToolBar = mockToolbarDataTestNodes('success', '', 'maximized'); + var expectedButtonOrder = ['cell-dropdown', 'cell-move-up', 'cell-move-down', 'cell-toggle-expansion']; + var extractedButtons = []; + testToolBar.forEach(function (element) { + var attribute = element.getAttribute('data-test'); + if (expectedButtonOrder.includes(attribute)) { + extractedButtons.push(attribute); + } + }); + expect(extractedButtons.length).toEqual(expectedButtonOrder.length); + expect(extractedButtons).toEqual(expectedButtonOrder); + }); + + + it('Should say Error when minimized and mode is error', function () { expect( mockToolbar('error', '', 'minimized') ).toBe('Error'); }); - it('Should say Error when minimized and mode is internal-error', function() { + it('Should say Error when minimized and mode is internal-error', function () { expect( mockToolbar('internal-error', '', 'minimized') ).toBe('Error'); }); - it('Should say Canceled when minimized and canceling', function() { + it('Should say Canceled when minimized and canceling', function () { expect( mockToolbar('canceling', '', 'minimized') ).toBe('Canceled'); }); - it('Should say Canceled when minimized and canceled', function() { + it('Should say Canceled when minimized and canceled', function () { expect( mockToolbar('canceled', '', 'minimized') ).toBe('Canceled'); }); - it('Should say Running when minimized and running', function() { + it('Should say Running when minimized and running', function () { expect( mockToolbar('processing', 'running', 'minimized') ).toBe('Running'); }); - it('Should say Running when minimized and queued', function() { + it('Should say Running when minimized and queued', function () { expect( mockToolbar('processing', 'queued', 'minimized') ).toBe('Queued'); }); - it('Should say Success when minimized and mode is success', function() { + it('Should say Success when minimized and mode is success', function () { expect( mockToolbar('success', '', 'minimized') ).toBe('Success'); }); - it('Should suppress the status message if maximized', function() { + it('Should suppress the status message if maximized', function () { expect( mockToolbar('processing', 'running', 'maximized') ).toBe(''); From cc0c0ddee8f2137df8f86228926077a19926cde6 Mon Sep 17 00:00:00 2001 From: bio-boris Date: Thu, 15 Oct 2020 00:37:21 -0500 Subject: [PATCH 073/108] Added voiceover labels --- .../narrative_core/kbaseCellToolbarMenu.js | 144 ++++++++++-------- 1 file changed, 78 insertions(+), 66 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js index 0864f76d7d..97d559805c 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseCellToolbarMenu.js @@ -10,7 +10,7 @@ define([ 'kbase/js/widgets/appInfoPanel', 'narrativeConfig', 'custom/custom' -], function( +], function ( $, html, Events, @@ -88,14 +88,14 @@ define([ if (url) { return a({ - href: url, - target: '_blank', - id: events.addEvent({ - type: 'click', - handler: doShowInfoModal - }) - }, - label || 'ref'); + href: url, + target: '_blank', + id: events.addEvent({ + type: 'click', + handler: doShowInfoModal + }) + }, + label || 'ref'); } return ''; } @@ -134,7 +134,7 @@ define([ body: $('
    '), buttons: [ $('View on App Store'), - $('').click(function() { + $('').click(function () { dialog.hide(); }) ], @@ -149,9 +149,9 @@ define([ appModule: module, tag: tag }); - infoPanel.start({ node: dialog.getBody() }); + infoPanel.start({node: dialog.getBody()}); - dialog.getElement().on('hidden.bs.modal', function() { + dialog.getElement().on('hidden.bs.modal', function () { dialog.destroy(); }); dialog.show(); @@ -174,16 +174,16 @@ define([ dataPlacement: 'left', title: true, dataOriginalTitle: 'Cell Settings', - id: events.addEvent({ type: 'click', handler: doToggleCellSettings }) + id: events.addEvent({type: 'click', handler: doToggleCellSettings}) }, [ - span({ class: 'fa fa-cog', style: 'font-size: 14pt' }) + span({class: 'fa fa-cog', style: 'font-size: 14pt'}) ]); } function renderIcon(icon) { return span({ class: 'fa fa-' + icon.type + ' fa-sm', - style: { color: icon.color || '#000' } + style: {color: icon.color || '#000'} }); } @@ -202,8 +202,7 @@ define([ var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), dropdownId = html.genId(), - menuItems = [ - ]; + menuItems = []; if (cell.cell_type === 'code') { menuItems.push({ @@ -213,7 +212,7 @@ define([ type: 'terminal', color: 'black' }, - id: events.addEvent({ type: 'click', handler: doToggleCodeView }) + id: events.addEvent({type: 'click', handler: doToggleCodeView}) }); } @@ -227,7 +226,7 @@ define([ }, id: events.addEvent({ type: 'click', - handler: function() { + handler: function () { cell.showInfo(); } }) @@ -264,7 +263,7 @@ define([ type: 'times', color: 'red' }, - id: events.addEvent({ type: 'click', handler: doDeleteCell }) + id: events.addEvent({type: 'click', handler: doDeleteCell}) }); } @@ -272,7 +271,7 @@ define([ return ''; } - return span({ class: 'dropdown' }, [ + return span({class: 'dropdown'}, [ button({ class: 'btn btn-xs btn-default dropdown-toggle', type: 'button', @@ -280,13 +279,14 @@ define([ dataToggle: 'dropdown', ariaHaspopup: 'true', ariaExpanded: 'true', - 'data-test' : 'cell-dropdown' - }, [span({ class: 'fa fa-ellipsis-h fa-lg' })]), + 'aria-label': 'cell options', + 'data-test': 'cell-dropdown' + }, [span({class: 'fa fa-ellipsis-h fa-lg'})]), ul({ class: 'dropdown-menu dropdown-menu-right', ariaLabelledby: dropdownId }, [ - menuItems.map(function(item) { + menuItems.map(function (item) { switch (item.type) { case 'separator': return li({ @@ -331,19 +331,19 @@ define([ } function minimizedStatus(mode, stage) { - if(mode === 'error' || mode === 'internal-error') { + if (mode === 'error' || mode === 'internal-error') { return 'Error'; } - if(mode === 'canceled' || mode === 'canceling') { + if (mode === 'canceled' || mode === 'canceling') { return 'Canceled'; } - if(mode ==='processing' && stage === 'running') { + if (mode === 'processing' && stage === 'running') { return 'Running'; } - if(mode ==='processing' && stage === 'queued') { + if (mode === 'processing' && stage === 'queued') { return 'Queued'; } - if(mode === 'success') { + if (mode === 'success') { return 'Success'; } return ''; @@ -366,12 +366,15 @@ define([ const appStatePretty = minimizedStatus(fsmMode, fsmStage); const collapsedCellStatus = cellCollapsed ? appStatePretty : ''; - var events = Events.make({ node: container }), + var events = Events.make({node: container}), buttons = [ - div({ class: 'buttons pull-right' }, [ + div({class: 'buttons pull-right'}, [ renderOptions(cell, events), - span({ class: 'fa fa-circle-o-notch fa-spin', style: { color: 'rgb(42, 121, 191)', display: 'none' } }), - span({ class: 'fa fa-exclamation-triangle', style: { color: 'rgb(255, 0, 0)', display: 'none' } }), + span({ + class: 'fa fa-circle-o-notch fa-spin', + style: {color: 'rgb(42, 121, 191)', display: 'none'} + }), + span({class: 'fa fa-exclamation-triangle', style: {color: 'rgb(255, 0, 0)', display: 'none'}}), (readOnly ? null : button({ type: 'button', class: 'btn btn-default btn-xs', @@ -379,10 +382,11 @@ define([ dataPlacement: 'left', title: true, dataOriginalTitle: 'Move Cell Up', - 'data-test' : 'cell-move-up', - id: events.addEvent({ type: 'click', handler: doMoveCellUp }) + 'data-test': 'cell-move-up', + 'aria-label': 'Move cell up', + id: events.addEvent({type: 'click', handler: doMoveCellUp}) }, [ - span({ class: 'fa fa-arrow-up fa-lg' }) + span({class: 'fa fa-arrow-up fa-lg'}) ])), (readOnly ? null : button({ type: 'button', @@ -391,13 +395,14 @@ define([ dataPlacement: 'left', title: true, dataOriginalTitle: 'Move Cell Down', - 'data-test' : 'cell-move-down', - id: events.addEvent({ type: 'click', handler: doMoveCellDown }) + 'data-test': 'cell-move-down', + 'aria-label': 'Move cell down', + id: events.addEvent({type: 'click', handler: doMoveCellDown}) }, [ - span({ class: 'fa fa-arrow-down fa-lg' }) + span({class: 'fa fa-arrow-down fa-lg'}) ])), - (function() { + (function () { var toggleMinMax = utils.getCellMeta(cell, 'kbase.cellState.toggleMinMax', 'maximized'), toggleIcon = (toggleMinMax === 'maximized' ? 'minus' : 'plus'), color = (toggleMinMax === 'maximized' ? '#000' : 'rgba(255,137,0,1)'); @@ -407,9 +412,10 @@ define([ dataToggle: 'tooltip', dataPlacement: 'left', title: true, - 'data-test' : 'cell-toggle-expansion', + 'data-test': 'cell-toggle-expansion', + 'aria-label': 'Expand or Collapse Cell', dataOriginalTitle: toggleMinMax === 'maximized' ? 'Collapse Cell' : 'Expand Cell', - id: events.addEvent({ type: 'click', handler: doToggleMinMaxCell }) + id: events.addEvent({type: 'click', handler: doToggleMinMaxCell}) }, [ span({ class: 'fa fa-' + toggleIcon + '-square-o fa-lg', @@ -431,20 +437,24 @@ define([ utils.getCellMeta(cell, 'kbase.cellState.message') ]) ]), - content = div({ class: 'kb-cell-toolbar' }, [ - div({ class: '', style: { - display: 'flex', - flexDirection: 'row', - height: '56px', - justifyContent: 'space-between', - } }, [ + content = div({class: 'kb-cell-toolbar'}, [ + div({ + class: '', style: { + display: 'flex', + flexDirection: 'row', + height: '56px', + justifyContent: 'space-between', + } + }, [ div({ class: 'title-container', style: {flexGrow: '1'} }, [ - div({ class: 'title', style: { - display: 'flex', height: '56px' - } }, [ + div({ + class: 'title', style: { + display: 'flex', height: '56px' + } + }, [ div({ dataElement: 'icon', class: 'icon', @@ -457,7 +467,7 @@ define([ }, [ buildIcon(cell) ]), - div({ style: { flexGrow: '1' } }, [ + div({style: {flexGrow: '1'}}, [ div({ dataElement: 'title', class: 'title', @@ -482,17 +492,19 @@ define([ }, [getCellSubtitle(cell)]) ]), div( - { style: { - margin: '0px 0px 0px auto', - minWidth: '65px' - }}, + { + style: { + margin: '0px 0px 0px auto', + minWidth: '65px' + } + }, [collapsedCellStatus] ) ]) ]), div({ class: 'buttons-container', - style: { minWidth: '110px' } + style: {minWidth: '110px'} }, [ buttons, message @@ -519,13 +531,13 @@ define([ role: 'button', title: 'New version available', dataContent: 'This app has a newer version available! ' + - 'There\'s probably nothing wrong with this version, ' + - 'but the new one may include new features. Add a new "' + - utils.getCellMeta(cell, 'kbase.appCell.newAppName') + - '" app cell for the update.', - style: { color: '#f79b22' } + 'There\'s probably nothing wrong with this version, ' + + 'but the new one may include new features. Add a new "' + + utils.getCellMeta(cell, 'kbase.appCell.newAppName') + + '" app cell for the update.', + style: {color: '#f79b22'} }, [ - span({ class: 'fa fa-exclamation-triangle fa-lg' }) + span({class: 'fa fa-exclamation-triangle fa-lg'}) ]); } else { return ''; @@ -543,7 +555,7 @@ define([ rendered.events.attachEvents(); // try this... - container.addEventListener('dblclick', function(e) { + container.addEventListener('dblclick', function (e) { doToggleMinMaxCell(e); }); } catch (ex) { @@ -557,7 +569,7 @@ define([ } return { - make: function(config) { + make: function (config) { return factory(config); } }; From d78cc0117b10a437d9969c44515e6d4e12d47395 Mon Sep 17 00:00:00 2001 From: Emily Mahanna <56279459+eamahanna@users.noreply.github.com> Date: Thu, 15 Oct 2020 05:42:27 -0800 Subject: [PATCH 074/108] DATAUP-204 (#1866) fix: show zip icon in staging area * fix icon * fix tests --- .../js/widgets/narrative_core/upload/stagingAreaViewer.js | 2 +- .../spec/nbextensions/appCell2/widgets/appCellWidget-spec.js | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index cd49c9c020..50b66ddb65 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -288,7 +288,7 @@ define([ let decompressButton = ''; if (data.match(/\.(zip|tar\.gz|tgz|tar\.bz|tar\.bz2|tar|gz|bz2)$/)) { - decompressButton = ' '; + decompressButton = ''; } if (full[0] === 'true') { diff --git a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js index 19edd66c3e..ac96a938b3 100644 --- a/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js +++ b/test/unit/spec/nbextensions/appCell2/widgets/appCellWidget-spec.js @@ -129,9 +129,6 @@ define([ it('has a method "init" which returns a promise then null', async () => { var initPromise = mockAppCell.init(); expect(initPromise instanceof Promise).toBeTrue(); - - var result = await initPromise; - expect(result).toBeNull(); }); it('has a method stop which returns a Promise', () => { @@ -140,7 +137,7 @@ define([ }); it('has a method detach which returns a Promise', () => { - var detachPromise = mockAppCell.stop(); + var detachPromise = mockAppCell.detach(); expect(detachPromise instanceof Promise).toBeTrue(); }); From b53fe683e7324f803d39fcec62209927d564257e Mon Sep 17 00:00:00 2001 From: leia-sefkin Date: Thu, 15 Oct 2020 13:35:43 -0700 Subject: [PATCH 075/108] removing reference so jquery can find the right element --- .../kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index 50b66ddb65..85ee9dccae 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -167,7 +167,7 @@ define([ // Add ACL before going to the staging area // If it fails, it'll just do so silently. - var $globusLink = this.$elem.find('a.globus_linked'); + var $globusLink = this.$elem.find('.globus_linked'); $globusLink.click((e) => { var globusWindow = window.open('', 'globus'); globusWindow.document.write('

    Loading Globus...

    '); From 722eb05f434d8e1b070091832752eabc356fe89c Mon Sep 17 00:00:00 2001 From: leia-sefkin Date: Thu, 15 Oct 2020 13:44:53 -0700 Subject: [PATCH 076/108] should actually (hopefully) fix it, renaming class on
    target so that jquery can find it --- .../kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js | 2 +- .../static/kbase/templates/data_staging/ftp_file_header.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js index 85ee9dccae..dc41da14d8 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/upload/stagingAreaViewer.js @@ -167,7 +167,7 @@ define([ // Add ACL before going to the staging area // If it fails, it'll just do so silently. - var $globusLink = this.$elem.find('.globus_linked'); + var $globusLink = this.$elem.find('.globus_acl_link'); $globusLink.click((e) => { var globusWindow = window.open('', 'globus'); globusWindow.document.write('

    Loading Globus...

    '); diff --git a/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html b/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html index f167504e7d..d9f13d6880 100644 --- a/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html +++ b/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html @@ -4,7 +4,7 @@ Other ways to upload: {{#if userInfo.globusLinked}}
    {{else}}
    -
    +
    \ No newline at end of file diff --git a/kbase-extension/static/kbase/templates/data_staging/dropzone_area.html b/kbase-extension/static/kbase/templates/data_staging/dropzone_area.html index 7136539f72..057bca6298 100644 --- a/kbase-extension/static/kbase/templates/data_staging/dropzone_area.html +++ b/kbase-extension/static/kbase/templates/data_staging/dropzone_area.html @@ -11,4 +11,4 @@
    Drag and drop files and folders in this box, or select from your computer.
    - + \ No newline at end of file diff --git a/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js b/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js index 0450fc2a80..f29473edf4 100644 --- a/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js +++ b/test/unit/spec/narrative_core/upload/fileUploadWidget-spec.js @@ -118,5 +118,57 @@ define([ fuWidget.dropzone.addFile(mockFile); }); + it('Should error when too large of a file is uploaded', (done) => { + // Set the file max size to 0 + fuWidget.dropzone.options.maxFilesize = 1; + + // Create file + const filename='foo.txt'; + mockUploadEndpoint(filename, fakeUser, false); + var mockFile = createMockFile(filename); + Object.defineProperty(mockFile, 'size', {value: Math.pow(1024, 4), writable: false}); + + // Create mock calls + const adderMock = jasmine.createSpy('adderMock'); + const errorMock = jasmine.createSpy('errorMock'); + fuWidget.dropzone.on('addedfile', () => { + adderMock(); + }); + fuWidget.dropzone.on('error', () => { + errorMock(); + }); + fuWidget.dropzone.addFile(mockFile); + setTimeout(() => { + expect(adderMock).toHaveBeenCalled(); + expect(errorMock).toHaveBeenCalled(); + done(); + }); + }); + + it('Should create a clear all button when a file upload error occurs', (done) => { + // Set the file max size to 0 + fuWidget.dropzone.options.maxFilesize = 1; + + // Create file + const filename='foo.txt'; + mockUploadEndpoint(filename, fakeUser, false); + var mockFile = createMockFile(filename); + Object.defineProperty(mockFile, 'size', {value: Math.pow(1024, 4), writable: false}); + + // Create mock calls + const adderMock = jasmine.createSpy('adderMock'); + fuWidget.dropzone.on('addedfile', () => { + adderMock(); + }); + + fuWidget.dropzone.addFile(mockFile); + setTimeout(() => { + expect(adderMock).toHaveBeenCalled(); + var clearAllButton = document.getElementById('clear-all-btn'); + expect(clearAllButton).toBeDefined(); + done(); + }); + }); + }); }); From caae2e1f2590462f262fc21b3c9f841c5d7c1cb4 Mon Sep 17 00:00:00 2001 From: eamahanna Date: Wed, 21 Oct 2020 10:26:51 -0800 Subject: [PATCH 086/108] add hover pointer --- kbase-extension/static/kbase/css/kbaseNarrative.css | 1 + 1 file changed, 1 insertion(+) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 253339b2a7..939e3674dd 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -39,6 +39,7 @@ color: #36618E; border: 1px solid #ECF2F7; background-color: #ECF2F7; + cursor: pointer; } .text-button:focus { From cc1a37d94005295e84a459554029b4026d662af9 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Wed, 21 Oct 2020 15:23:44 -0700 Subject: [PATCH 087/108] add integration test framework stuff --- .../integration/specs/narrative_basic_test.js | 25 +++++++++------- test/integration/wdioUtils.js | 30 +++++++++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 test/integration/wdioUtils.js diff --git a/test/integration/specs/narrative_basic_test.js b/test/integration/specs/narrative_basic_test.js index 189391fed2..05005e0636 100644 --- a/test/integration/specs/narrative_basic_test.js +++ b/test/integration/specs/narrative_basic_test.js @@ -1,7 +1,9 @@ /*global describe, it, browser, expect, $, afterEach, beforeEach*/ +const Utils = require('../wdioUtils'); + describe('Narrative tree page with login', () => { 'use strict'; - const userToken = browser.config.kbaseToken; + // // async version // it('should open the narrative tree page', async () => { @@ -20,16 +22,19 @@ describe('Narrative tree page with login', () => { // }); it('opens a narrative', async () => { - await browser.url('/narrative/tree'); - await browser.setCookies({name: 'kbase_session', value: userToken, path: '/'}); - expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); - await browser.url('/narrative/31932'); + await Utils.login(); + // await browser.url('/narrative/tree'); + // await browser.setCookies({name: 'kbase_session', value: userToken, path: '/'}); + // expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); + await browser.url(Utils.makeURL('narrative/31932')); // $('.form-control').setValue(userToken); // $('=OK').click(); - expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); - browser.pause(100000); - $('span*=ProkkaTest').click(); - browser.switchWindow('/narrative/notebooks/ws.31932.obj.1'); - expect($('nav[id="header"]').isDisplayed()).toBeTruthy(); + // expect(browser.getCookies(['kbase_session'])[0].value).toBe(TOKEN); + // browser.pause(1000); + // $('span*=ProkkaTest').click(); + // browser.switchWindow('/narrative/notebooks/ws.31932.obj.1'); + const loadingBlocker = await $('#kb-loading-blocker'); + const loadingText = await loadingBlocker.getText(); + expect(loadingText).toContain('Connecting to KBase services...'); }); }); diff --git a/test/integration/wdioUtils.js b/test/integration/wdioUtils.js new file mode 100644 index 0000000000..f64091fb22 --- /dev/null +++ b/test/integration/wdioUtils.js @@ -0,0 +1,30 @@ +/* eslint strict: ["error", "global"] */ +/* global browser */ + +'use strict'; +const TOKEN = browser.config.kbaseToken; +const URL_BASE = browser.config.baseUrl; + +const makeURL = (path) => `${URL_BASE}/${path}`; + +async function setSessionCookie () { + return await browser.setCookies([{ + name: 'kbase_session', + path: '/', + secure: false, + value: TOKEN, + samesite: 'Lax' + }]); +} + +async function login() { + await browser.url(makeURL('narrative/static/kbase/ping.txt')); + await setSessionCookie(); + return; +} + +module.exports = { + setSessionCookie: setSessionCookie, + login: login, + makeURL: makeURL +}; From 86f459d5561ae60267d546c8030abebf2a77ce7c Mon Sep 17 00:00:00 2001 From: Emily Mahanna <56279459+eamahanna@users.noreply.github.com> Date: Wed, 21 Oct 2020 16:02:07 -0800 Subject: [PATCH 088/108] DATAUP-187 Review edits (#1880) * Updates from review * oops * fix hover and tests --- .../static/kbase/css/kbaseNarrative.css | 9 +++++++++ .../templates/data_staging/ftp_file_header.html | 14 +++++++------- .../upload/stagingAreaViewer-spec.js | 8 ++++---- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 939e3674dd..79bb8bd2af 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -3316,6 +3316,15 @@ button.kb-data-obj { border: none; } +.ftp-file-header { + margin-bottom: 5px; + margin-top: 8px; +} + +.globus-link:hover { + text-decoration: none; +} + .kb-import-content .upload-options button { background: #fff; border: 1px solid #c4c4c4; diff --git a/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html b/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html index d9f13d6880..ed44b87ddb 100644 --- a/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html +++ b/kbase-extension/static/kbase/templates/data_staging/ftp_file_header.html @@ -1,15 +1,15 @@ -
    +
    Other ways to upload: {{#if userInfo.globusLinked}} - + + + {{else}} - + + + {{/if}}
    diff --git a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js index 125181d09a..0c110d37bd 100644 --- a/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js +++ b/test/unit/spec/narrative_core/upload/stagingAreaViewer-spec.js @@ -100,20 +100,20 @@ define ([ }); await linkedStagingViewer.render() .then(() => { - var $globusButton = $node.find('.globus_linked'); + var $globusButton = $node.find('#globusLinked'); expect($globusButton).toBeDefined(); expect($globusButton.html()).toContain('Upload with Globus'); - expect($globusButton.html()).toContain('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); + expect($globusButton.attr('href')).toEqual('https://app.globus.org/file-manager?destination_id=c3c0a65f-5827-4834-b6c9-388b0b19953a&destination_path=' + fakeUser); done(); }); }); it('Should render properly without a Globus linked account', async () => { await stagingViewer.render(); - var $globusButton = $targetNode.find('.globus_not_linked'); + var $globusButton = $targetNode.find('#globusNotLinked'); expect($globusButton).toBeDefined(); expect($globusButton.html()).toContain('Upload with Globus'); - expect($globusButton.html()).toContain('https://docs.kbase.us/data/globus'); + expect($globusButton.attr('href')).toEqual('https://docs.kbase.us/data/globus'); }); it('Should render a url button', async () => { From 2ae265e27bd6bed0d4046d0c74ec5f185a09e73d Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Wed, 21 Oct 2020 17:03:58 -0700 Subject: [PATCH 089/108] switch config back to dev --- src/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.json b/src/config.json index f9268f2ab8..4edff1a286 100644 --- a/src/config.json +++ b/src/config.json @@ -103,7 +103,7 @@ "google_ad_conversion": "kR9OCLas4JgBEOy2pucC" }, "comm_wait_timeout": 600000, - "config": "narrative-refactor", + "config": "dev", "data_panel": { "initial_sort_limit": 10000, "max_name_length": 33, From 34c336f9305c20e1918bc2e2c117607fca38c9b5 Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Thu, 22 Oct 2020 10:51:55 -0700 Subject: [PATCH 090/108] Moving css files out of nbextensions/ and into the css directory, pending further reorganisation --- .../static/kbase/css/advancedViewCell.css | 0 .../static/kbase/css/editorCell.css | 0 nbextensions/advancedViewCell/main.js | 3 +- nbextensions/appCell2/main.js | 1 - nbextensions/appCell2/styles/main.css | 10 - nbextensions/editorCell/main.js | 3 +- nbextensions/editorCell/styles/old.css | 190 ------------------ nbextensions/viewCell/main.js | 1 - nbextensions/viewCell/styles/main.css | 10 - 9 files changed, 2 insertions(+), 216 deletions(-) rename nbextensions/advancedViewCell/styles/main.css => kbase-extension/static/kbase/css/advancedViewCell.css (100%) rename nbextensions/editorCell/styles/main.css => kbase-extension/static/kbase/css/editorCell.css (100%) delete mode 100644 nbextensions/appCell2/styles/main.css delete mode 100644 nbextensions/editorCell/styles/old.css delete mode 100644 nbextensions/viewCell/styles/main.css diff --git a/nbextensions/advancedViewCell/styles/main.css b/kbase-extension/static/kbase/css/advancedViewCell.css similarity index 100% rename from nbextensions/advancedViewCell/styles/main.css rename to kbase-extension/static/kbase/css/advancedViewCell.css diff --git a/nbextensions/editorCell/styles/main.css b/kbase-extension/static/kbase/css/editorCell.css similarity index 100% rename from nbextensions/editorCell/styles/main.css rename to kbase-extension/static/kbase/css/editorCell.css diff --git a/nbextensions/advancedViewCell/main.js b/nbextensions/advancedViewCell/main.js index 1c3bfe73c1..5e76f9d4e9 100644 --- a/nbextensions/advancedViewCell/main.js +++ b/nbextensions/advancedViewCell/main.js @@ -31,11 +31,10 @@ define([ 'common/appUtils', 'common/jupyter', 'common/spec', - // './widgets/codeCellRunWidget', 'kb_service/utils', 'kb_service/client/workspace', 'css!kbase/css/appCell.css', - 'css!./styles/main.css', + 'css!kbase/css/advancedViewCell.css', 'bootstrap', 'custom/custom' ], function( diff --git a/nbextensions/appCell2/main.js b/nbextensions/appCell2/main.js index a7b955d8ae..c3848ff3ea 100644 --- a/nbextensions/appCell2/main.js +++ b/nbextensions/appCell2/main.js @@ -26,7 +26,6 @@ define([ 'kb_service/client/workspace', './appCell', 'css!kbase/css/appCell.css', - 'css!./styles/main.css', 'bootstrap', 'custom/custom' ], function( diff --git a/nbextensions/appCell2/styles/main.css b/nbextensions/appCell2/styles/main.css deleted file mode 100644 index d770faa574..0000000000 --- a/nbextensions/appCell2/styles/main.css +++ /dev/null @@ -1,10 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* - Created on : Jul 14, 2016, 2:30:47 PM - Author : erik -*/ diff --git a/nbextensions/editorCell/main.js b/nbextensions/editorCell/main.js index 0c519c212f..f0df764445 100644 --- a/nbextensions/editorCell/main.js +++ b/nbextensions/editorCell/main.js @@ -32,9 +32,8 @@ define([ 'common/jupyter', 'kb_service/utils', 'kb_service/client/workspace', - 'css!kbase/css/appCell.css', - 'css!./styles/main.css', + 'css!kbase/css/editorCell.css', 'bootstrap', 'custom/custom' ], function( diff --git a/nbextensions/editorCell/styles/old.css b/nbextensions/editorCell/styles/old.css deleted file mode 100644 index b2ff54f068..0000000000 --- a/nbextensions/editorCell/styles/old.css +++ /dev/null @@ -1,190 +0,0 @@ -/* Wrapper class - All classes below may be wrapped in this class to avoid polluting - the Narrative styles. -*/ - -/** new app parameter styling **/ -.kb-app-cell .kb-app-parameter-panel { - border-left: 3px solid #fff; -} - -.kb-app-cell .kb-app-parameter-panel-hover { - border-left: 3px solid #428bca; -} - -.kb-app-cell .kb-app-parameter-row { - margin: 0; - padding: 5px; - border-radius: 5px; -} - -/* for some reason, the css :hover doesn't work right on this div, so we use jquery to toggle this class */ -.kb-app-cell .kb-app-parameter-row-hover { - background: #f9f9f9; -} - -.kb-app-cell .kb-app-parameter-row-error { - background: #f2dede; -} - -.kb-app-cell .kb-app-parameter-error-message { - padding: 5px; - text-align: center; - font-family: 'OxygenBold', sans-serif; - font-weight: bold; - font-size: 9pt; - color: #f44336; -} - -/* not sure how to get text in these divs to valign middle... */ -.kb-app-cell .kb-app-parameter-name { - font-family: 'OxygenBold', sans-serif; - color: #777; - text-align: right; - vertical-align: middle; - margin-top: 3px; - padding-right: 4px; - padding-left: 0; - white-space: normal; -} - -.kb-app-cell .kb-app-parameter-input { - vertical-align: middle; - white-space: nowrap; - xpadding-left: 10px; -} - -.kb-app-cell .kb-app-parameter-input input { - font-weight: bold; -} - -.kb-app-cell .kb-app-parameter-input select.form-control { - margin: 0; -} - -/* -This set of styles is a to accomodate the required/satisfied icon which appears -between the select input control and the help text to the right of it. The -problem is that within the columns used for layout the select is set to 100% width -and yet the icon is placed right next to it. The result is that the icon is shoved -to the right of the select control and into the next column, overlapping the -help text. The old app handling this was to scoot the help text far enough over -to accomodate the the icon intruding into its space. This technique makes space -in the column in which the icon lives, and does this by shrinking the select -control with padding, and then scooting the icon back into its column. -*/ -.kb-app-cell .kb-app-parameter-input > div { - /* allow space for the required (red arrow), satisfied (green checkbox) icon */ - padding-right: 20px; -} - -.kb-app-cell .kb-app-parameter-input .kb-app-parameter-accepted-glyph, -.kb-app-cell .kb-app-parameter-input .kb-app-parameter-required-glyph { - /* This scoots the icon inside */ - font-size: 15px; - margin-left: 0; -} - -.kb-app-cell .kb-app-parameter-required-glyph { - color: #f44336; -} - -.kb-app-cell .kb-app-parameter-hint { - padding-left: 7px; -} - -.kb-app-cell .kb-parameter-data-selection { - font-weight: bold; -} - -.kb-app-cell .kb-app-parameter-hint { - color: #777; - text-align: left; - margin-top: 3px; -} - -.kb-app-cell .kb-app-parameter-accepted-glyph { - color: #4bb856; -} - -.kb-app-cell .kb-app-parameter-info { - color: #777; -} - -.kb-app-cell .kb-parameter-data-row-remove { - color: #777; -} - -.kb-app-cell .kb-parameter-data-row-add { - color: #777; -} - -.kb-app-cell .kb-app-advanced-options-controller-inactive { - font-family: 'OxygenBold', sans-serif; - font-style: italic; - font-size: 10pt; - line-height: 14px; - color: #777; - text-align: center; -} - -.kb-app-cell .kb-app-advanced-options-controller { - font-family: 'OxygenBold', sans-serif; - cursor: pointer; - font-style: italic; - font-size: 10pt; - line-height: 14px; - color: #08c; - text-align: center; -} - -.kb-app-cell .kb-app-advanced-options-controller:hover { - color: #2a6496; -} - -.kb-app-cell .kb-app-footer { - width: 100%; - overflow: none; - background-color: #f5f5f5; - padding: 10px; -} - -.kb-app-cell .kb-app-subtitle { - background-color: #f5f5f5; - padding: 3px 5px; -} - -.kb-app-cell .panel-title > [data-toggle="collapse"]::before { - display: inline-block; - margin-left: 0; - margin-right: 4px; - font-family: "FontAwesome"; - font-style: normal; - font-weight: normal; - font-size: 90%; - width: 12px; - color: silver; - line-height: 1; - vertical-align: baseline; - content: "\f078 "; -} - -.kb-app-cell .panel-title > [data-toggle="collapse"].collapsed::before { - margin-left: 2px; - margin-right: 2px; - content: "\f054 "; -} - -/* tweaks to elemnts that should be dimmed when the cell is not selected */ - -.unselected .kb-app-cell { - opacity: 0.5; -} - -.kb-app-cell .advanced-parameter-showing { - display: block; -} - -.kb-app-cell .advanced-parameter-hidden { - display: none; -} diff --git a/nbextensions/viewCell/main.js b/nbextensions/viewCell/main.js index 508d17864c..4ea1f93c4b 100644 --- a/nbextensions/viewCell/main.js +++ b/nbextensions/viewCell/main.js @@ -36,7 +36,6 @@ define([ // for effect 'css!kbase/css/appCell.css', - 'css!./styles/main.css', 'bootstrap', 'custom/custom' ], function( diff --git a/nbextensions/viewCell/styles/main.css b/nbextensions/viewCell/styles/main.css deleted file mode 100644 index 69d199f329..0000000000 --- a/nbextensions/viewCell/styles/main.css +++ /dev/null @@ -1,10 +0,0 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* - Created on : Jul 14, 2016, 2:31:08 PM - Author : erik -*/ From b7b74a942a185b0e4005f5ba786ff6726c049ab9 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 22 Oct 2020 12:04:12 -0700 Subject: [PATCH 091/108] remove whitespace --- test/unit/run_tests.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/run_tests.py b/test/unit/run_tests.py index b2c84f75f2..5418a284f7 100644 --- a/test/unit/run_tests.py +++ b/test/unit/run_tests.py @@ -81,7 +81,6 @@ def readlines(): print("Jupyter server started!") - resp_unit = 0 resp_integration = 0 try: From 57b2cc2c17ca638fb42cb40f20b47af22cf943e0 Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Thu, 22 Oct 2020 12:21:38 -0700 Subject: [PATCH 092/108] Fixing css horror in editorCell.css --- .../static/kbase/css/editorCell.css | 65 +------------------ 1 file changed, 3 insertions(+), 62 deletions(-) diff --git a/kbase-extension/static/kbase/css/editorCell.css b/kbase-extension/static/kbase/css/editorCell.css index 002061220b..8acfb685c4 100644 --- a/kbase-extension/static/kbase/css/editorCell.css +++ b/kbase-extension/static/kbase/css/editorCell.css @@ -27,25 +27,12 @@ .kb-editor-cell .kb-app-parameter-row .message.-error { background: #f2dede; -} - -.kb-editor-cell .kb-app-parameter-row .message.-warning { - xbackground: yellow; + color: #f44336; } .kb-editor-cell .kb-app-parameter-row .message { text-align: center; font-family: 'Oxygen', sans-serif; - - /* font-size: 9pt; */ -} - -.kb-editor-cell .kb-app-parameter-row .message.-error { - color: #f44336; -} - -.kb-editor-cell .kb-app-parameter-row .message.-warning { - xcolor: orange; } /* not sure how to get text in these divs to valign middle... */ @@ -54,22 +41,13 @@ color: #777; text-align: left; vertical-align: bottom; - xmargin-top: 3px; padding-right: 4px; padding-left: 0; white-space: normal; - xborder-bottom: 1px #ddd dotted; } .kb-editor-cell .kb-app-parameter-input { vertical-align: middle; - xwhite-space: nowrap; - xpadding-left: 10px; - xborder-bottom: 1px #ccc dotted; -} - -.kb-editor-cell .kb-app-parameter-input input { - xfont-weight: bold; } .kb-editor-cell .kb-app-parameter-input select.form-control { @@ -77,7 +55,7 @@ } /* -This set of styles is a to accomodate the required/satisfied icon which appears +This set of styles is to accommodate the required/satisfied icon which appears between the select input control and the help text to the right of it. The problem is that within the columns used for layout the select is set to 100% width and yet the icon is placed right next to it. The result is that the icon is shoved @@ -88,11 +66,6 @@ in the column in which the icon lives, and does this by shrinking the select control with padding, and then scooting the icon back into its column. */ -/* .kb-editor-cell .kb-app-parameter-input > div { - allow space for the required (red arrow), satisfied (green checkbox) icon - padding-right: 20px; -} -*/ .kb-editor-cell .kb-app-parameter-input .kb-app-parameter-accepted-glyph, .kb-editor-cell .kb-app-parameter-input .kb-app-parameter-required-glyph { /* This scoots the icon inside */ @@ -104,15 +77,12 @@ control with padding, and then scooting the icon back into its column. color: #f44336; } -.kb-editor-cell .kb-app-parameter-hint { - padding-left: 7px; -} - .kb-editor-cell .kb-parameter-data-selection { font-weight: bold; } .kb-editor-cell .kb-app-parameter-hint { + padding-left: 7px; color: #777; text-align: left; margin-top: 3px; @@ -171,11 +141,6 @@ control with padding, and then scooting the icon back into its column. padding: 3px 5px; } -.kb-editor-cell .kb-app-subtitle { - background-color: #f5f5f5; - padding: 3px 5px; -} - .kb-editor-cell .panel-title > [data-toggle="collapse"]::before { display: inline-block; margin-left: 0; @@ -326,13 +291,6 @@ warning: orange margin-bottom: 0; } -.btn.kb-editor-cell-btn.btn-danger.active:hover { - color: rgb(209, 82, 65); - background-color: #ddd; - border-bottom: 2px rgb(209, 82, 65) solid; - margin-bottom: 4px; -} - .btn.kb-editor-cell-btn.btn-danger.active { color: white; background-color: rgb(209, 82, 65); @@ -350,33 +308,20 @@ warning: orange /* DISABLED is gray border and text */ -/* -.btn.kb-editor-cell-btn.btn-primary.disabled:hover { - color: #888; - background-color: #FFF; - border-bottom: 2px #888 solid; - margin-bottom: 4px; -} -*/ - .btn.kb-editor-cell-btn.disabled, .btn.kb-editor-cell-btn.disabled:hover, .btn.kb-editor-cell-btn.disabled:active { color: #888; - xbackground-color: #fff; border: 2px #888 solid; margin-bottom: 4px; } .kb-editor-cell [data-element="run-control-panel"] { - xpadding-left: 8px; width: 100%; } .kb-editor-cell [data-element="tab-pane"] { border-top: 2px rgb(33, 150, 243) solid; - xborder: 1px solid rgb(32, 77, 16); - xbackground-color: #f5f5f5; } .kb-editor-cell [data-element="tab-pane"] > div:empty { @@ -387,10 +332,6 @@ warning: orange padding: 4px; } -.kb-editor-cell .btn.disabled { - xbackground-color: #fff; -} - .kb-editor-cell .btn-primary.kb-btn-action.-rerun { color: rgb(33, 150, 243); } From b9ffff16af1efeba8db69edcb88d40cf615542fa Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 22 Oct 2020 12:51:45 -0700 Subject: [PATCH 093/108] add secure token variable --- .travis.yml | 1 + .../integration/specs/narrative_basic_test.js | 28 +------------------ test/integration/wdio.conf.js | 4 +-- 3 files changed, 4 insertions(+), 29 deletions(-) diff --git a/.travis.yml b/.travis.yml index f53af98a04..1182b38146 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ env: - TRAVIS_NODE_VERSION="10.10.0" - secure: "JPdkdywgQbUUixuDuATMXZHWpWImziRoGKd1tCjYd3+0lamLBlldmjhsZ+Bp7ZabKg2ExQZareGDp34cJdOwWBGb2gg0/emjy4UkWkbDH28zyoWNK1SFp6OTY8AeY/icPXKw3MBgKoXG+hemfcxhYc8rUNgUt7V2fA0JSAkCi4w=" - secure: "BrGlbfGLxZYCynh7LeIFyQeiTx4YX6fdMYK2UceVLoAFjOml9mvtJY5i4Oafc2iBDPQ0wAP/eIzZOTcddwc+12o1S0EAq3zZb5z+MOwRKjsiC+BGUXNzAGLaeJqFTC5Sn+vvqsaDGaR3jrdQ8APUL7XapuLUAkof7vqc1SPsn3I=" + - secure: "YH4s6huZYW34XFlKDAg7yC8VGUjIiird3gDKOmHyhlPVoQa75tll3iqVBBxNFcj+5CfzlCU+ZZK/JTvRoLJ7+QBPrRm7eZ6+s44JaJK+eAz12AJKdEfZyp+blMQ26Y8uOz5AZQhnRsoYfbqDK3p/T8FW1MAKdvE+8nHDCdAh26k=" cache: directories: diff --git a/test/integration/specs/narrative_basic_test.js b/test/integration/specs/narrative_basic_test.js index 05005e0636..8908fe88bc 100644 --- a/test/integration/specs/narrative_basic_test.js +++ b/test/integration/specs/narrative_basic_test.js @@ -1,38 +1,12 @@ -/*global describe, it, browser, expect, $, afterEach, beforeEach*/ +/*global describe, it, browser, expect, $*/ const Utils = require('../wdioUtils'); describe('Narrative tree page with login', () => { 'use strict'; - - // // async version - // it('should open the narrative tree page', async () => { - // await browser.url('/narrative/tree'); - // await expect(browser).toHaveTitle('KBase Narrative'); - // }); - - // // sync version - // it('sets the user token', () => { - // browser.url('/narrative/tree'); - // $('.form-control').setValue(userToken); - - // // find an anchor element with text = OK and click on it - // $('=OK').click(); - // expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); - // }); - it('opens a narrative', async () => { await Utils.login(); - // await browser.url('/narrative/tree'); - // await browser.setCookies({name: 'kbase_session', value: userToken, path: '/'}); - // expect(browser.getCookies(['kbase_session'])[0].value).toBe(userToken); await browser.url(Utils.makeURL('narrative/31932')); - // $('.form-control').setValue(userToken); - // $('=OK').click(); - // expect(browser.getCookies(['kbase_session'])[0].value).toBe(TOKEN); - // browser.pause(1000); - // $('span*=ProkkaTest').click(); - // browser.switchWindow('/narrative/notebooks/ws.31932.obj.1'); const loadingBlocker = await $('#kb-loading-blocker'); const loadingText = await loadingBlocker.getText(); expect(loadingText).toContain('Connecting to KBase services...'); diff --git a/test/integration/wdio.conf.js b/test/integration/wdio.conf.js index e315e441f4..175961f8d1 100644 --- a/test/integration/wdio.conf.js +++ b/test/integration/wdio.conf.js @@ -8,8 +8,8 @@ if (process.env.BASE_URL) { baseUrl = process.env.BASE_URL; } let authToken = 'fakeToken'; -if (process.env.TOKEN) { - authToken = process.env.TOKEN; +if (process.env.KBASE_TOKEN) { + authToken = process.env.KBASE_TOKEN; } const wdioConfig = { From 590099d2995f8893d74088e7bfd0b0f60a8f7f3a Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 22 Oct 2020 14:01:54 -0700 Subject: [PATCH 094/108] make chrome headless with no sandbox --- test/integration/wdio.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/wdio.conf.js b/test/integration/wdio.conf.js index 175961f8d1..bf4c155491 100644 --- a/test/integration/wdio.conf.js +++ b/test/integration/wdio.conf.js @@ -66,7 +66,7 @@ const wdioConfig = { // 5 instances get started at a time. maxInstances: 1, 'goog:chromeOptions': { - args: ['--disable-gpu'] + args: ['--disable-gpu', '--no-sandbox', 'headless'] }, // browserName: 'chrome', From 4e58f9d450c161d5aa0878b97fbef4969c03bca6 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Thu, 22 Oct 2020 16:32:46 -0700 Subject: [PATCH 095/108] fix auto-refresh on completed upload --- .../kbaseNarrativeStagingDataTab.js | 102 ++++++++++++------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js index a7ed4fb74d..2fb68d026b 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js @@ -19,15 +19,18 @@ define([ return new KBWidget({ name: 'kbaseNarrativeStagingDataTab', $myFiles: $('
    '), + minRefreshTime: 1000, // minimum ms required before letting updateView do its update + lastRefresh: 0, // the last time (in ms since epoch) that updateView was run + updateTimeout: null, // a Timeout that reconciles the above times (resets to null) init: function(options) { this._super(options); this.path = '/'; }, - getUserInfo: () => { - let auth = Auth.make({url: Config.url('auth')}); - var userInfo; + getUserInfo: function() { + const auth = Auth.make({url: Config.url('auth')}); + let userInfo; return auth.getCurrentProfile(auth.getAuthToken()) .then(info => { userInfo = { @@ -36,12 +39,12 @@ define([ }; return userInfo; }) - .catch((err) => { + .catch(() => { console.error('An error occurred while determining whether the user account is linked to Globus. Continuing without links.'); userInfo = { user: Jupyter.narrative.userId, globusLinked: false - } + }; return userInfo; }) .finally(() => { @@ -49,11 +52,11 @@ define([ }); }, - activate : function() { + activate: function() { this.stagingAreaViewer.activate(); }, - deactivate : function() { + deactivate: function() { this.stagingAreaViewer.deactivate(); }, @@ -65,38 +68,73 @@ define([ render: function() { return this.getUserInfo() - .then(userInfo => { - var $mainElem = $('
    ') - .css({ - 'height': '604px', - 'padding': '5px', - 'overflow-y': 'auto' + .then(userInfo => { + var $mainElem = $('
    ') + .css({ + 'height': '604px', + 'padding': '5px', + 'overflow-y': 'auto' + }); + var $dropzoneElem = $('
    '); + this.$elem + .empty() + .append($mainElem + .append($dropzoneElem) + .append(this.$myFiles)); + + this.uploadWidget = new FileUploadWidget($dropzoneElem, { + path: this.path, + userInfo: userInfo, + userId: Jupyter.narrative.userId }); - var $dropzoneElem = $('
    '); - this.$elem - .empty() - .append($mainElem - .append($dropzoneElem) - .append(this.$myFiles)); - this.uploadWidget = new FileUploadWidget($dropzoneElem, { - path: this.path, - userInfo: userInfo, - userId: Jupyter.narrative.userId - }); + this.uploadWidget.dropzone.on('complete', () => { + this.updateView(); + }); - this.stagingAreaViewer = new StagingAreaViewer(this.$myFiles, { - path: this.path, - updatePathFn: this.updatePath.bind(this), - userInfo: userInfo - }); + this.stagingAreaViewer = new StagingAreaViewer(this.$myFiles, { + path: this.path, + updatePathFn: this.updatePath.bind(this), + userInfo: userInfo + }); - this.updateView(); - }); + this.updateView(); + }); }, + /** + * This updates the staging area viewer, and is called whenever an upload finishes. + * In addition, this should only fire a refresh event once per second (or some interval) + * to avoid spamming the staging area service and locking up the browser. + * + * So, when this is called the first time, it tracks the time it was called. + * If the next time this is called is less than some minRefreshTime apart, this + * makes a timeout with the time difference. + */ updateView: function() { - this.stagingAreaViewer.render(); + // this does the staging area re-render, then tracks the time + // it was last done. + const renderStagingArea = () => { + this.stagingAreaViewer.render(); + this.lastRefresh = new Date().getTime(); + }; + + // See how long it's been since the last refresh. + const refreshDiff = new Date().getTime() - this.lastRefresh; + if (refreshDiff < this.minRefreshTime) { + // if it's been under the minimum refresh time, and we're not already sitting on + // a pending timeout, then make one. + // If there IS a pending timeout, then do nothing, and it'll refresh when that fires. + if (!this.updateTimeout) { + this.updateTimeout = setTimeout(() => { + renderStagingArea(); + this.updateTimeout = null; + }, refreshDiff); + } + } + else { + renderStagingArea(); + } } }); }); From 6c4f0c43f039accd673ac1b5edc15fe0729eaae5 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 23 Oct 2020 00:01:52 -0700 Subject: [PATCH 096/108] add staging data tab tests --- .../kbaseNarrativeStagingDataTab-spec.js | 129 ++++++++++++++---- 1 file changed, 102 insertions(+), 27 deletions(-) diff --git a/test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js b/test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js index db68fc5acd..e104aade05 100644 --- a/test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js +++ b/test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js @@ -1,7 +1,5 @@ /*global define*/ -/*global describe, it, expect*/ -/*global jasmine*/ -/*global beforeEach, afterEach*/ +/*global jasmine, describe, it, expect, beforeEach, afterEach, spyOn*/ /*jslint white: true*/ define([ 'jquery', @@ -14,12 +12,10 @@ define([ ) { 'use strict'; describe('Test the kbaseNarrativeStagingDataTab widget', () => { - let $dummyNode = $('
    '), - stagingWidget, - fakeUser = 'notAUser'; + const fakeUser = 'notAUser'; beforeEach(() => { jasmine.Ajax.install(); - jasmine.Ajax.stubRequest("https://ci.kbase.us/services/auth/api/V2/me").andReturn({ + jasmine.Ajax.stubRequest(/\/auth\/api\/V2\/me$/).andReturn({ status: 200, statusText: 'success', contentType: 'application/json', @@ -42,14 +38,14 @@ define([ responseHeaders: '', responseText: JSON.stringify([ { - name: "test_folder", - path: fakeUser + "/test_folder", + name: 'test_folder', + path: fakeUser + '/test_folder', mtime: 1532738637499, size: 34, isFolder: true }, { - name: "file_list.txt", - path: fakeUser + "/test_folder/file_list.txt", + name: 'file_list.txt', + path: fakeUser + '/test_folder/file_list.txt', mtime: 1532738637555, size: 49233, source: 'KBase upload' @@ -60,30 +56,109 @@ define([ userId: fakeUser, getAuthToken: () => { return 'fakeToken'; } }; - stagingWidget = new StagingDataTab($dummyNode); }); afterEach(() => { jasmine.Ajax.uninstall(); - $dummyNode.remove(); }); - it('can load properly', (done) => { - stagingWidget.render() - .then(() => { - expect(stagingWidget).not.toBeNull(); - done(); - }); + it('can load properly', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + expect(stagingWidget).not.toBeNull(); }); - it('can update its path properly', (done) => { - stagingWidget.render() - .then(() => { - var newPath = 'a_new_path'; - stagingWidget.updatePath(newPath); - expect(stagingWidget.path).toEqual(newPath); - done(); - }); + it('properly catches failed user profile lookups by returning a default unlinked profile', async () => { + jasmine.Ajax.stubRequest(/\/auth\/api\/V2\/me$/).andReturn({ + status: 500, + statusText: 'error', + contentType: 'text/html', + responseHeaders: '', + responseText: 'error! no profile for you!' + }); + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + const userInfo = await stagingWidget.getUserInfo(); + expect(userInfo).toEqual({user: fakeUser, globusLinked: false}); + }); + + it('gets user info and parsed into whether or not the user is linked to globus', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + const userInfo = await stagingWidget.getUserInfo(); + expect(userInfo).toEqual({user: fakeUser, globusLinked: true}); + }); + + it('can update its path properly', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + const newPath = 'a_new_path'; + stagingWidget.updatePath(newPath); + expect(stagingWidget.path).toEqual(newPath); + }); + + it('can activate its staging area viewer', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + spyOn(stagingWidget.stagingAreaViewer, 'activate'); + stagingWidget.activate(); + expect(stagingWidget.stagingAreaViewer.activate).toHaveBeenCalled(); + }); + + it('can deactivate its staging area viewer', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + spyOn(stagingWidget.stagingAreaViewer, 'deactivate'); + stagingWidget.activate(); + stagingWidget.deactivate(); + expect(stagingWidget.stagingAreaViewer.deactivate).toHaveBeenCalled(); + }); + + it('can be told to update its view', async () => { + jasmine.clock().install(); + + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + // kinda cheating - but to test that things are run, we know that this will call + // stagingAreaViewer.render + spyOn(stagingWidget.stagingAreaViewer, 'render'); + stagingWidget.updateView(); + jasmine.clock().tick(stagingWidget.minRefreshTime + 100); + expect(stagingWidget.stagingAreaViewer.render).toHaveBeenCalled(); + + jasmine.clock().uninstall(); + }); + + it('can be triggered to update its view after a completed upload', async () => { + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + spyOn(stagingWidget, 'updateView'); + // a little more cheating with implementation, this triggers the "upload complete" event + stagingWidget.uploadWidget.dropzone.emit('complete', {name: 'foo', size: 12345}); + expect(stagingWidget.updateView).toHaveBeenCalled(); + }); + + it('only updates its view once per interval on completed uploads', async () => { + jasmine.clock().install(); + + const $dummyNode = $('
    '), + stagingWidget = new StagingDataTab($dummyNode); + await stagingWidget.render(); + // run a bunch of triggers, should only call render on the staging area once + spyOn(stagingWidget.stagingAreaViewer, 'render'); + for (let i = 0; i < 100; i++) { + stagingWidget.uploadWidget.dropzone.emit('complete', {name: 'foo', size: 12345}); + } + jasmine.clock().tick(stagingWidget.minRefreshTime + 100); + expect(stagingWidget.stagingAreaViewer.render.calls.count()).toEqual(1); + + jasmine.clock().uninstall(); }); }); }); From 3a8917974db1bcb2e171d1d8528580125b366328 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 23 Oct 2020 07:34:26 -0700 Subject: [PATCH 097/108] var -> const --- .../js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js | 4 ++-- src/config.json | 2 +- test/unit/karma.conf.js | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js index 2fb68d026b..4c8cd97dc0 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js @@ -69,13 +69,13 @@ define([ render: function() { return this.getUserInfo() .then(userInfo => { - var $mainElem = $('
    ') + const $mainElem = $('
    ') .css({ 'height': '604px', 'padding': '5px', 'overflow-y': 'auto' }); - var $dropzoneElem = $('
    '); + const $dropzoneElem = $('
    '); this.$elem .empty() .append($mainElem diff --git a/src/config.json b/src/config.json index f9268f2ab8..4edff1a286 100644 --- a/src/config.json +++ b/src/config.json @@ -103,7 +103,7 @@ "google_ad_conversion": "kR9OCLas4JgBEOy2pucC" }, "comm_wait_timeout": 600000, - "config": "narrative-refactor", + "config": "dev", "data_panel": { "initial_sort_limit": 10000, "max_name_length": 33, diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 949f09ccca..4dbbf3be9f 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,7 +32,8 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - {pattern: 'test/unit/spec/**/*.js', included: false}, + {pattern: 'test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js', included: false}, + // {pattern: 'test/unit/spec/**/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, From f41024d27237e242dc4666cccf1a0e9452337697 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 23 Oct 2020 07:40:25 -0700 Subject: [PATCH 098/108] restore karma.conf to run all frontend tests... --- test/unit/karma.conf.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/unit/karma.conf.js b/test/unit/karma.conf.js index 4dbbf3be9f..949f09ccca 100644 --- a/test/unit/karma.conf.js +++ b/test/unit/karma.conf.js @@ -32,8 +32,7 @@ module.exports = function (config) { }, files: [ 'kbase-extension/static/narrative_paths.js', - {pattern: 'test/unit/spec/narrative_core/kbaseNarrativeStagingDataTab-spec.js', included: false}, - // {pattern: 'test/unit/spec/**/*.js', included: false}, + {pattern: 'test/unit/spec/**/*.js', included: false}, {pattern: 'node_modules/jasmine-ajax/lib/mock-ajax.js', included: true}, {pattern: 'kbase-extension/static/ext_components/kbase-ui-plugin-catalog/src/plugin/modules/data/categories.yml', included: false, served: true}, {pattern: 'kbase-extension/static/**/*.css', included: false, served: true}, From be56aabbb2f0dbdc5fac0239d043d60166dd6dd2 Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Fri, 23 Oct 2020 10:51:58 -0700 Subject: [PATCH 099/108] Remove inline styles from error pages and create new css file --- kbase-extension/kbase_templates/403.html | 19 ++++------ kbase-extension/kbase_templates/error.html | 9 +---- .../kbase_templates/generic_error.html | 13 ++----- kbase-extension/static/errorMain.js | 2 +- .../static/kbase/css/advancedViewCell.css | 11 ------ .../static/kbase/css/errorPage.css | 37 +++++++++++++++++++ 6 files changed, 51 insertions(+), 40 deletions(-) create mode 100644 kbase-extension/static/kbase/css/errorPage.css diff --git a/kbase-extension/kbase_templates/403.html b/kbase-extension/kbase_templates/403.html index 5d29d60746..815772f43a 100644 --- a/kbase-extension/kbase_templates/403.html +++ b/kbase-extension/kbase_templates/403.html @@ -5,12 +5,7 @@ {% block stylesheet %} {{super()}} - + {% endblock %} {% block loading_message %} @@ -22,11 +17,11 @@ {% block site %} -
    -

    You do not have permission to access this Narrative.

    -

    You can request access from the Narrative owners using the controls below.

    +
    +

    You do not have permission to access this Narrative.

    +

    You can request access from the Narrative owners using the controls below.

    -
    +
    - {% endblock %} diff --git a/kbase-extension/kbase_templates/error.html b/kbase-extension/kbase_templates/error.html index 2746a0d4c8..aab8086eb3 100644 --- a/kbase-extension/kbase_templates/error.html +++ b/kbase-extension/kbase_templates/error.html @@ -5,12 +5,7 @@ {% block stylesheet %} {{super()}} - + {% endblock %} {% block loading_message %} @@ -18,7 +13,7 @@ {% block site %} -
    +
    {% block h1_error %}

    {{status_code}} : {{status_message}}

    {% endblock h1_error %} diff --git a/kbase-extension/kbase_templates/generic_error.html b/kbase-extension/kbase_templates/generic_error.html index 9ef57764d0..8d40b887d2 100644 --- a/kbase-extension/kbase_templates/generic_error.html +++ b/kbase-extension/kbase_templates/generic_error.html @@ -5,12 +5,7 @@ {% block stylesheet %} {{super()}} - + {% endblock %} {% block loading_message %} @@ -22,15 +17,15 @@ {% block site %} -
    +
    {% block h1_error %} -

    +

    An error occurred while loading this Narrative

    {% endblock h1_error %} {% block error_detail %} {% if message %} -

    {{message}}

    +

    {{message}}

    {% endif %} {% endblock %}
    diff --git a/kbase-extension/static/errorMain.js b/kbase-extension/static/errorMain.js index c4a87b64c6..12c5adba6c 100644 --- a/kbase-extension/static/errorMain.js +++ b/kbase-extension/static/errorMain.js @@ -21,7 +21,7 @@ require([ return Login.init($('#signin-button'), true); }) .then(function () { - let statusCode = document.getElementsByClassName('error')[0].getAttribute('data-code'); + let statusCode = document.getElementById('error_container').getAttribute('data-code'); if (statusCode === '403') { buildRequestControl(); } diff --git a/kbase-extension/static/kbase/css/advancedViewCell.css b/kbase-extension/static/kbase/css/advancedViewCell.css index 6f5595ca02..b34c84a407 100644 --- a/kbase-extension/static/kbase/css/advancedViewCell.css +++ b/kbase-extension/static/kbase/css/advancedViewCell.css @@ -1,14 +1,3 @@ -/* -To change this license header, choose License Headers in Project Properties. -To change this template file, choose Tools | Templates -and open the template in the editor. -*/ - -/* - Created on : Jul 14, 2016, 2:31:08 PM - Author : erik -*/ - .kb-advanced-view-cell .kb-panel-container[data-element=parameters-group] > div.panel-collapse > .panel-body { padding: 0; } diff --git a/kbase-extension/static/kbase/css/errorPage.css b/kbase-extension/static/kbase/css/errorPage.css new file mode 100644 index 0000000000..a24475d0fd --- /dev/null +++ b/kbase-extension/static/kbase/css/errorPage.css @@ -0,0 +1,37 @@ +#header, +#site { + display: block; +} + +.access-error__container, +.generic-error__container { + text-align: center; + margin: 2rem; +} + +.access-error__heading, +.generic-error__heading { + font-weight: bold; + font-size: 200%; + line-height: 1.5; +} + +.access-error__text, +.generic-error__text { + font-size: 150%; + line-height: 2; +} + +.access-request-form__container { + margin-top: 2rem; +} + +.access-request-progress__container { + display: none; + margin-top: 1rem; +} + +.access-request-result { + font-size: 125%; + margin-top: 2rem; +} From e3e08976ec6485fb3876ec562f472bd6c1d22f30 Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Fri, 23 Oct 2020 11:49:10 -0700 Subject: [PATCH 100/108] Fixing the placement of the add new blah blah blah buttons --- kbase-extension/kbase_templates/notebook.html | 12 +++--------- .../static/kbase/css/kbaseNarrative.css | 19 ++++++++++++++++--- .../static/kbase/custom/custom.css | 2 +- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/kbase-extension/kbase_templates/notebook.html b/kbase-extension/kbase_templates/notebook.html index bcb12ff51a..242dfbdba1 100644 --- a/kbase-extension/kbase_templates/notebook.html +++ b/kbase-extension/kbase_templates/notebook.html @@ -96,17 +96,15 @@
    -
    +
    @@ -140,8 +138,4 @@ - - {% endblock %} diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index efef627db6..1b1e2137b7 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -2701,22 +2701,35 @@ button.kb-data-obj { /* specialize buttons that hover over narrative */ #kb-add-code-cell, #kb-add-md-cell { + background-color: #2196f3; + border-radius: 50%; + bottom: 15px; box-shadow: #cecece 2px 2px 1px; + cursor: pointer; + color: #fff; height: 40px; - width: 40px; - background-color: #2196f3; opacity: 0.5; + padding-top: 5px; + position: fixed; + width: 40px; + z-index: 5; } #kb-add-code-cell { - right: 100px; + right: 75px; + padding-left: 7px; } #kb-add-md-cell { margin-right: 20px; + right: 10px; + padding-left: 8px; } +#kb-add-code-cell:hover, +#kb-add-md-cell:hover, .kb-data-list-add-data-button:hover { + opacity: 1; cursor: pointer; background-color: #36618e; } diff --git a/kbase-extension/static/kbase/custom/custom.css b/kbase-extension/static/kbase/custom/custom.css index a3f96bd107..33a946f084 100644 --- a/kbase-extension/static/kbase/custom/custom.css +++ b/kbase-extension/static/kbase/custom/custom.css @@ -122,7 +122,7 @@ div.cell.selected.kb-error { border-left: 5px solid #d9534f; } -#notebook { +div#notebook { padding: 0; } From 318407c3e5bb5af4bd8e89436423c4c34850e5e2 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 23 Oct 2020 13:36:08 -0700 Subject: [PATCH 101/108] move inline styles to class --- kbase-extension/static/kbase/css/kbaseNarrative.css | 6 ++++++ .../widgets/narrative_core/kbaseNarrativeStagingDataTab.js | 6 +----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index efef627db6..5b5dc93701 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -88,6 +88,12 @@ cursor: pointer; } +.kb-data-staging-container { + height: 604px; + padding: 5px; + overflow-y: auto; +} + .kb-data-staging-footer { font-family: Oxygen, Arial, sans-serif; font-weight: bold; diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js index 4c8cd97dc0..aef31f59dd 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js @@ -70,11 +70,7 @@ define([ return this.getUserInfo() .then(userInfo => { const $mainElem = $('
    ') - .css({ - 'height': '604px', - 'padding': '5px', - 'overflow-y': 'auto' - }); + .addClass('kb-data-staging-container'); const $dropzoneElem = $('
    '); this.$elem .empty() From f0490ff0b9133db7842c362473e8ff3d4aba7ea3 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Fri, 23 Oct 2020 15:02:33 -0700 Subject: [PATCH 102/108] rename to BEM style --- kbase-extension/static/kbase/css/kbaseNarrative.css | 2 +- .../js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kbase-extension/static/kbase/css/kbaseNarrative.css b/kbase-extension/static/kbase/css/kbaseNarrative.css index 5b5dc93701..b68ad693ad 100644 --- a/kbase-extension/static/kbase/css/kbaseNarrative.css +++ b/kbase-extension/static/kbase/css/kbaseNarrative.css @@ -88,7 +88,7 @@ cursor: pointer; } -.kb-data-staging-container { +.kb-data-staging__container { height: 604px; padding: 5px; overflow-y: auto; diff --git a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js index aef31f59dd..73e8a300db 100644 --- a/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js +++ b/kbase-extension/static/kbase/js/widgets/narrative_core/kbaseNarrativeStagingDataTab.js @@ -70,7 +70,7 @@ define([ return this.getUserInfo() .then(userInfo => { const $mainElem = $('
    ') - .addClass('kb-data-staging-container'); + .addClass('kb-data-staging__container'); const $dropzoneElem = $('
    '); this.$elem .empty() From 4edc283c52187ce6fad9ab32ec9b8884fb7dc7ef Mon Sep 17 00:00:00 2001 From: ialarmedalien Date: Fri, 23 Oct 2020 15:10:35 -0700 Subject: [PATCH 103/108] let => const in errorMain.js --- kbase-extension/static/errorMain.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kbase-extension/static/errorMain.js b/kbase-extension/static/errorMain.js index 12c5adba6c..b82a67d8a6 100644 --- a/kbase-extension/static/errorMain.js +++ b/kbase-extension/static/errorMain.js @@ -21,7 +21,7 @@ require([ return Login.init($('#signin-button'), true); }) .then(function () { - let statusCode = document.getElementById('error_container').getAttribute('data-code'); + const statusCode = document.getElementById('error_container').getAttribute('data-code'); if (statusCode === '403') { buildRequestControl(); } From 937638895a5a1a4a3f491abe41229adaa0f572f1 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Mon, 26 Oct 2020 14:18:59 -0700 Subject: [PATCH 104/108] better tweak for starting int tests --- docs/testing.md | 37 ++++++++++++++++++- .../integration/specs/narrative_basic_test.js | 5 ++- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/docs/testing.md b/docs/testing.md index 0a7d251e13..7ad50602f2 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -42,6 +42,7 @@ Then, simply run (from the narrative root directory) `make test`. This calls a few subcommands, and those can be run independently for specific uses: - `make test-frontend-unit` will run only the unit tests on the frontend (i.e. those with the Karma runner) +- `make test-integration` will run the frontend integration tests that make use of webdriver.io to simulate the browser on a locally instantiated Narrative, but running against live KBase services. - `make test-frontend-e2e` will run only the frontend tests that make use of Selenium to simulate a browser on the real Narrative site. - `make test-backend` will run only the backend Python tests. @@ -67,7 +68,18 @@ This just needs the path to the token file (with pre-pended slash), such as `"/t ### Testing with Travis-CI and Coveralls -These tests are run (without credentials) automatically on a pull request to the Narrative Github repo. These are currently run through [Travis-CI](https://travis-ci.org/) and the coverage reported with [Coveralls](https://coveralls.io/). There should be nothing you need to do to make this work. +These tests are run automatically on a pull request to the Narrative Github repo. These are currently run through [Travis-CI](https://travis-ci.org/) and the coverage reported with [Coveralls](https://coveralls.io/). + +Unit tests are automatically run without credentials, skipping various tests that are, really, more like integration tests. + +The integration tests that run with webdriver.io do require an authentication token. This is embedded in the `.travis.yml` file as a secure environment variable - the third (and last) one. That token will expire every 90 days and will need to be replaced. A new one can be generated from the KBase CI Account page with a valid developer account. This token can then be encrypted with the following commands. Note that Ruby is required. + +``` +gem install travis # if not already installed +travis encrypt KBASE_TOKEN=my_generated_token +``` +This will emit a string that looks like `secure: "SDFSDFSDFSDF="` Use this string to replace the out of date token. It will become available in the test environment as `KBASE_TOKEN`, which is the variable that the `wdio.conf.js` file looks for. + ### Adding Your Own Tests @@ -81,6 +93,27 @@ There are some service client Mocks available using the `mock` library. Check ou JavaScript tests follow the common Test Spec idiom. Here, we create a new spec file for each JavaScript module. These all live under `test/unit/spec` in roughly the same subdirectory as found under `kbase-extension/static/kbase/js`. There's an example spec in `test/unit/specTemplate.js` - you can just copy this to a new module, and modify to fit your needs. +***Front End Integration*** + +Integration tests are done using [webdriver.io](https://webdriver.io). The test scripts are written in Javascript and all resemble the common Mocha style. These tests are all under `test/integration/spec`. It's helpful for each of these files to include the `wdioUtils.js` module in `test/integration`. For each view that requires authentication (i.e. most of them), be sure to start your test with the async `login` function provided by that module. An example spec file might look like: + +```javascript +const Utils = require('../wdioUtils'); + +describe('Simple test runner', () => { + beforeEach(async () => await Utils.login()); + + it('opens a narrative', async () => { + await browser.url(Utils.makeURL('narrative/31932')); + const loadingBlocker = await $('#kb-loading-blocker'); + const loadingText = await loadingBlocker.getText(); + expect(loadingText).toContain('Connecting to KBase services...'); + }); +}); +``` + +When running these locally, these expect that there's a valid authentication token in + ### Manual Testing and Debugging ***Python*** @@ -94,7 +127,7 @@ log.info("Your Logs Go Here") ***JavaScript*** -It can be useful to immediately see your changes in the narrative. For javascript changes, you will just have to reload the page. You can print messages to the console with `console.log` +It can be useful to immediately see your changes in the narrative. For javascript changes, you will just have to reload the page. You can print messages to the console with `console.log`. To debug using the Karma Debugger complete the following steps: diff --git a/test/integration/specs/narrative_basic_test.js b/test/integration/specs/narrative_basic_test.js index 8908fe88bc..46f455bd0e 100644 --- a/test/integration/specs/narrative_basic_test.js +++ b/test/integration/specs/narrative_basic_test.js @@ -1,11 +1,12 @@ -/*global describe, it, browser, expect, $*/ +/*global describe, it, browser, expect, beforeEach $*/ const Utils = require('../wdioUtils'); describe('Narrative tree page with login', () => { 'use strict'; + beforeEach(async () => await Utils.login()); + it('opens a narrative', async () => { - await Utils.login(); await browser.url(Utils.makeURL('narrative/31932')); const loadingBlocker = await $('#kb-loading-blocker'); const loadingText = await loadingBlocker.getText(); From 3598714c5c5422bb2c9ba38dcd3e818314264ae6 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Mon, 26 Oct 2020 14:23:30 -0700 Subject: [PATCH 105/108] remove build images action --- .github/workflows/build_images.yml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 .github/workflows/build_images.yml diff --git a/.github/workflows/build_images.yml b/.github/workflows/build_images.yml deleted file mode 100644 index dc1405a253..0000000000 --- a/.github/workflows/build_images.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Build-Images - -on: - pull_request: - # types: [ closed ] - branches: [ develop, master ] - -jobs: - build-images: - runs-on: ubuntu-latest - # if: github.event.pull_request.merged - steps: - - uses: actions/checkout@v2 - - - name: Set up environment variables - run: | - echo "::set-env name=DATE::$(date -u +'%Y-%m-%dT%H:%M:%SZ')" - echo "::set-env name=NARRATIVE_VERSION_NUM::$(grep '\"version\":' src/config.json.templ | awk '{print $2}' | sed 's/\"//g')" - - - name: Test environment variables - run: | - echo $DATE - echo $NARRATIVE_VERSION_NUM From 7f8bc256ca1f674f2300ba4b6edecf89c6d02520 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Mon, 26 Oct 2020 21:10:03 -0700 Subject: [PATCH 106/108] make last staging helper test mock --- .../narrative/tests/test_staging_helper.py | 69 +++++++++++-------- 1 file changed, 39 insertions(+), 30 deletions(-) diff --git a/src/biokbase/narrative/tests/test_staging_helper.py b/src/biokbase/narrative/tests/test_staging_helper.py index fdc1229b29..61afce1ba9 100644 --- a/src/biokbase/narrative/tests/test_staging_helper.py +++ b/src/biokbase/narrative/tests/test_staging_helper.py @@ -2,6 +2,42 @@ import unittest import os from mock import patch +from urllib.error import HTTPError, URLError + + +def mock_fetch_url(end_point, values=None, headers=None, method="GET", save_path=None): + if "list" in end_point: + print("mocking __fetch_url list endpoint") + return '[{"path": "tgu/test_file_1", "isFolder": false},\ + {"path": "tgu/test_dir", "isFolder": true},\ + {"path": "tgu/test_dir/test_file_2", "isFolder": false}]' + elif "jgi-metadata" in end_point: + print("mocking __fetch_url jgi-metadata endpoint") + return '{"file_name": "test_file", "file_status": "BACKUP_COMPLETE"}' + elif "metadata" in end_point: + print("mocking __fetch_url metadata endpoint") + return '{"head": "head_line", "tail": "tail_line", "lineCount": 10}' + elif "search" in end_point: + print("mocking __fetch_url search endpoint") + return ( + '[{"isFolder": false, "mtime": 1515526154896, "name": "LMS-PROC-315.pdf"}]' + ) + elif "delete" in end_point: + print("mocking __fetch_url delete endpoint") + return "successfully deleted tgu2/test.pdf" + elif "download" in end_point: + print("mocking __fetch_url download endpoint") + elif "mv" in end_point: + print("mocking __fetch_url mv endpoint") + return "successfully moved tgu2/test.pdf to tgu2/test_1.pdf" + else: + print(f"Not mocking unknown endpoint: {end_point}") + return + + +def mock_bad_list(end_point, values=None, headers=None, method="GET", save_path=None): + # raise URLError(end_point, 401, "Unauthorized", headers, save_path) + raise ValueError("Error code: 401\nReason: Unauthorized") class StagingHelperTest(unittest.TestCase): @@ -20,42 +56,15 @@ def test_token(self): self.assertEqual(self.good_fake_token, self.staging_helper._token) def test_staging_url(self): - self.assertTrue( - "kbase.us/services/staging_service" in self.staging_helper._staging_url - ) + self.assertIsNotNone(self.staging_helper._staging_url) - def test_unauthorized_token(self): + @patch.object(Helper, "_Helper__fetch_url", side_effect=mock_bad_list) + def test_unauthorized_token(self, _fetch_url): with self.assertRaises(ValueError) as context: self.staging_helper.list() self.assertTrue("Reason: Unauthorized" in str(context.exception)) self.assertTrue("Error code: 401" in str(context.exception)) - def mock_fetch_url( - end_point, values=None, headers=None, method="GET", save_path=None - ): - if "list" in end_point: - print("mocking __fetch_url list endpoint") - return '[{"path": "tgu/test_file_1", "isFolder": false},\ - {"path": "tgu/test_dir", "isFolder": true},\ - {"path": "tgu/test_dir/test_file_2", "isFolder": false}]' - elif "jgi-metadata" in end_point: - print("mocking __fetch_url jgi-metadata endpoint") - return '{"file_name": "test_file", "file_status": "BACKUP_COMPLETE"}' - elif "metadata" in end_point: - print("mocking __fetch_url metadata endpoint") - return '{"head": "head_line", "tail": "tail_line", "lineCount": 10}' - elif "search" in end_point: - print("mocking __fetch_url search endpoint") - return '[{"isFolder": false, "mtime": 1515526154896, "name": "LMS-PROC-315.pdf"}]' - elif "delete" in end_point: - print("mocking __fetch_url delete endpoint") - return "successfully deleted tgu2/test.pdf" - elif "download" in end_point: - print("mocking __fetch_url download endpoint") - elif "mv" in end_point: - print("mocking __fetch_url mv endpoint") - return "successfully moved tgu2/test.pdf to tgu2/test_1.pdf" - @patch.object(Helper, "_Helper__fetch_url", side_effect=mock_fetch_url) def test_list(self, _fetch_url): file_list = self.staging_helper.list() From 478f2b7dccea18b05df9d4a43e8c27cce9b5a918 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Mon, 26 Oct 2020 21:43:21 -0700 Subject: [PATCH 107/108] add types/puppeteer --- package-lock.json | 166 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 1 + 2 files changed, 159 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8495b4fc99..5dc60aaf2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -451,9 +451,46 @@ "@types/node": { "version": "14.14.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.3.tgz", - "integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==", + "integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==" + }, + "@types/puppeteer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-3.0.2.tgz", + "integrity": "sha512-JRuHPSbHZBadOxxFwpyZPeRlpPTTeMbQneMdpFd8LXdyNfFSiX950CGewdm69g/ipzEAXAmMyFF1WOWJOL/nKw==", "dev": true, - "optional": true + "requires": { + "@types/node": "*" + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.9.tgz", + "integrity": "sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g==", + "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 }, "@types/yauzl": { "version": "2.9.1", @@ -2320,6 +2357,23 @@ "debug": "~4.1.0", "engine.io-parser": "~2.2.0", "ws": "^7.1.2" + }, + "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 + } } }, "engine.io-client": { @@ -2341,6 +2395,27 @@ "yeast": "0.1.2" }, "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==", + "dev": true + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==", + "dev": true + }, "ws": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", @@ -5117,6 +5192,23 @@ "flatted": "^2.0.1", "rfdc": "^1.1.4", "streamroller": "^2.2.4" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 + } } }, "loglevel": { @@ -5723,12 +5815,6 @@ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", "dev": true }, - "node-status-codes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", - "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", - "dev": true - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -6396,6 +6482,12 @@ "ms": "2.1.2" } }, + "devtools-protocol": { + "version": "0.0.799653", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.799653.tgz", + "integrity": "sha512-t1CcaZbvm8pOlikqrsIM9GOa7Ipp07+4h/q9u0JXBWjPCjHdBl9KkddX87Vv9vBHoBGtwV79sYQNGnQM6iS5gg==", + "dev": true + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -7126,6 +7218,23 @@ "socket.io-adapter": "~1.1.0", "socket.io-client": "2.3.0", "socket.io-parser": "~3.4.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 + } } }, "socket.io-adapter": { @@ -7168,6 +7277,23 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "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" + }, + "dependencies": { + "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 + } + } + }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -7227,6 +7353,15 @@ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, + "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" + } + }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -7396,6 +7531,21 @@ "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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 } } }, diff --git a/package.json b/package.json index 1dc3b5e76a..a8ce34320e 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "private": true, "repository": "github.com/kbase/narrative", "devDependencies": { + "@types/puppeteer": "^3.0.2", "@wdio/cli": "^6.6.0", "@wdio/local-runner": "^6.6.0", "@wdio/mocha-framework": "^6.6.0", From 6f0b5c05f34262998701cef8594c934c9fa45005 Mon Sep 17 00:00:00 2001 From: Bill Riehl Date: Mon, 26 Oct 2020 22:07:08 -0700 Subject: [PATCH 108/108] change to KBASE_TEST_TOKEN in int tests --- test/integration/wdio.conf.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/integration/wdio.conf.js b/test/integration/wdio.conf.js index bf4c155491..713236be3b 100644 --- a/test/integration/wdio.conf.js +++ b/test/integration/wdio.conf.js @@ -8,8 +8,8 @@ if (process.env.BASE_URL) { baseUrl = process.env.BASE_URL; } let authToken = 'fakeToken'; -if (process.env.KBASE_TOKEN) { - authToken = process.env.KBASE_TOKEN; +if (process.env.KBASE_TEST_TOKEN) { + authToken = process.env.KBASE_TEST_TOKEN; } const wdioConfig = {