--- /dev/null
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+name: Arvados Tests
+
+on:
+ workflow_dispatch:
+ pull_request:
+ branches:
+ - main
+
+jobs:
+ workbench2:
+ name: Workbench2 Tests
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Setup buildx
+ uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # v3.3.0
+ - name: Build wb2 test container
+ uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0
+ with:
+ context: .
+ file: "services/workbench2/docker/Dockerfile"
+ tags: workbench2-test:latest
+ load: true
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+ push: false
+ - name: Run wb2 integration tests
+ uses: addnab/docker-run-action@4f65fabd2431ebc8d299f8e5a018d79a769ae185 # v3
+ with:
+ image: workbench2-test:latest
+ options: -v ${{github.workspace}}:/usr/src/arvados -w /usr/src/arvados/services/workbench2
+ run: |
+ yarn install
+ yarn test --no-watchAll --bail --ci || exit $?
+ tools/run-integration-tests.sh -a /usr/src/arvados
arvados-snakeoil-ca.pem
.vagrant
packages
+.eslintcache
GOTARBALL=${GOTARBALL_$(HOSTTYPE)}
NODETARBALL=${NODETARBALL_$(HOSTTYPE)}
-RVMKEY1=mpapis.asc
-RVMKEY2=pkuczynski.asc
-
-common-generated-all: common-generated/$(GOTARBALL) common-generated/$(NODETARBALL) common-generated/$(RVMKEY1) common-generated/$(RVMKEY2)
+common-generated-all: common-generated/$(GOTARBALL) common-generated/$(NODETARBALL)
common-generated/$(GOTARBALL): common-generated
wget -cqO common-generated/$(GOTARBALL) https://dl.google.com/go/$(GOTARBALL)
common-generated/$(NODETARBALL): common-generated
wget -cqO common-generated/$(NODETARBALL) https://nodejs.org/dist/v12.22.12/$(NODETARBALL)
-common-generated/$(RVMKEY1): common-generated
- wget -cqO common-generated/$(RVMKEY1) https://rvm.io/mpapis.asc
-
-common-generated/$(RVMKEY2): common-generated
- wget -cqO common-generated/$(RVMKEY2) https://rvm.io/pkuczynski.asc
-
common-generated:
mkdir common-generated
ARG BRANCH
ARG GOVERSION
-## dont use debian:11 here since the word 'bullseye' is used for rvm precompiled binaries
FROM debian:bullseye as build_x86_64
# Install go
ONBUILD ARG BRANCH
SHELL ["/bin/bash", "-c"]
# Install dependencies.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 libcurl4-gnutls-dev curl git procps libattr1-dev libfuse-dev libgnutls28-dev libpq-dev unzip python3-venv python3-dev libpam-dev equivs
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y \
+ build-essential \
+ curl \
+ equivs \
+ git \
+ libattr1-dev \
+ libcurl4-gnutls-dev \
+ libfuse-dev \
+ libgnutls28-dev \
+ libpam-dev \
+ libpq-dev \
+ pkgconf \
+ procps \
+ python3 \
+ python3-dev \
+ python3-venv \
+ ruby \
+ ruby-dev \
+ unzip
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
# fpm depends on dotenv, but version 3.0 of that gem dropped support for
# Ruby 2.7, so we need to specifically install an older version.
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 2.7 -j $(grep -c processor /proc/cpuinfo) --disable-binary && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
- echo "gem: --no-document" >> ~/.gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19 && \
- /usr/local/rvm/bin/rvm-exec default gem install dotenv --version '~> 2.8' && \
- /usr/local/rvm/bin/rvm-exec default gem install fpm --version 1.15.1
+RUN echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '~> 2.4.0' bundler && \
+ gem install dotenv --version '~> 2.8' && \
+ gem install fpm --version 1.15.1 && \
+ bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
-RUN /usr/local/rvm/bin/rvm-exec default bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
# Cf. https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
ENV MAKE "make --jobs $(grep -c processor /proc/cpuinfo)"
-# Preseed the go module cache and the ruby gems, using the currently checked
-# out branch of the source tree. This avoids potential compatibility issues
-# between the version of Ruby and certain gems.
+# Preseed the go module cache.
RUN git clone git://git.arvados.org/arvados.git /tmp/arvados && \
cd /tmp/arvados && \
if [[ -n "${BRANCH}" ]]; then git checkout ${BRANCH}; fi && \
- cd /tmp/arvados/services/api && \
- /usr/local/rvm/bin/rvm-exec default bundle install && \
- cd /tmp/arvados && \
go mod download
ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "debian11"]
+CMD ["bash", "/jenkins/run-build-packages.sh", "--target", "debian11"]
ARG BRANCH
ARG GOVERSION
-## dont use debian:12 here since the word 'bookworm' is used for rvm precompiled binaries
FROM debian:bookworm as build_x86_64
ONBUILD ARG BRANCH
# Install go
SHELL ["/bin/bash", "-c"]
# Install dependencies.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 libcurl4-gnutls-dev curl git procps libattr1-dev libfuse-dev libgnutls28-dev libpq-dev unzip python3-venv python3-dev libpam-dev equivs
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y \
+ build-essential \
+ curl \
+ equivs \
+ git \
+ libattr1-dev \
+ libcurl4-gnutls-dev \
+ libfuse-dev \
+ libgnutls28-dev \
+ libpam-dev \
+ libpq-dev \
+ pkgconf \
+ procps \
+ python3 \
+ python3-dev \
+ python3-venv \
+ ruby \
+ ruby-dev \
+ unzip
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 3.2.2 -j $(grep -c processor /proc/cpuinfo) --disable-binary && \
- /usr/local/rvm/bin/rvm alias create default ruby-3.2.2 && \
- echo "gem: --no-document" >> ~/.gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19 && \
- /usr/local/rvm/bin/rvm-exec default gem install fpm --version 1.15.1
+RUN echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '>= 2.4.0' bundler && \
+ gem install fpm --version 1.15.1 && \
+ bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
-RUN /usr/local/rvm/bin/rvm-exec default bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
# Cf. https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
ENV MAKE "make --jobs 8"
-# Preseed the go module cache and the ruby gems, using the currently checked
-# out branch of the source tree. This avoids potential compatibility issues
-# between the version of Ruby and certain gems.
+# Preseed the go module cache.
RUN git clone git://git.arvados.org/arvados.git /tmp/arvados && \
cd /tmp/arvados && \
if [[ -n "${BRANCH}" ]]; then git checkout ${BRANCH}; fi && \
- cd /tmp/arvados/services/api && \
- /usr/local/rvm/bin/rvm-exec default bundle install && \
- cd /tmp/arvados && \
go mod download
ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "debian12"]
+CMD ["bash", "/jenkins/run-build-packages.sh", "--target", "debian12"]
MAINTAINER Arvados Package Maintainers <packaging@arvados.org>
# Install dependencies.
-RUN microdnf --assumeyes --enablerepo=devel install \
+RUN microdnf --assumeyes module enable ruby:3.1 \
+ && microdnf --assumeyes --enablerepo=devel install \
automake \
bison \
bzip2 \
openssl-devel \
pam-devel \
patch \
+ pkgconf \
postgresql-devel \
procps-ng \
python39 \
readline-devel \
rpm-build \
ruby \
+ ruby-devel \
sqlite-devel \
tar \
unzip \
xz-libs \
zlib-devel
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
# fpm depends on dotenv, but version 3.0 of that gem dropped support for
# Ruby 2.7, so we need to specifically install an older version.
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install --disable-binary 2.7 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
- echo "gem: --no-document" >> ~/.gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19 && \
- /usr/local/rvm/bin/rvm-exec default gem install dotenv --version '~> 2.8' && \
- /usr/local/rvm/bin/rvm-exec default gem install fpm --version 1.15.1
+RUN echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '>= 2.4.0' bundler && \
+ gem install dotenv --version '~> 2.8' && \
+ gem install fpm --version 1.15.1 && \
+ bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
-RUN /usr/local/rvm/bin/rvm-exec default bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
# Cf. https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
ENV MAKE "make --jobs $(grep -c processor /proc/cpuinfo)"
-# Preseed the go module cache and the ruby gems, using the currently checked
-# out branch of the source tree. This avoids potential compatibility issues
-# between the version of Ruby and certain gems.
+# Preseed the go module cache.
RUN git clone git://git.arvados.org/arvados.git /tmp/arvados && \
cd /tmp/arvados && \
if [[ -n "${BRANCH}" ]]; then git checkout ${BRANCH}; fi && \
- cd /tmp/arvados/services/api && \
- /usr/local/rvm/bin/rvm-exec default bundle install && \
- cd /tmp/arvados && \
go mod download
ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "rocky8"]
+CMD ["bash", "/jenkins/run-build-packages.sh", "--target", "rocky8"]
SHELL ["/bin/bash", "-c"]
# Install dependencies.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 libcurl4-gnutls-dev libgnutls28-dev curl git libattr1-dev libfuse-dev libpq-dev unzip tzdata python3-venv python3-dev libpam-dev shared-mime-info equivs
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y \
+ build-essential \
+ curl \
+ equivs \
+ git \
+ libattr1-dev \
+ libcurl4-gnutls-dev \
+ libfuse-dev \
+ libgnutls28-dev \
+ libpam-dev \
+ libpq-dev \
+ pkgconf \
+ python3 \
+ python3-dev \
+ python3-venv \
+ ruby \
+ ruby-dev \
+ shared-mime-info \
+ tzdata \
+ unzip
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
# fpm depends on dotenv, but version 3.0 of that gem dropped support for
# Ruby 2.7, so we need to specifically install an older version.
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 2.7 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
- echo "gem: --no-document" >> ~/.gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19 && \
- /usr/local/rvm/bin/rvm-exec default gem install dotenv --version '~> 2.8' && \
- /usr/local/rvm/bin/rvm-exec default gem install fpm --version 1.15.1
+RUN echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '~> 2.4.0' bundler && \
+ gem install dotenv --version '~> 2.8' && \
+ gem install fpm --version 1.15.1 && \
+ bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
-RUN /usr/local/rvm/bin/rvm-exec default bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
# Cf. https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
ENV MAKE "make --jobs $(grep -c processor /proc/cpuinfo)"
-# Preseed the go module cache and the ruby gems, using the currently checked
-# out branch of the source tree. This avoids potential compatibility issues
-# between the version of Ruby and certain gems.
+# Preseed the go module cache.
RUN git clone git://git.arvados.org/arvados.git /tmp/arvados && \
cd /tmp/arvados && \
if [[ -n "${BRANCH}" ]]; then git checkout ${BRANCH}; fi && \
- cd /tmp/arvados/services/api && \
- /usr/local/rvm/bin/rvm-exec default bundle install && \
- cd /tmp/arvados && \
go mod download
ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "ubuntu2004"]
+CMD ["bash", "/jenkins/run-build-packages.sh", "--target", "ubuntu2004"]
SHELL ["/bin/bash", "-c"]
# Install dependencies.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 libcurl4-gnutls-dev libgnutls28-dev curl git libattr1-dev libfuse-dev libpq-dev unzip tzdata python3-venv python3-dev libpam-dev shared-mime-info equivs
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y \
+ build-essential \
+ curl \
+ equivs \
+ git \
+ libattr1-dev \
+ libcurl4-gnutls-dev \
+ libfuse-dev \
+ libgnutls28-dev \
+ libpam-dev \
+ libpq-dev \
+ pkgconf \
+ python3 \
+ python3-dev \
+ python3-venv \
+ ruby \
+ ruby-dev \
+ shared-mime-info \
+ tzdata \
+ unzip
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 3.2.2 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-3.2.2 && \
- echo "gem: --no-document" >> ~/.gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19 && \
- /usr/local/rvm/bin/rvm-exec default gem install fpm --version 1.15.1
+RUN echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '>= 2.4.0' bundler && \
+ gem install fpm --version 1.15.1 && \
+ bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
-RUN /usr/local/rvm/bin/rvm-exec default bundle config --global jobs $(let a=$(grep -c processor /proc/cpuinfo )-1; echo $a)
# Cf. https://build.betterup.com/one-weird-trick-that-will-speed-up-your-bundle-install/
ENV MAKE "make --jobs 8"
-# Preseed the go module cache and the ruby gems, using the currently checked
-# out branch of the source tree. This avoids potential compatibility issues
-# between the version of Ruby and certain gems.
+# Preseed the go module cache.
RUN git clone git://git.arvados.org/arvados.git /tmp/arvados && \
cd /tmp/arvados && \
if [[ -n "${BRANCH}" ]]; then git checkout ${BRANCH}; fi && \
- cd /tmp/arvados/services/api && \
- /usr/local/rvm/bin/rvm-exec default bundle install && \
- cd /tmp/arvados && \
go mod download
-
ENV WORKSPACE /arvados
-CMD ["/usr/local/rvm/bin/rvm-exec", "default", "bash", "/jenkins/run-build-packages.sh", "--target", "ubuntu2204"]
+CMD ["bash", "/jenkins/run-build-packages.sh", "--target", "ubuntu2204"]
*/generated
-common-generated/
+++ /dev/null
-# Copyright (C) The Arvados Authors. All rights reserved.
-#
-# SPDX-License-Identifier: AGPL-3.0
-
-all: debian11/generated
-debian11/generated: common-generated-all
- test -d debian11/generated || mkdir debian11/generated
- cp -f -rlt debian11/generated common-generated/*
-
-all: debian12/generated
-debian12/generated: common-generated-all
- test -d debian12/generated || mkdir debian12/generated
- cp -f -rlt debian12/generated common-generated/*
-
-all: rocky8/generated
-rocky8/generated: common-generated-all
- test -d rocky8/generated || mkdir rocky8/generated
- cp -f -rlt rocky8/generated common-generated/*
-
-all: ubuntu2004/generated
-ubuntu2004/generated: common-generated-all
- test -d ubuntu2004/generated || mkdir ubuntu2004/generated
- cp -f -rlt ubuntu2004/generated common-generated/*
-
-all: ubuntu2204/generated
-ubuntu2204/generated: common-generated-all
- test -d ubuntu2204/generated || mkdir ubuntu2204/generated
- cp -f -rlt ubuntu2204/generated common-generated/*
-
-RVMKEY1=mpapis.asc
-RVMKEY2=pkuczynski.asc
-
-common-generated-all: common-generated/$(RVMKEY1) common-generated/$(RVMKEY2)
-
-common-generated/$(RVMKEY1): common-generated
- wget -cqO common-generated/$(RVMKEY1) https://rvm.io/mpapis.asc
-
-common-generated/$(RVMKEY2): common-generated
- wget -cqO common-generated/$(RVMKEY2) https://rvm.io/pkuczynski.asc
-
-common-generated:
- mkdir common-generated
# Install dependencies
RUN apt-get update && \
- apt-get -y install --no-install-recommends curl ca-certificates gpg procps gpg-agent
-
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 2.7 -j $(grep -c processor /proc/cpuinfo) --disable-binary && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
+ apt-get -y install --no-install-recommends curl ca-certificates gpg procps gpg-agent ruby ruby-dev && \
echo "gem: --no-document" >> /etc/gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19
-
-# udev daemon can't start in a container, so don't try.
-RUN mkdir -p /etc/udev/disabled
-
-RUN echo "deb file:///arvados/packages/debian11/ /" >>/etc/apt/sources.list
+ gem install --conservative --version '~> 2.4.0' bundler && \
+ mkdir -p /etc/udev/disabled && \
+ echo "deb file:///arvados/packages/debian11/ /" >>/etc/apt/sources.list
# Install dependencies
RUN apt-get update && \
- apt-get -y install --no-install-recommends curl ca-certificates gpg procps gpg-agent
-
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 3.2.2 -j $(grep -c processor /proc/cpuinfo) --disable-binary && \
- /usr/local/rvm/bin/rvm alias create default ruby-3.2.2 && \
+ apt-get -y install --no-install-recommends curl ca-certificates gpg procps gpg-agent ruby ruby-dev && \
echo "gem: --no-document" >> /etc/gemrc && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19
-
-# udev daemon can't start in a container, so don't try.
-RUN mkdir -p /etc/udev/disabled
-
-RUN echo "deb file:///arvados/packages/debian12/ /" >>/etc/apt/sources.list
+ gem install --conservative --version '>= 2.4.0' bundler && \
+ mkdir -p /etc/udev/disabled && \
+ echo "deb file:///arvados/packages/debian12/ /" >>/etc/apt/sources.list
#
# SPDX-License-Identifier: AGPL-3.0
-FROM rockylinux:8.6-minimal
+FROM rockylinux:8.8-minimal
MAINTAINER Arvados Package Maintainers <packaging@arvados.org>
# Install dependencies.
-RUN microdnf --assumeyes --enablerepo=devel install \
+RUN microdnf --assumeyes module enable httpd:2.4 postgresql:10 python39:3.9 ruby:3.1 \
+ && microdnf --assumeyes --enablerepo=devel install \
autoconf \
automake \
bison \
make \
openssl-devel \
patch \
+ pkgconf \
procps-ng \
- python3 \
+ python39 \
readline-devel \
+ redhat-rpm-config \
ruby \
+ ruby-devel \
shadow-utils \
sqlite-devel \
tar \
which \
zlib-devel
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
RUN touch /var/lib/rpm/* && \
- gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install --disable-binary 2.7 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19
+ echo "gem: --no-document" >> ~/.gemrc && \
+ gem install --conservative --version '>= 2.4.0' bundler
COPY localrepo.repo /etc/yum.repos.d/localrepo.repo
# Install dependencies
RUN apt-get update && \
- apt-get -y install --no-install-recommends curl ca-certificates gnupg2
-
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 2.7 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-2.7 && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19
-
-# udev daemon can't start in a container, so don't try.
-RUN mkdir -p /etc/udev/disabled
-
-RUN echo "deb [trusted=yes] file:///arvados/packages/ubuntu2004/ /" >>/etc/apt/sources.list
+ apt-get -y install --no-install-recommends curl ca-certificates gnupg2 ruby ruby-dev && \
+ gem install --conservative --version '~> 2.4.0' bundler && \
+ mkdir -p /etc/udev/disabled && \
+ echo "deb [trusted=yes] file:///arvados/packages/ubuntu2004/ /" >>/etc/apt/sources.list
# Install dependencies
RUN apt-get update && \
- apt-get -y install --no-install-recommends curl ca-certificates gnupg2
-
-# Install RVM
-ADD generated/mpapis.asc /tmp/
-ADD generated/pkuczynski.asc /tmp/
-RUN gpg --import --no-tty /tmp/mpapis.asc && \
- gpg --import --no-tty /tmp/pkuczynski.asc && \
- curl -L https://get.rvm.io | bash -s stable && \
- /usr/local/rvm/bin/rvm install 3.2.2 -j $(grep -c processor /proc/cpuinfo) && \
- /usr/local/rvm/bin/rvm alias create default ruby-3.2.2 && \
- /usr/local/rvm/bin/rvm-exec default gem install bundler --version 2.2.19
-
-# udev daemon can't start in a container, so don't try.
-RUN mkdir -p /etc/udev/disabled
-
-RUN echo "deb [trusted=yes] file:///arvados/packages/ubuntu2204/ /" >>/etc/apt/sources.list
+ apt-get -y install --no-install-recommends curl ca-certificates gnupg2 ruby ruby-dev && \
+ gem install --conservative --version '>= 2.4.0' bundler && \
+ mkdir -p /etc/udev/disabled && \
+ echo "deb [trusted=yes] file:///arvados/packages/ubuntu2204/ /" >>/etc/apt/sources.list
;;
esac
-/usr/local/rvm/bin/rvm-exec default bundle list >"$ARV_PACKAGES_DIR/$PACKAGE_NAME.gems"
+bundle list >"$ARV_PACKAGES_DIR/$PACKAGE_NAME.gems"
mkdir -p /tmp/opts
cd /tmp/opts
+# Install other packages alongside to test for build id conflicts.
+# This line can be removed after we have test-provision-rocky8, #21426.
+microdnf --assumeyes install arvados-client arvados-server python3-arvados-python-client
+
rpm2cpio $(ls -t "$ARV_PACKAGES_DIR/$1"-*.rpm | head -n1) | cpio -idm 2>/dev/null
if [[ "$DEBUG" != "0" ]]; then
--- /dev/null
+#!/usr/bin/env python3
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+"""pypkg_info.py - Introspect installed Python packages
+
+This tool can read metadata about any Python package installed in the current
+environment and report it out in various formats. We use this mainly to pass
+information through when building distribution packages.
+"""
+
+import argparse
+import enum
+import importlib.metadata
+import os
+import sys
+
+from pathlib import PurePath
+
+class RawFormat:
+ def format_metadata(self, key, value):
+ return value
+
+ def format_path(self, path):
+ return str(path)
+
+
+class FPMFormat(RawFormat):
+ PYTHON_METADATA_MAP = {
+ 'summary': 'description',
+ }
+
+ def format_metadata(self, key, value):
+ key = key.lower()
+ key = self.PYTHON_METADATA_MAP.get(key, key)
+ return f'--{key}={value}'
+
+
+class Formats(enum.Enum):
+ RAW = RawFormat
+ FPM = FPMFormat
+
+ @classmethod
+ def from_arg(cls, arg):
+ try:
+ return cls[arg.upper()]
+ except KeyError:
+ raise ValueError(f"unknown format {arg!r}") from None
+
+
+def report_binfiles(args):
+ bin_names = [
+ PurePath('bin', path.name)
+ for pkg_name in args.package_names
+ for path in importlib.metadata.distribution(pkg_name).files
+ if path.parts[-3:-1] == ('..', 'bin')
+ ]
+ fmt = args.format.value().format_path
+ return (fmt(path) for path in bin_names)
+
+def report_metadata(args):
+ dist = importlib.metadata.distribution(args.package_name)
+ fmt = args.format.value().format_metadata
+ for key in args.metadata_key:
+ yield fmt(key, dist.metadata.get(key, ''))
+
+def unescape_str(arg):
+ arg = arg.replace('\'', '\\\'')
+ return eval(f"'''{arg}'''", {})
+
+def parse_arguments(arglist=None):
+ parser = argparse.ArgumentParser()
+ parser.set_defaults(action=None)
+ format_names = ', '.join(fmt.name.lower() for fmt in Formats)
+ parser.add_argument(
+ '--format', '-f',
+ choices=list(Formats),
+ default=Formats.RAW,
+ type=Formats.from_arg,
+ help=f"Output format. Choices are: {format_names}",
+ )
+ parser.add_argument(
+ '--delimiter', '-d',
+ default='\n',
+ type=unescape_str,
+ help="Line ending. Python backslash escapes are supported. Default newline.",
+ )
+ subparsers = parser.add_subparsers()
+
+ binfiles = subparsers.add_parser('binfiles')
+ binfiles.set_defaults(action=report_binfiles)
+ binfiles.add_argument(
+ 'package_names',
+ nargs=argparse.ONE_OR_MORE,
+ )
+
+ metadata = subparsers.add_parser('metadata')
+ metadata.set_defaults(action=report_metadata)
+ metadata.add_argument(
+ 'package_name',
+ )
+ metadata.add_argument(
+ 'metadata_key',
+ nargs=argparse.ONE_OR_MORE,
+ )
+
+ args = parser.parse_args()
+ if args.action is None:
+ parser.error("subcommand is required")
+ return args
+
+def main(arglist=None):
+ args = parse_arguments(arglist)
+ try:
+ for line in args.action(args):
+ print(line, end=args.delimiter)
+ except importlib.metadata.PackageNotFoundError as error:
+ print(f"error: package not found: {error.args[0]}", file=sys.stderr)
+ return os.EX_NOTFOUND
+ else:
+ return os.EX_OK
+
+if __name__ == '__main__':
+ exit(main())
DATABASE_READY=1
APPLICATION_READY=1
-if [ -s "$HOME/.rvm/scripts/rvm" ] || [ -s "/usr/local/rvm/scripts/rvm" ]; then
- COMMAND_PREFIX="/usr/local/rvm/bin/rvm-exec default"
-else
- COMMAND_PREFIX=
-fi
-
report_not_ready() {
local ready_flag="$1"; shift
local config_file="$1"; shift
}
prepare_database() {
- DB_MIGRATE_STATUS=`$COMMAND_PREFIX bin/rake db:migrate:status 2>&1 || true`
+ DB_MIGRATE_STATUS=`bin/rake db:migrate:status 2>&1 || true`
if echo "$DB_MIGRATE_STATUS" | grep -qF 'Schema migrations table does not exist yet.'; then
# The database exists, but the migrations table doesn't.
- run_and_report "Setting up database" $COMMAND_PREFIX bin/rake \
+ run_and_report "Setting up database" bin/rake \
"$RAILSPKG_DATABASE_LOAD_TASK" db:seed
elif echo "$DB_MIGRATE_STATUS" | grep -q '^database: '; then
run_and_report "Running db:migrate" \
- $COMMAND_PREFIX bin/rake db:migrate
+ bin/rake db:migrate
elif echo "$DB_MIGRATE_STATUS" | grep -q 'database .* does not exist'; then
if ! run_and_report "Running db:setup" \
- $COMMAND_PREFIX bin/rake db:setup 2>/dev/null; then
+ bin/rake db:setup 2>/dev/null; then
echo "Warning: unable to set up database." >&2
DATABASE_READY=0
fi
cd "$RELEASE_PATH"
export RAILS_ENV=production
- if ! $COMMAND_PREFIX bundle --version >/dev/null 2>&1; then
- run_and_report "Installing bundler" $COMMAND_PREFIX gem install bundler --version 2.2.19 --no-document
+ run_and_report "Installing bundler" gem install --conservative --version '~> 2.4.0' bundler
+ local bundle="$(gem contents --version '~> 2.4.0' bundler | grep '/exe/bundle$' | tail -n1)"
+ if ! [ -x "$bundle" ]; then
+ echo "Error: failed to find \`bundle\` command after installing bundler gem" >&2
+ return 1
fi
+ local bundle_path="$SHARED_PATH/vendor_bundle"
run_and_report "Running bundle config set --local path $SHARED_PATH/vendor_bundle" \
- $COMMAND_PREFIX bin/bundle config set --local path $SHARED_PATH/vendor_bundle
-
- run_and_report "Running bundle install" \
- $COMMAND_PREFIX bin/bundle install --local --quiet
+ "$bundle" config set --local path "$bundle_path"
+
+ # As of April 2024/Bundler 2.4, `bundle install` tends not to install gems
+ # which are already installed system-wide, which causes bundle activation to
+ # fail later. Work around this by installing all gems manually.
+ find vendor/cache -maxdepth 1 -name '*.gem' -print0 \
+ | run_and_report "Installing bundle gems" xargs -0r \
+ gem install --conservative --ignore-dependencies --local --quiet \
+ --install-dir="$bundle_path/ruby/$(ruby -e 'puts RUBY_VERSION')"
+ run_and_report "Running bundle install" "$bundle" install --prefer-local --quiet
+ run_and_report "Verifying bundle is complete" "$bundle" exec true
echo -n "Ensuring directory and file permissions ..."
# Ensure correct ownership of a few files
# warn about config errors (deprecated/removed keys from
# previous version, etc)
run_and_report "Checking configuration for completeness" \
- $COMMAND_PREFIX bin/rake config:check || APPLICATION_READY=0
+ bin/rake config:check || APPLICATION_READY=0
else
APPLICATION_READY=0
fi
else
IMAGE="arvados/build:$TARGET"
if [[ "$COMMAND" != "" ]]; then
- COMMAND="/usr/local/rvm/bin/rvm-exec default bash /jenkins/$COMMAND --target $TARGET$DEBUG"
+ COMMAND="bash /jenkins/$COMMAND --target $TARGET$DEBUG"
fi
fi
if [[ "$SKIP_DOCKER_BUILD" != 1 ]] ; then
if [[ -n "$test_packages" ]]; then
- pushd "$JENKINS_DIR/package-test-dockerfiles"
- make "$TARGET/generated"
+ pushd "$JENKINS_DIR/package-test-dockerfiles"
else
- pushd "$JENKINS_DIR/package-build-dockerfiles"
- make "$TARGET/generated"
+ pushd "$JENKINS_DIR/package-build-dockerfiles"
+ make "$TARGET/generated"
fi
GOVERSION=$(grep 'const goversion =' $WORKSPACE/lib/install/deps.go |awk -F'"' '{print $2}')
docker_volume_args=(
-v "$JENKINS_DIR:/jenkins"
-v "$WORKSPACE:/arvados"
- -v /arvados/services/api/vendor/bundle
+ --tmpfs /arvados/services/api/.bundle:rw,noexec,nosuid,size=1m
+ --tmpfs /arvados/services/api/vendor:rw,exec,nosuid,size=1g
-v "$WORKSPACE/services/api/vendor/cache-$TARGET:/arvados/services/api/vendor/cache"
)
exit 0
fi
-if [[ -f /etc/profile.d/rvm.sh ]]; then
- source /etc/profile.d/rvm.sh
- GEM="rvm-exec default gem"
-else
- GEM=gem
-fi
-
# Make all files world-readable -- jenkins runs with umask 027, and has checked
# out our git tree here
chmod o+r "$WORKSPACE" -R
fi
if [[ "$COMMAND" != "" ]]; then
- COMMAND="/usr/local/rvm/bin/rvm-exec default bash /jenkins/$COMMAND --target $TARGET"
+ COMMAND="bash /jenkins/$COMMAND --target $TARGET"
fi
STDOUT_IF_DEBUG=/dev/null
debug_echo "$0 is running from $RUN_BUILD_PACKAGES_PATH"
debug_echo "Workspace is $WORKSPACE"
-if [[ -f /etc/profile.d/rvm.sh ]]; then
- source /etc/profile.d/rvm.sh
- GEM="rvm-exec default gem"
-else
- GEM=gem
-fi
-
# Make all files world-readable -- jenkins runs with umask 027, and has checked
# out our git tree here
chmod o+r "$WORKSPACE" -R
# Ruby gems
debug_echo -e "\nRuby gems\n"
-FPM_GEM_PREFIX=$($GEM environment gemdir)
+FPM_GEM_PREFIX=$(gem environment gemdir)
cd "$WORKSPACE/sdk/ruby" || exit 1
handle_ruby_gem arvados
# Python packages
debug_echo -e "\nPython packages\n"
-# The Python SDK - Python3 package
+# Before a Python package can be built, its dependencies must already be built.
+# This list is ordered accordingly.
+setup_build_virtualenv
+fpm_build_virtualenv cwltest "==2.3.20230108193615" "$FORMAT" "$ARCH"
fpm_build_virtualenv "arvados-python-client" "sdk/python" "$FORMAT" "$ARCH"
-
-# Arvados cwl runner - Python3 package
-fpm_build_virtualenv "arvados-cwl-runner" "sdk/cwl" "$FORMAT" "$ARCH"
-
-# The FUSE driver - Python3 package
-fpm_build_virtualenv "arvados-fuse" "services/fuse" "$FORMAT" "$ARCH"
-
-# The Arvados crunchstat-summary tool
fpm_build_virtualenv "crunchstat-summary" "tools/crunchstat-summary" "$FORMAT" "$ARCH"
-
-# The Docker image cleaner
+fpm_build_virtualenv "arvados-cwl-runner" "sdk/cwl" "$FORMAT" "$ARCH"
fpm_build_virtualenv "arvados-docker-cleaner" "services/dockercleaner" "$FORMAT" "$ARCH"
-
-# The Arvados user activity tool
+fpm_build_virtualenv "arvados-fuse" "services/fuse" "$FORMAT" "$ARCH"
fpm_build_virtualenv "arvados-user-activity" "tools/user-activity" "$FORMAT" "$ARCH"
-# The cwltest package, which lives out of tree
-handle_cwltest "$FORMAT" "$ARCH"
-
# Workbench2
package_workbench2
find -maxdepth 1 -name "${gem_name}-*.gem" -delete
# -q appears to be broken in gem version 2.2.2
- $GEM build "$gem_name.gemspec" $DASHQ_UNLESS_DEBUG >"$STDOUT_IF_DEBUG" 2>"$STDERR_IF_DEBUG"
+ gem build "$gem_name.gemspec" $DASHQ_UNLESS_DEBUG >"$STDOUT_IF_DEBUG" 2>"$STDERR_IF_DEBUG"
fi
}
local src=services/workbench2
local dst=/var/www/arvados-workbench2/workbench2
local description="Arvados Workbench 2"
- local version="$(version_from_git)"
+ if [[ -n "$ONLY_BUILD" ]] && [[ "$pkgname" != "$ONLY_BUILD" ]] ; then
+ return 0
+ fi
cd "$WORKSPACE/$src"
+ local version="$(version_from_git)"
rm -rf ./build
NODE_ENV=production yarn install
VERSION="$version" BUILD_NUMBER="$(default_iteration "$pkgname" "$version" yarn)" GIT_COMMIT="$(git rev-parse HEAD | head -c9)" yarn build
binpath="$GOPATH/bin/linux_${target_arch}/${basename}"
fi
+ case "$package_format" in
+ # As of April 2024 we package identical Go binaries under different
+ # packages and names. This upsets the build id database, so don't
+ # register ourselves there.
+ rpm) switches+=(--rpm-rpmbuild-define="_build_id_links none") ;;
+ esac
+
systemd_unit="$WORKSPACE/${src_path}/${prog}.service"
if [[ -e "${systemd_unit}" ]]; then
switches+=(
cd "$srcdir"
mkdir -p tmp
git rev-parse HEAD >git-commit.version
+ # Please make sure you read `bundle help config` carefully before you
+ # modify any of these settings. Some of their names are not intuitive.
+ #
+ # `bundle cache` caches from Git and paths, not just rubygems.org.
bundle config set cache_all true
- bundle package
+ # Disallow changes to Gemfile.
+ bundle config set deployment true
+ # Avoid loading system-wide gems (although this seems to not work 100%).
+ bundle config set disable_shared_gems true
+ # `bundle cache` only downloads gems, doesn't install them.
+ # Our Rails postinst script does the install step.
+ bundle config set no_install true
+ # As of April 2024/Bundler 2.4, `bundle cache` seems to skip downloading
+ # gems that are already available system-wide... and then it complains
+ # that your bundle is incomplete. Work around this by fetching gems
+ # manually.
+ # TODO: Once all our supported distros have Ruby 3+, we can modify
+ # the awk script to print "NAME:VERSION" output, and pipe that directly
+ # to `xargs -0r gem fetch` for reduced overhead.
+ mkdir -p vendor/cache
+ awk -- '
+BEGIN { OFS="\0"; ORS="\0"; }
+(/^[A-Z ]*$/) { level1=$0; }
+(/^ [[:alpha:]]+:$/) { level2=substr($0, 3, length($0) - 3); next; }
+(/^ {0,3}[[:alpha:]]/) { level2=""; next; }
+(level1 == "GEM" && level2 == "specs" && NF == 2 && $1 ~ /^[[:alpha:]][-_[:alnum:]]*$/ && $2 ~ /\([[:digit:]]+[-_+.[:alnum:]]*\)$/) {
+ print "--version", substr($2, 2, length($2) - 2), $1;
+}
+' Gemfile.lock | env -C vendor/cache xargs -0r --max-args=3 gem fetch
+ # Despite the bug, we still run `bundle cache` to make sure Bundler is
+ # happy for later steps.
+ bundle cache
)
if [[ 0 != "$?" ]] || ! cd "$WORKSPACE/packages/$TARGET"; then
echo "ERROR: $pkgname package prep failed" >&2
fi
}
-# Usage: handle_cwltest [deb|rpm] [amd64|arm64]
-handle_cwltest () {
- local package_format="$1"; shift
- local target_arch="${1:-amd64}"; shift
-
- if [[ -n "$ONLY_BUILD" ]] && [[ "$ONLY_BUILD" != "python3-cwltest" ]] ; then
- debug_echo -e "Skipping build of cwltest package."
- return 0
- fi
- cd "$WORKSPACE"
- if [[ -e "$WORKSPACE/cwltest" ]]; then
- rm -rf "$WORKSPACE/cwltest"
- fi
- git clone https://github.com/common-workflow-language/cwltest.git
-
- # The subsequent release of cwltest confirms that files exist on disk, since
- # our files are in Keep, all the tests fail.
- # We should add [optional] Arvados support to cwltest so it can access
- # Keep but for the time being just package the last working version.
- (cd cwltest && git checkout 2.3.20230108193615)
-
- # signal to our build script that we want a cwltest executable installed in /usr/bin/
- mkdir cwltest/bin && touch cwltest/bin/cwltest
- fpm_build_virtualenv "cwltest" "cwltest" "$package_format" "$target_arch"
- cd "$WORKSPACE"
- rm -rf "$WORKSPACE/cwltest"
-}
-
# Usage: handle_arvados_src
handle_arvados_src () {
if [[ -n "$ONLY_BUILD" ]] && [[ "$ONLY_BUILD" != "arvados-src" ]] ; then
)
}
+setup_build_virtualenv() {
+ PYTHON_BUILDROOT="$(mktemp --directory --tmpdir pybuild.XXXXXXXX)"
+ "$PYTHON3_EXECUTABLE" -m venv "$PYTHON_BUILDROOT/venv"
+ "$PYTHON_BUILDROOT/venv/bin/pip" install --upgrade build piprepo setuptools wheel
+ mkdir "$PYTHON_BUILDROOT/wheelhouse"
+}
+
# Build python packages with a virtualenv built-in
# Usage: fpm_build_virtualenv arvados-python-client sdk/python [deb|rpm] [amd64|arm64]
fpm_build_virtualenv () {
local target_arch="${1:-amd64}"; shift
native_arch=$(get_native_arch)
-
- if [[ "$pkg" != "arvados-docker-cleaner" ]]; then
- PYTHON_PKG=$PYTHON3_PKG_PREFIX-$pkg
- else
- # Exception to our package naming convention
- PYTHON_PKG=$pkg
- fi
-
- if [[ -n "$ONLY_BUILD" ]] && [[ "$PYTHON_PKG" != "$ONLY_BUILD" ]]; then
- # arvados-python-client sdist should always be built if we are building a
- # python package.
- if [[ "$ONLY_BUILD" != "python3-arvados-cwl-runner" ]] &&
- [[ "$ONLY_BUILD" != "python3-arvados-fuse" ]] &&
- [[ "$ONLY_BUILD" != "python3-crunchstat-summary" ]] &&
- [[ "$ONLY_BUILD" != "arvados-docker-cleaner" ]] &&
- [[ "$ONLY_BUILD" != "python3-arvados-user-activity" ]]; then
- debug_echo -e "Skipping build of $pkg package."
- return 0
- fi
- fi
-
if [[ -n "$target_arch" ]] && [[ "$native_arch" == "$target_arch" ]]; then
fpm_build_virtualenv_worker "$pkg" "$pkg_dir" "$package_format" "$native_arch" "$target_arch"
elif [[ -z "$target_arch" ]]; then
PYTHON_PKG=$PKG
fi
- cd $WORKSPACE/$PKG_DIR
+ # We must always add a wheel to our repository, even if we're not building
+ # this distro package, because it might be a dependency for a later
+ # package we do build.
+ if [[ "$PKG_DIR" =~ ^.=[0-9]+\. ]]; then
+ # Not source to build, but a version to download.
+ # The rest of the function expects a filesystem path, so set one afterwards.
+ "$PYTHON_BUILDROOT/venv/bin/pip" download --dest="$PYTHON_BUILDROOT/wheelhouse" "$PKG$PKG_DIR" \
+ && PKG_DIR="$PYTHON_BUILDROOT/nonexistent"
+ else
+ # Make PKG_DIR absolute.
+ PKG_DIR="$(env -C "$WORKSPACE" readlink -e "$PKG_DIR")"
+ if [[ -e "$PKG_DIR/pyproject.toml" ]]; then
+ "$PYTHON_BUILDROOT/venv/bin/python" -m build --outdir="$PYTHON_BUILDROOT/wheelhouse" "$PKG_DIR"
+ else
+ env -C "$PKG_DIR" "$PYTHON_BUILDROOT/venv/bin/python" setup.py bdist_wheel --dist-dir="$PYTHON_BUILDROOT/wheelhouse"
+ fi
+ fi
+ if [[ $? -ne 0 ]]; then
+ printf "Error, unable to download/build wheel for %s @ %s" "$PKG" "$PKG_DIR"
+ exit 1
+ elif ! "$PYTHON_BUILDROOT/venv/bin/piprepo" build "$PYTHON_BUILDROOT/wheelhouse"; then
+ printf "Error, unable to update local wheel repository"
+ exit 1
+ fi
+
+ if [[ -n "$ONLY_BUILD" ]] && [[ "$PYTHON_PKG" != "$ONLY_BUILD" ]] && [[ "$PKG" != "$ONLY_BUILD" ]]; then
+ return 0
+ fi
- rm -rf dist/*
- local venv_dir="dist/build/usr/lib/$PYTHON_PKG"
+ local venv_dir="$PYTHON_BUILDROOT/$PYTHON_PKG"
echo "Creating virtualenv..."
if ! "$PYTHON3_EXECUTABLE" -m venv "$venv_dir"; then
printf "Error, unable to run\n %s -m venv %s\n" "$PYTHON3_EXECUTABLE" "$venv_dir"
exit 1
- fi
-
- local venv_py="$venv_dir/bin/python$PYTHON3_VERSION"
- if ! "$venv_py" -m pip install --upgrade $DASHQ_UNLESS_DEBUG $CACHE_FLAG pip setuptools wheel; then
- printf "Error, unable to upgrade pip, setuptools, and wheel with
- %s -m pip install --upgrade $DASHQ_UNLESS_DEBUG $CACHE_FLAG pip setuptools wheel
-" "$venv_py"
+ # We must have the dependency resolver introduced in late 2020 for the rest
+ # of our install process to work.
+ # <https://blog.python.org/2020/11/pip-20-3-release-new-resolver.html>
+ elif ! "$venv_dir/bin/pip" install "pip>=20.3"; then
+ printf "Error, unable to run\n %s/bin/pip install 'pip>=20.3'\n" "$venv_dir"
exit 1
fi
- # filter a useless warning (when building the cwltest package) from the stderr output
- if ! "$venv_py" setup.py $DASHQ_UNLESS_DEBUG sdist 2> >(grep -v 'warning: no previously-included files matching'); then
- echo "Error, unable to run $venv_py setup.py sdist for $PKG"
+ local pip_wheel="$(ls --sort=time --reverse "$PYTHON_BUILDROOT/wheelhouse/$(echo "$PKG" | sed s/-/_/g)-"*.whl | tail -n1)"
+ if [[ -z "$pip_wheel" ]]; then
+ printf "Error, unable to find built wheel for $PKG"
+ exit 1
+ elif ! "$venv_dir/bin/pip" install $DASHQ_UNLESS_DEBUG $CACHE_FLAG --extra-index-url="file://$PYTHON_BUILDROOT/wheelhouse/simple" "$pip_wheel"; then
+ printf "Error, unable to run
+ %s/bin/pip install $DASHQ_UNLESS_DEBUG $CACHE_FLAG --extra-index-url=file://%s %s
+" "$venv_dir" "$PYTHON_BUILDROOT/wheelhouse/simple" "$pip_wheel"
exit 1
fi
- if [[ "arvados-python-client" == "$PKG" ]]; then
- PYSDK_PATH="-f $(pwd)/dist/"
- fi
-
- if [[ -n "$ONLY_BUILD" ]] && [[ "$PYTHON_PKG" != "$ONLY_BUILD" ]] && [[ "$PKG" != "$ONLY_BUILD" ]]; then
- return 0
- fi
-
- # Determine the package version from the generated sdist archive
- if [[ -n "$ARVADOS_BUILDING_VERSION" ]] ; then
- UNFILTERED_PYTHON_VERSION=$ARVADOS_BUILDING_VERSION
- PYTHON_VERSION=$(echo -n $ARVADOS_BUILDING_VERSION | sed s/~dev/.dev/g | sed s/~rc/rc/g)
- else
- PYTHON_VERSION=$(awk '($1 == "Version:"){print $2}' *.egg-info/PKG-INFO)
- UNFILTERED_PYTHON_VERSION=$(echo -n $PYTHON_VERSION | sed s/\.dev/~dev/g |sed 's/\([0-9]\)rc/\1~rc/g')
- fi
+ # Determine the package version from the wheel
+ PYTHON_VERSION="$("$venv_dir/bin/python" "$WORKSPACE/build/pypkg_info.py" metadata "$PKG" Version)"
+ UNFILTERED_PYTHON_VERSION="$(echo "$PYTHON_VERSION" | sed 's/\.dev/~dev/; s/\([0-9]\)rc/\1~rc/')"
# See if we actually need to build this package; does it exist already?
# We can't do this earlier than here, because we need PYTHON_VERSION.
if ! test_package_presence "$PYTHON_PKG" "$UNFILTERED_PYTHON_VERSION" python3 "$ARVADOS_BUILDING_ITERATION" "$target_arch"; then
return 0
fi
-
echo "Building $package_format ($target_arch) package for $PKG from $PKG_DIR"
- local sdist_path="$(ls dist/*.tar.gz)"
- if ! "$venv_py" -m pip install $DASHQ_UNLESS_DEBUG $CACHE_FLAG $PYSDK_PATH "$sdist_path"; then
- printf "Error, unable to run
- %s -m pip install $DASHQ_UNLESS_DEBUG $CACHE_FLAG %s %s
-" "$venv_py" "$PYSDK_PATH" "$sdist_path"
- exit 1
- fi
-
- pushd "$venv_dir" >$STDOUT_IF_DEBUG
-
# Replace the shebang lines in all python scripts, and handle the activate
# scripts too. This is a functional replacement of the 237 line
# virtualenv_tools.py script that doesn't work in python3 without serious
# patching, minus the parts we don't need (modifying pyc files, etc).
- local sys_venv_dir="${venv_dir#dist/build/}"
+ local sys_venv_dir="/usr/lib/$PYTHON_PKG"
local sys_venv_py="$sys_venv_dir/bin/python$PYTHON3_VERSION"
- for binfile in `ls bin/`; do
- if file --mime "bin/$binfile" | grep -q binary; then
+ find "$venv_dir/bin" -type f | while read binfile; do
+ if file --mime "$binfile" | grep -q binary; then
: # Nothing to do for binary files
- elif [[ "$binfile" =~ ^activate(.csh|.fish|)$ ]]; then
- sed -ri "s@VIRTUAL_ENV(=| )\".*\"@VIRTUAL_ENV\\1\"/$sys_venv_dir\"@" "bin/$binfile"
+ elif [[ "$binfile" =~ /activate(.csh|.fish|)$ ]]; then
+ sed -ri "s@VIRTUAL_ENV(=| )\".*\"@VIRTUAL_ENV\\1\"$sys_venv_dir\"@" "$binfile"
else
# Replace shebang line
- sed -ri "1 s@^#\![^[:space:]]+/bin/python[0-9.]*@#\!/$sys_venv_py@" "bin/$binfile"
+ sed -ri "1 s@^#\![^[:space:]]+/bin/python[0-9.]*@#\!$sys_venv_py@" "$binfile"
fi
done
- popd >$STDOUT_IF_DEBUG
- cd dist
-
- find build -iname '*.py[co]' -delete
-
- # Finally, generate the package
- echo "Creating package..."
-
- declare -a COMMAND_ARR=("fpm" "-s" "dir" "-t" "$package_format")
+ # Using `env -C` sets the directory where the package is built.
+ # Using `fpm --chdir` sets the root directory for source arguments.
+ declare -a COMMAND_ARR=(
+ env -C "$PYTHON_BUILDROOT" fpm
+ --chdir="$venv_dir"
+ --name="$PYTHON_PKG"
+ --version="$UNFILTERED_PYTHON_VERSION"
+ --input-type=dir
+ --output-type="$package_format"
+ --depends="$PYTHON3_PACKAGE"
+ --iteration="$ARVADOS_BUILDING_ITERATION"
+ --replaces="python-$PKG"
+ --url="https://arvados.org"
+ )
+ # Append fpm flags corresponding to Python package metadata.
+ readarray -d "" -O "${#COMMAND_ARR[@]}" -t COMMAND_ARR < \
+ <("$venv_dir/bin/python3" "$WORKSPACE/build/pypkg_info.py" \
+ --delimiter=\\0 --format=fpm \
+ metadata "$PKG" License Summary)
if [[ -n "$target_arch" ]] && [[ "$target_arch" != "amd64" ]]; then
COMMAND_ARR+=("-a$target_arch")
COMMAND_ARR+=('--vendor' "$VENDOR")
fi
- COMMAND_ARR+=('--url' 'https://arvados.org')
-
- # Get description
- DESCRIPTION=`grep '\sdescription' $WORKSPACE/$PKG_DIR/setup.py|cut -f2 -d=|sed -e "s/[',\\"]//g"`
- COMMAND_ARR+=('--description' "$DESCRIPTION")
-
- # Get license string
- LICENSE_STRING=`grep license $WORKSPACE/$PKG_DIR/setup.py|cut -f2 -d=|sed -e "s/[',\\"]//g"`
- COMMAND_ARR+=('--license' "$LICENSE_STRING")
-
if [[ "$DEBUG" != "0" ]]; then
COMMAND_ARR+=('--verbose' '--log' 'info')
fi
- COMMAND_ARR+=('-v' $(echo -n "$PYTHON_VERSION" | sed s/.dev/~dev/g | sed s/rc/~rc/g))
- COMMAND_ARR+=('--iteration' "$ARVADOS_BUILDING_ITERATION")
- COMMAND_ARR+=('-n' "$PYTHON_PKG")
- COMMAND_ARR+=('-C' "build")
-
- systemd_unit="$WORKSPACE/$PKG_DIR/$PKG.service"
+ systemd_unit="$PKG_DIR/$PKG.service"
if [[ -e "${systemd_unit}" ]]; then
COMMAND_ARR+=('--after-install' "${WORKSPACE}/build/go-python-package-scripts/postinst")
COMMAND_ARR+=('--before-remove' "${WORKSPACE}/build/go-python-package-scripts/prerm")
fi
- COMMAND_ARR+=('--depends' "$PYTHON3_PACKAGE")
case "$package_format" in
deb)
COMMAND_ARR+=(
declare -a fpm_args=()
declare -a fpm_depends=()
- fpminfo="$WORKSPACE/$PKG_DIR/fpm-info.sh"
+ fpminfo="$PKG_DIR/fpm-info.sh"
if [[ -e "$fpminfo" ]]; then
echo "Loading fpm overrides from $fpminfo"
if ! source "$fpminfo"; then
COMMAND_ARR+=('--depends' "$i")
done
- for i in "${fpm_depends[@]}"; do
- COMMAND_ARR+=('--replaces' "python-$PKG")
- done
-
# make sure the systemd service file ends up in the right place
# used by arvados-docker-cleaner
if [[ -e "${systemd_unit}" ]]; then
- COMMAND_ARR+=("$sys_venv_dir/share/doc/$PKG/$PKG.service=/lib/systemd/system/$PKG.service")
+ COMMAND_ARR+=("share/doc/$PKG/$PKG.service=/lib/systemd/system/$PKG.service")
fi
COMMAND_ARR+=("${fpm_args[@]}")
- # Make sure to install all our package binaries in /usr/bin. We have to
- # walk $WORKSPACE/$PKG_DIR/bin rather than $venv_dir/bin to get the list
- # because the latter also includes scripts installed by all the
- # dependencies in the virtualenv, which may conflict with other
- # packages. We have to take the copies of our binaries from the latter
- # directory, though, because those are the ones we rewrote the shebang
- # line of, above.
- if [[ -e "$WORKSPACE/$PKG_DIR/bin" ]]; then
- for binary in `ls $WORKSPACE/$PKG_DIR/bin`; do
- COMMAND_ARR+=("$sys_venv_dir/bin/$binary=/usr/bin/")
- done
- fi
+ while read -d "" binpath; do
+ COMMAND_ARR+=("$binpath=/usr/$binpath")
+ done < <("$venv_dir/bin/python3" "$WORKSPACE/build/pypkg_info.py" --delimiter=\\0 binfiles "$PKG")
# the python3-arvados-cwl-runner package comes with cwltool, expose that version
- if [[ -e "$WORKSPACE/$PKG_DIR/$venv_dir/bin/cwltool" ]]; then
- COMMAND_ARR+=("$sys_venv_dir/bin/cwltool=/usr/bin/")
+ if [[ "$PKG" == arvados-cwl-runner ]]; then
+ COMMAND_ARR+=("bin/cwltool=/usr/bin/cwltool")
fi
- COMMAND_ARR+=(".")
+ COMMAND_ARR+=(".=$sys_venv_dir")
debug_echo -e "\n${COMMAND_ARR[@]}\n"
echo
echo -e "\n${COMMAND_ARR[@]}\n"
else
- echo `ls *$package_format`
- mv $WORKSPACE/$PKG_DIR/dist/*$package_format $WORKSPACE/packages/$TARGET/
+ ls "$PYTHON_BUILDROOT"/*."$package_format"
+ mv "$PYTHON_BUILDROOT"/*."$package_format" "$WORKSPACE/packages/$TARGET/"
fi
echo
}
|| fatal "Locale '${LANG}' is broken/missing. Try: echo ${LANG} | sudo tee -a /etc/locale.gen && sudo locale-gen"
echo -n 'ruby: '
ruby -v \
- || fatal "No ruby. Install >=2.1.9 (using rbenv, rvm, or source)"
+ || fatal "No ruby. Install >=2.7 from package or source"
echo -n 'go: '
go version \
|| fatal "No go binary. See http://golang.org/doc/install"
trap interrupt INT
setup_ruby_environment() {
- if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
- source "$HOME/.rvm/scripts/rvm"
- using_rvm=true
- elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then
- source "/usr/local/rvm/scripts/rvm"
- using_rvm=true
- else
- using_rvm=false
- fi
-
- if [[ "$using_rvm" == true ]]; then
- # If rvm is in use, we can't just put separate "dependencies"
- # and "gems-under-test" paths to GEM_PATH: passenger resets
- # the environment to the "current gemset", which would lose
- # our GEM_PATH and prevent our test suites from running ruby
- # programs (for example, the Workbench test suite could not
- # boot an API server or run arv). Instead, we have to make an
- # rvm gemset and use it for everything.
-
- [[ `type rvm | head -n1` == "rvm is a function" ]] \
- || fatal 'rvm check'
-
- # Put rvm's favorite path back in first place (overriding
- # virtualenv, which just put itself there). Ignore rvm's
- # complaint about not being in first place already.
- rvm use @default 2>/dev/null
-
- # Create (if needed) and switch to an @arvados-tests-* gemset,
- # salting the gemset name so it doesn't interfere with
- # concurrent builds in other workspaces. Leave the choice of
- # ruby to the caller.
- gemset="arvados-tests-$(echo -n "${WORKSPACE}" | md5sum | head -c16)"
- rvm use "@${gemset}" --create \
- || fatal 'rvm gemset setup'
-
- rvm env
- (bundle version | grep -q 2.2.19) || gem install --no-document bundler -v 2.2.19
- bundle="$(which bundle)"
- echo "$bundle"
- "$bundle" version | grep 2.2.19 || fatal 'install bundler'
- else
- # When our "bundle install"s need to install new gems to
- # satisfy dependencies, we want them to go where "gem install
- # --user-install" would put them. (However, if the caller has
- # already set GEM_HOME, we assume that's where dependencies
- # should be installed, and we should leave it alone.)
-
- if [ -z "$GEM_HOME" ]; then
- user_gempath="$(gem env gempath)"
- export GEM_HOME="${user_gempath%%:*}"
- fi
- PATH="$(gem env gemdir)/bin:$PATH"
-
- # When we build and install our own gems, we install them in our
- # $GEMHOME tmpdir, and we want them to be at the front of GEM_PATH and
- # PATH so integration tests prefer them over other versions that
- # happen to be installed in $user_gempath, system dirs, etc.
-
- tmpdir_gem_home="$(env - PATH="$PATH" HOME="$GEMHOME" gem env gempath | cut -f1 -d:)"
- PATH="$tmpdir_gem_home/bin:$PATH"
- export GEM_PATH="$tmpdir_gem_home:$(gem env gempath)"
-
- echo "Will install dependencies to $(gem env gemdir)"
- echo "Will install bundler and arvados gems to $tmpdir_gem_home"
- echo "Gem search path is GEM_PATH=$GEM_PATH"
- bundle="bundle"
- (
- export HOME=$GEMHOME
- versions=(2.2.19)
- for v in ${versions[@]}; do
- if ! gem list --installed --version "${v}" bundler >/dev/null; then
- gem install --no-document --user $(for v in ${versions[@]}; do echo bundler:${v}; done)
- break
- fi
- done
- "$bundle" version | tee /dev/stderr | grep -q 'version 2'
- ) || fatal 'install bundler'
- if test -d /var/lib/arvados-arvbox/ ; then
- # Inside arvbox, use bundler-installed binstubs. The
- # system bundler and rail's own bin/bundle refuse to work.
- # I don't know why.
- bundle=binstubs/bundle
- fi
+ # When our "bundle install"s need to install new gems to
+ # satisfy dependencies, we want them to go where "gem install
+ # --user-install" would put them. (However, if the caller has
+ # already set GEM_HOME, we assume that's where dependencies
+ # should be installed, and we should leave it alone.)
+
+ if [ -z "$GEM_HOME" ]; then
+ user_gempath="$(gem env gempath)"
+ export GEM_HOME="${user_gempath%%:*}"
fi
+ PATH="$(gem env gemdir)/bin:$PATH"
+
+ # When we build and install our own gems, we install them in our
+ # $GEMHOME tmpdir, and we want them to be at the front of GEM_PATH and
+ # PATH so integration tests prefer them over other versions that
+ # happen to be installed in $user_gempath, system dirs, etc.
+
+ tmpdir_gem_home="$(env - PATH="$PATH" HOME="$GEMHOME" gem env gempath | cut -f1 -d:)"
+ PATH="$tmpdir_gem_home/bin:$PATH"
+ export GEM_PATH="$tmpdir_gem_home:$(gem env gempath)"
+
+ echo "Will install dependencies to $(gem env gemdir)"
+ echo "Will install bundler and arvados gems to $tmpdir_gem_home"
+ echo "Gem search path is GEM_PATH=$GEM_PATH"
+ gem install --user --no-document --conservative --version '~> 2.4.0' bundler \
+ || fatal 'install bundler'
}
with_test_gemset() {
- if [[ "$using_rvm" == true ]]; then
- "$@"
- else
- GEM_HOME="$tmpdir_gem_home" GEM_PATH="$tmpdir_gem_home" "$@"
- fi
+ GEM_HOME="$tmpdir_gem_home" GEM_PATH="$tmpdir_gem_home" "$@"
}
gem_uninstall_if_exists() {
unset http_proxy https_proxy no_proxy
- # Note: this must be the last time we change PATH, otherwise rvm will
- # whine a lot.
setup_ruby_environment
echo "PATH is $PATH"
setup_virtualenv "$VENV3DIR"
. "$VENV3DIR/bin/activate"
+ # wheel modernizes the venv (as of early 2024) and makes it more closely
+ # match our package build environment.
# PyYAML is a test requirement used by run_test_server.py and needed for
# other, non-Python tests.
# pdoc is needed to build PySDK documentation.
# We run `setup.py build` first to generate _version.py.
- env -C "$WORKSPACE/sdk/python" python3 setup.py build \
- && python3 -m pip install "$WORKSPACE/sdk/python" \
- && python3 -m pip install PyYAML pdoc \
+ pip install PyYAML pdoc wheel \
+ && env -C "$WORKSPACE/sdk/python" python3 setup.py build \
+ && pip install "$WORKSPACE/sdk/python" \
|| fatal "installing Python SDK and related dependencies failed"
}
check_arvados_config "$1"
;;
gofmt \
+ | arvados_version.py \
| cmd/arvados-package \
| doc \
| lib/boot \
(
set -e
echo "(Running bundle install --local. 'could not find package' messages are OK.)"
- if ! "$bundle" install --local --no-deployment; then
+ if ! bundle install --local --no-deployment; then
echo "(Running bundle install again, without --local.)"
- "$bundle" install --no-deployment
+ bundle install --no-deployment
fi
- "$bundle" package
+ bundle package
)
}
test_doc() {
local arvados_api_host=pirca.arvadosapi.com && \
env -C "$WORKSPACE/doc" \
- "$bundle" exec rake linkchecker \
+ bundle exec rake linkchecker \
arvados_api_host="$arvados_api_host" \
arvados_workbench_host="https://workbench.$arvados_api_host" \
baseurl="file://$WORKSPACE/doc/.site/" \
go vet -composites=false ./...
}
+test_arvados_version.py() {
+ local orig_fn=""
+ local fail_count=0
+ while read -d "" fn; do
+ if [[ -z "$orig_fn" ]]; then
+ orig_fn="$fn"
+ elif ! cmp "$orig_fn" "$fn"; then
+ fail_count=$(( $fail_count + 1 ))
+ printf "FAIL: %s and %s are not identical\n" "$orig_fn" "$fn"
+ fi
+ done < <(git -C "$WORKSPACE" ls-files -z | grep -z '/arvados_version\.py$')
+ case "$orig_fn" in
+ "") return 66 ;; # EX_NOINPUT
+ *) return "$fail_count" ;;
+ esac
+}
+
test_services/api() {
rm -f "$WORKSPACE/services/api/git-commit.version"
cd "$WORKSPACE/services/api" \
- && eval env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} "$bundle" exec rake test TESTOPTS=\'-v -d\' ${testargs[services/api]}
+ && eval env RAILS_ENV=test ${short:+RAILS_TEST_SHORT=1} bundle exec rake test TESTOPTS=\'-v -d\' ${testargs[services/api]}
}
test_sdk/ruby() {
cd "$WORKSPACE/sdk/ruby" \
- && "$bundle" exec rake test TESTOPTS=-v ${testargs[sdk/ruby]}
+ && bundle exec rake test TESTOPTS=-v ${testargs[sdk/ruby]}
}
test_sdk/ruby-google-api-client() {
test_sdk/cli() {
cd "$WORKSPACE/sdk/cli" \
&& mkdir -p /tmp/keep \
- && KEEP_LOCAL_STORE=/tmp/keep "$bundle" exec rake test TESTOPTS=-v ${testargs[sdk/cli]}
+ && KEEP_LOCAL_STORE=/tmp/keep bundle exec rake test TESTOPTS=-v ${testargs[sdk/cli]}
}
test_sdk/java-v2() {
test_services/login-sync() {
cd "$WORKSPACE/services/login-sync" \
- && "$bundle" exec rake test TESTOPTS=-v ${testargs[services/login-sync]}
+ && bundle exec rake test TESTOPTS=-v ${testargs[services/login-sync]}
}
test_services/workbench2_units() {
# Install parts needed by test suites
do_install env
do_install cmd/arvados-server go
- do_install sdk/python pip "${VENV3DIR}/bin/"
do_install tools/crunchstat-summary pip "${VENV3DIR}/bin/"
do_install sdk/ruby-google-api-client
do_install sdk/ruby
fi
do_test gofmt
+ do_test arvados_version.py
do_test doc
do_test sdk/ruby-google-api-client
do_test sdk/ruby
Ruby 2.7 or newer is required.
-* "Option 1: Install from packages":#packages
-* "Option 2: Install with RVM":#rvm
-
-h2(#packages). Option 1: Install from packages
-
-h3. Alma/CentOS/Red Hat/Rocky
-
-Version 7 of these distributions does not provide a new enough Ruby version. Use "RVM":#rvm to install Ruby 2.7 or newer.
+h2. Alma/CentOS/Red Hat/Rocky
Version 8 of these distributions provides Ruby 2.7. You can install it by running:
# <span class="userinput">dnf install --enablerepo=devel ruby ruby-devel</span></code></pre>
</notextile>
-h3. Debian and Ubuntu
-
-Debian 10 (buster) and Ubuntu 18.04 (bionic) ship with Ruby 2.5, which is too old for Arvados. Use "RVM":#rvm to install Ruby 2.7 or newer.
+h2. Debian and Ubuntu
Debian 11 (bullseye) and Ubuntu 20.04 (focal) and later ship with Ruby 2.7 or newer, which is sufficient for Arvados.
<notextile>
<pre><code># <span class="userinput">apt-get --no-install-recommends install ruby ruby-dev</span></code></pre>
</notextile>
-
-h2(#rvm). Option 2: Install with RVM
-
-{% include 'notebox_begin_warning' %}
-We do not recommend using RVM unless the Ruby version provided by your OS distribution is older than 2.7.
-{% include 'notebox_end' %}
-
-h3. Install gpg and curl
-
-h4. CentOS/Red Hat 7
-
-<pre>
-yum install gpg curl which findutils procps
-</pre>
-
-{% comment %}
-To build ruby 3.2.2 on CentOS 7, add: "yum --enablerepo=powertools install libyaml-devel"
-{% endcomment %}
-
-h4. Alma/CentOS/Red Hat/Rocky 8+
-
-<pre>
-dnf install gpg curl which findutils procps
-</pre>
-
-h4. Debian and Ubuntu
-
-<pre>
-apt-get --no-install-recommends install gpg curl ca-certificates dirmngr procps
-</pre>
-
-h3. Install RVM, Ruby and Bundler
-
-<notextile>
-<pre><code><span class="userinput">gpg --keyserver pgp.mit.edu --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
-\curl -sSL https://get.rvm.io | bash -s stable --ruby=2.7.7
-</span></code></pre></notextile>
-
-This command installs the Ruby 2.7.7 release, as well as the @gem@ and @bundle@ commands.
-
-To use Ruby installed from RVM, load it in an open shell like this:
-
-<notextile>
-<pre><code><span class="userinput">source /usr/local/rvm/scripts/rvm
-</span></code></pre></notextile>
-
-Alternately you can use @rvm-exec@ (the first parameter is the ruby version to use, or "default"), for example:
-
-<notextile>
-<pre><code><span class="userinput">rvm-exec default ruby -v
-</span></code></pre></notextile>
index index.html index.htm index.php;
passenger_enabled on;
-
- # If you are using RVM, uncomment the line below.
- # If you're using system ruby, leave it commented out.
- #passenger_ruby /usr/local/rvm/wrappers/default/ruby;
+ passenger_preload_bundler on;
# This value effectively limits the size of API objects users can
# create, especially collections. If you change this, you should
# "Install PostgreSQL":install-postgresql.html
# "Install Ruby and Bundler":ruby.html
# "Install nginx":nginx.html
-# "Install Phusion Passenger":https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/install_passenger_main.html
+# "Install Phusion Passenger":https://www.phusionpassenger.com/docs/tutorials/deploy_to_production/installations/oss/ownserver/ruby/nginx/
h2(#database-setup). Set up database
index index.html index.htm index.php;
passenger_enabled on;
-
- # <span class="userinput">If you are using RVM, uncomment the line below.</span>
- # <span class="userinput">If you're using system ruby, leave it commented out.</span>
- #passenger_ruby /usr/local/rvm/wrappers/default/ruby;
+ passenger_preload_bundler on;
# This value effectively limits the size of API objects users can
# create, especially collections. If you change this, you should
github.com/coreos/go-oidc/v3 v3.5.0
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e
github.com/creack/pty v1.1.18
- github.com/docker/docker v24.0.7+incompatible
+ github.com/docker/docker v24.0.9+incompatible
github.com/dustin/go-humanize v1.0.0
github.com/fsnotify/fsnotify v1.4.9
github.com/ghodss/yaml v1.0.0
github.com/prometheus/client_model v0.3.0
github.com/prometheus/common v0.39.0
github.com/sirupsen/logrus v1.8.1
- golang.org/x/crypto v0.17.0
- golang.org/x/net v0.19.0
+ golang.org/x/crypto v0.22.0
+ golang.org/x/net v0.24.0
golang.org/x/oauth2 v0.11.0
- golang.org/x/sys v0.15.0
+ golang.org/x/sys v0.19.0
google.golang.org/api v0.126.0
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
gopkg.in/square/go-jose.v2 v2.5.1
github.com/docker/go-units v0.4.0 // indirect
github.com/gliderlabs/ssh v0.2.2 // indirect
github.com/go-asn1-ber/asn1-ber v1.4.1 // indirect
- github.com/go-jose/go-jose/v3 v3.0.1 // indirect
+ github.com/go-jose/go-jose/v3 v3.0.3 // indirect
github.com/golang-jwt/jwt/v4 v4.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/procfs v0.9.0 // indirect
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect
- github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5 // indirect
+ github.com/satori/go.uuid v1.2.1-0.20180404165556-75cca531ea76 // indirect
github.com/sergi/go-diff v1.0.0 // indirect
github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 // indirect
github.com/src-d/gcfg v1.3.0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0=
+github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.3.0 h1:3lOnM9cSzgGwx8VfK/NGOW5fLQ0GjIlCkaktF+n1M6o=
github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/go-asn1-ber/asn1-ber v1.4.1 h1:qP/QDxOtmMoJVgXHCXNzDpA0+wkgYB2x5QoLMVOciyw=
github.com/go-asn1-ber/asn1-ber v1.4.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
-github.com/go-jose/go-jose/v3 v3.0.1 h1:pWmKFVtt+Jl0vBZTIpz/eAKwsm6LkIxDVVbFHKkchhA=
-github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8=
+github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
+github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
github.com/go-ldap/ldap v3.0.3+incompatible h1:HTeSZO8hWMS1Rgb2Ziku6b8a7qRIZZMHjsvuZyatzwk=
github.com/go-ldap/ldap v3.0.3+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
+github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
-github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5 h1:Jw7W4WMfQDxsXvfeFSaS2cHlY7bAF4MGrgnbd0+Uo78=
-github.com/satori/go.uuid v1.2.1-0.20180103174451-36e9d2ebbde5/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
+github.com/satori/go.uuid v1.2.1-0.20180404165556-75cca531ea76 h1:ofyVTM1w4iyKwaQIlRR6Ip06mXXx5Cnz7a4mTGYq1hE=
+github.com/satori/go.uuid v1.2.1-0.20180404165556-75cca531ea76/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63 h1:J6qvD6rbmOil46orKqJaRPG+zTpoGlBTUdyv8ki63L0=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
-golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
-golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM=
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
if err != nil {
return err
}
- for _, version := range []string{"2.2.19"} {
- if !strings.Contains(buf.String(), "("+version+")") {
- err = super.RunProgram(ctx, appdir, runOptions{}, "gem", "install", "--user", "--conservative", "--no-document", "bundler:2.2.19")
- if err != nil {
- return err
- }
- break
- }
+ err = super.RunProgram(ctx, appdir, runOptions{}, "gem", "install", "--user", "--conservative", "--no-document", "--version", "~> 2.4.0", "bundler")
+ if err != nil {
+ return err
}
err = super.RunProgram(ctx, appdir, runOptions{}, "bundle", "config", "--set", "local", "path", filepath.Join(os.Getenv("HOME"), ".gem"))
if err != nil {
# load on the API server and you don't need it.
WebDAVLogEvents: true
+ # Per-connection output buffer for WebDAV downloads. May improve
+ # throughput for large files, particularly when storage volumes
+ # have high latency.
+ #
+ # Size be specified as a number of bytes ("0") or with units
+ # ("128KiB", "1 MB").
+ WebDAVOutputBuffer: 0
+
Login:
# One of the following mechanisms (Google, PAM, LDAP, or
# LoginCluster) should be enabled; see
"Collections.TrustAllContent": true,
"Collections.WebDAVCache": false,
"Collections.WebDAVLogEvents": false,
+ "Collections.WebDAVOutputBuffer": false,
"Collections.WebDAVPermission": false,
"Containers": true,
"Containers.AlwaysUsePreemptibleInstances": true,
"git.arvados.org/arvados.git/sdk/go/arvadostest"
"git.arvados.org/arvados.git/sdk/go/ctxlog"
"git.arvados.org/arvados.git/sdk/go/httpserver"
+ "git.arvados.org/arvados.git/sdk/go/keepclient"
check "gopkg.in/check.v1"
)
c.Assert(coll.StorageClassesDesired, check.DeepEquals, kc.DefaultStorageClasses)
}
+func (s *IntegrationSuite) createTestCollectionManifest(c *check.C, ac *arvados.Client, kc *keepclient.KeepClient, content string) string {
+ fs, err := (&arvados.Collection{}).FileSystem(ac, kc)
+ c.Assert(err, check.IsNil)
+ f, err := fs.OpenFile("test.txt", os.O_CREATE|os.O_RDWR, 0777)
+ c.Assert(err, check.IsNil)
+ _, err = io.WriteString(f, content)
+ c.Assert(err, check.IsNil)
+ err = f.Close()
+ c.Assert(err, check.IsNil)
+ mtxt, err := fs.MarshalManifest(".")
+ c.Assert(err, check.IsNil)
+ return mtxt
+}
+
func (s *IntegrationSuite) TestGetCollectionByPDH(c *check.C) {
conn1 := s.super.Conn("z1111")
rootctx1, _, _ := s.super.RootClients("z1111")
// Create the collection to find its PDH (but don't save it
// anywhere yet)
- var coll1 arvados.Collection
- fs1, err := coll1.FileSystem(ac1, kc1)
- c.Assert(err, check.IsNil)
- f, err := fs1.OpenFile("test.txt", os.O_CREATE|os.O_RDWR, 0777)
- c.Assert(err, check.IsNil)
- _, err = io.WriteString(f, "IntegrationSuite.TestGetCollectionByPDH")
- c.Assert(err, check.IsNil)
- err = f.Close()
- c.Assert(err, check.IsNil)
- mtxt, err := fs1.MarshalManifest(".")
- c.Assert(err, check.IsNil)
+ mtxt := s.createTestCollectionManifest(c, ac1, kc1, c.TestName())
pdh := arvados.PortableDataHash(mtxt)
// Looking up the PDH before saving returns 404 if cycle
// detection is working.
- _, err = conn1.CollectionGet(userctx1, arvados.GetOptions{UUID: pdh})
+ _, err := conn1.CollectionGet(userctx1, arvados.GetOptions{UUID: pdh})
c.Assert(err, check.ErrorMatches, `.*404 Not Found.*`)
// Save the collection on cluster z1111.
- coll1, err = conn1.CollectionCreate(userctx1, arvados.CreateOptions{Attrs: map[string]interface{}{
+ _, err = conn1.CollectionCreate(userctx1, arvados.CreateOptions{Attrs: map[string]interface{}{
"manifest_text": mtxt,
}})
c.Assert(err, check.IsNil)
// Retrieve the collection from cluster z3333.
- coll, err := conn3.CollectionGet(userctx1, arvados.GetOptions{UUID: pdh})
+ coll2, err := conn3.CollectionGet(userctx1, arvados.GetOptions{UUID: pdh})
c.Check(err, check.IsNil)
- c.Check(coll.PortableDataHash, check.Equals, pdh)
+ c.Check(coll2.PortableDataHash, check.Equals, pdh)
+}
+
+func (s *IntegrationSuite) TestFederation_Write1Read2(c *check.C) {
+ s.testFederationCollectionAccess(c, "z1111", "z2222")
+}
+
+func (s *IntegrationSuite) TestFederation_Write2Read1(c *check.C) {
+ s.testFederationCollectionAccess(c, "z2222", "z1111")
+}
+
+func (s *IntegrationSuite) TestFederation_Write2Read3(c *check.C) {
+ s.testFederationCollectionAccess(c, "z2222", "z3333")
+}
+
+func (s *IntegrationSuite) testFederationCollectionAccess(c *check.C, writeCluster, readCluster string) {
+ conn1 := s.super.Conn("z1111")
+ rootctx1, _, _ := s.super.RootClients("z1111")
+ _, ac1, _, _ := s.super.UserClients("z1111", rootctx1, c, conn1, s.oidcprovider.AuthEmail, true)
+
+ connW := s.super.Conn(writeCluster)
+ userctxW, acW, kcW := s.super.ClientsWithToken(writeCluster, ac1.AuthToken)
+ kcW.DiskCacheSize = keepclient.DiskCacheDisabled
+ connR := s.super.Conn(readCluster)
+ userctxR, acR, kcR := s.super.ClientsWithToken(readCluster, ac1.AuthToken)
+ kcR.DiskCacheSize = keepclient.DiskCacheDisabled
+
+ filedata := fmt.Sprintf("%s: write to %s, read from %s", c.TestName(), writeCluster, readCluster)
+ mtxt := s.createTestCollectionManifest(c, acW, kcW, filedata)
+ collW, err := connW.CollectionCreate(userctxW, arvados.CreateOptions{Attrs: map[string]interface{}{
+ "manifest_text": mtxt,
+ }})
+ c.Assert(err, check.IsNil)
+
+ collR, err := connR.CollectionGet(userctxR, arvados.GetOptions{UUID: collW.UUID})
+ if !c.Check(err, check.IsNil) {
+ return
+ }
+ fsR, err := collR.FileSystem(acR, kcR)
+ if !c.Check(err, check.IsNil) {
+ return
+ }
+ buf, err := fs.ReadFile(arvados.FS(fsR), "test.txt")
+ if !c.Check(err, check.IsNil) {
+ return
+ }
+ c.Check(string(buf), check.Equals, filedata)
}
// Tests bug #18004
}
// Rather than have an alternate way to tell keepstore how
- // many buffers to use when starting it this way, we just
- // modify the cluster configuration that we feed it on stdin.
- configData.Cluster.API.MaxKeepBlobBuffers = configData.KeepBuffers
+ // many buffers to use, etc., when starting it this way, we
+ // just modify the cluster configuration that we feed it on
+ // stdin.
+ ccfg := *configData.Cluster
+ ccfg.API.MaxKeepBlobBuffers = configData.KeepBuffers
+ ccfg.Collections.BlobTrash = false
+ ccfg.Collections.BlobTrashConcurrency = 0
+ ccfg.Collections.BlobDeleteConcurrency = 0
localaddr := localKeepstoreAddr()
ln, err := net.Listen("tcp", net.JoinHostPort(localaddr, "0"))
var confJSON bytes.Buffer
err = json.NewEncoder(&confJSON).Encode(arvados.Config{
Clusters: map[string]arvados.Cluster{
- configData.Cluster.ClusterID: *configData.Cluster,
+ ccfg.ClusterID: ccfg,
},
})
if err != nil {
if trial.logConfig == "none" {
c.Check(logExists, Equals, false)
} else {
+ c.Check(log, Matches, `(?ms).*not running trash worker.*`)
+ c.Check(log, Matches, `(?ms).*not running trash emptier.*`)
c.Check(log, trial.matchGetReq, `(?ms).*"reqMethod":"GET".*`)
c.Check(log, trial.matchPutReq, `(?ms).*"reqMethod":"PUT".*,"reqPath":"0e3bcff26d51c895a60ea0d4585e134d".*`)
}
"context"
"crypto/sha256"
_ "embed"
+ "encoding/json"
"flag"
"fmt"
"io"
"net/url"
"os"
"os/exec"
+ "regexp"
"strings"
"time"
}
defer os.RemoveAll(tempdir)
+ var imageSHA2 string
var dockerImageData []byte
if diag.dockerImage != "" || diag.priority < 1 {
// We won't be using the self-built docker image, so
// upload/download, whether or not we're using it as a
// docker image.
dockerImageData = HelloWorldDockerImage
+
+ if diag.priority > 0 {
+ imageSHA2, err = getSHA2FromImageData(dockerImageData)
+ if err != nil {
+ diag.errorf("internal error/bug: %s", err)
+ return
+ }
+ }
} else if selfbin, err := os.Readlink("/proc/self/exe"); err != nil {
diag.errorf("readlink /proc/self/exe: %s", err)
return
}
diag.infof("arvados-client version: %s", checkversion)
- buf, err := exec.Command("docker", "save", tag).Output()
+ buf, err := exec.Command("docker", "inspect", "--format={{.Id}}", tag).Output()
+ if err != nil {
+ diag.errorf("docker inspect --format={{.Id}} %s: %s", tag, err)
+ return
+ }
+ imageSHA2 = min64HexDigits.FindString(string(buf))
+ if len(imageSHA2) != 64 {
+ diag.errorf("docker inspect --format={{.Id}} output %q does not seem to contain sha256 digest", buf)
+ return
+ }
+
+ buf, err = exec.Command("docker", "save", tag).Output()
if err != nil {
diag.errorf("docker save %s: %s", tag, err)
return
dockerImageData = buf
}
- // Read image tarball to find image ID, so we can upload it as
- // "sha256:{...}.tar"
- var imageSHA2 string
- {
- tr := tar.NewReader(bytes.NewReader(dockerImageData))
- for {
- hdr, err := tr.Next()
- if err == io.EOF {
- break
- }
- if err != nil {
- diag.errorf("internal error/bug: cannot read docker image tar file: %s", err)
- return
- }
- if s := strings.TrimSuffix(hdr.Name, ".json"); len(s) == 64 && s != hdr.Name {
- imageSHA2 = s
- }
- }
- if imageSHA2 == "" {
- diag.errorf("internal error/bug: cannot find {sha256}.json file in docker image tar file")
- return
- }
- }
tarfilename := "sha256:" + imageSHA2 + ".tar"
diag.dotest(100, "uploading file via webdav", func() error {
return nil
})
}
+
+func getSHA2FromImageData(dockerImageData []byte) (string, error) {
+ tr := tar.NewReader(bytes.NewReader(dockerImageData))
+ for {
+ hdr, err := tr.Next()
+ if err == io.EOF {
+ return "", fmt.Errorf("cannot find manifest.json in docker image tar file")
+ }
+ if err != nil {
+ return "", fmt.Errorf("cannot read docker image tar file: %s", err)
+ }
+ if hdr.Name != "manifest.json" {
+ continue
+ }
+ var manifest []struct {
+ Config string
+ }
+ err = json.NewDecoder(tr).Decode(&manifest)
+ if err != nil {
+ return "", fmt.Errorf("cannot read manifest.json from docker image tar file: %s", err)
+ }
+ if len(manifest) == 0 {
+ return "", fmt.Errorf("manifest.json is empty")
+ }
+ s := min64HexDigits.FindString(manifest[0].Config)
+ if len(s) != 64 {
+ return "", fmt.Errorf("found manifest.json but .[0].Config %q does not seem to contain sha256 digest", manifest[0].Config)
+ }
+ return s, nil
+ }
+}
+
+var min64HexDigits = regexp.MustCompile(`[0-9a-f]{64,}`)
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package diagnostics
+
+import (
+ "testing"
+
+ . "gopkg.in/check.v1"
+)
+
+func Test(t *testing.T) {
+ TestingT(t)
+}
+
+var _ = Suite(&suite{})
+
+type suite struct{}
+
+func (*suite) TestGetSHA2FromImageData(c *C) {
+ imageSHA2, err := getSHA2FromImageData(HelloWorldDockerImage)
+ c.Check(err, IsNil)
+ c.Check(imageSHA2, Matches, `[0-9a-f]{64}`)
+}
const (
defaultRubyVersion = "3.2.2"
- defaultBundlerVersion = "2.2.19"
+ defaultBundlerVersion = "~> 2.4.0"
defaultSingularityVersion = "3.10.4"
pjsversion = "1.9.8"
geckoversion = "0.24.0"
fmt.Fprintf(stderr, "invalid argument %q for -ruby-version\n", inst.RubyVersion)
return 2
}
- if ok, _ := regexp.MatchString(`^\d`, inst.BundlerVersion); !ok {
+ if ok, _ := regexp.MatchString(`^ *(|~>|[<>!=]=) *\d`, inst.BundlerVersion); !ok {
fmt.Fprintf(stderr, "invalid argument %q for -bundler-version\n", inst.BundlerVersion)
return 2
}
if [[ "$rubyversion" > "3" ]]; then
/var/lib/arvados/bin/gem update --no-document --system 3.4.21
fi
-/var/lib/arvados/bin/gem install bundler --no-document
+/var/lib/arvados/bin/gem install --conservative --no-document --version '`+inst.BundlerVersion+`' bundler
`, stdout, stderr)
if err != nil {
return 1
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../python")),
- os.path.abspath(os.path.join(SETUP_DIR, "../../tools/crunchstat-summary")),
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
- return read_version(setup_dir, module)
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
if __name__ == '__main__':
- print(get_version(SETUP_DIR, "arvados_cwl"))
+ print(get_version())
from setuptools import setup, find_packages
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "arvados_cwl")
-if os.environ.get('ARVADOS_BUILDING_VERSION', False):
- pysdk_dep = "=={}".format(version)
-else:
- # On dev releases, arvados-python-client may have a different timestamp
- pysdk_dep = "<={}".format(version)
+version = arvados_version.get_version()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
setup(name='arvados-cwl-runner',
version=version,
# file to determine what version of cwltool and schema-salad to
# build.
install_requires=[
+ *arvados_version.iter_dependencies(version),
'cwltool==3.1.20230601100705',
'schema-salad==8.4.20230601112322',
- 'arvados-python-client{}'.format(pysdk_dep),
- 'crunchstat-summary{}'.format(pysdk_dep),
'ciso8601 >= 2.0.0',
- 'networkx < 2.6',
- 'msgpack==1.0.3',
- 'importlib-metadata<5',
'setuptools>=40.3.0',
],
data_files=[
'Programming Language :: Python :: 3',
],
test_suite='tests',
- tests_require=[
- 'mock>=1.0,<4',
- ],
zip_safe=True,
)
import copy
import arvados.config
import logging
-import mock
import unittest
import os
import functools
from schema_salad.sourceline import cmap
import io
+from unittest import mock
+
from .matcher import JsonDiffMatcher, StripYAMLComments
from .mock_discovery import get_rootDesc
# SPDX-License-Identifier: Apache-2.0
import functools
-import mock
import sys
import unittest
import json
import logging
import os
+from unittest import mock
+
import arvados
import arvados.keep
import arvados.collection
import functools
import json
import logging
-import mock
import os
import io
import unittest
+from unittest import mock
+
import arvados
import arvados_cwl
import arvados_cwl.executor
# SPDX-License-Identifier: Apache-2.0
import functools
-import mock
import sys
import unittest
import json
import logging
import os
+from unittest import mock
+
import arvados
import arvados.keep
import arvados.collection
from future import standard_library
standard_library.install_aliases()
-from builtins import object
-from builtins import str
-from future.utils import viewvalues
import copy
import io
import hashlib
import json
import logging
-import mock
import sys
import unittest
import cwltool.process
import re
import os
-from io import BytesIO
-
-# StringIO.StringIO and io.StringIO have different behavior write() is
-# called with both python2 (byte) strings and unicode strings
-# (specifically there's some logging in cwltool that causes trouble).
-# This isn't a problem on python3 because all string are unicode.
-if sys.version_info[0] < 3:
- from StringIO import StringIO
-else:
- from io import StringIO
+from io import BytesIO, StringIO
+from unittest import mock
import arvados
import arvados.collection
return CollectionExecute(created_collections[uuid])
def collection_getstub(created_collections, uuid):
- for v in viewvalues(created_collections):
+ for v in created_collections.values():
if uuid in (v["uuid"], v["portable_data_hash"]):
return CollectionExecute(v)
# SPDX-License-Identifier: Apache-2.0
import functools
-import mock
import sys
import unittest
import json
import os
import threading
+from unittest import mock
+
from cwltool.task_queue import TaskQueue
def success_task():
# SPDX-License-Identifier: Apache-2.0
import functools
-import mock
import sys
import unittest
import json
import logging
import os
+from unittest import mock
+
import arvados
import arvados.keep
import arvados.collection
from builtins import bytes
import unittest
-import mock
import datetime
import httplib2
+from unittest import mock
+
from arvados_cwl.util import *
from arvados.errors import ApiError
from arvados_cwl.util import common_prefix
Limit int `json:"limit"`
}
-var (
- blkRe = regexp.MustCompile(`^ [0-9a-f]{32}\+\d+`)
- tokRe = regexp.MustCompile(` ?[^ ]*`)
-)
-
// PortableDataHash computes the portable data hash of the given
// manifest.
func PortableDataHash(mt string) string {
+ // To calculate the PDH, we write the manifest to an md5 hash
+ // func, except we skip the "extra" part of block tokens that
+ // look like "abcdef0123456789abcdef0123456789+12345+extra".
+ //
+ // This code is simplified by the facts that (A) all block
+ // tokens -- even the first and last in a stream -- are
+ // preceded and followed by a space character; and (B) all
+ // non-block tokens either start with '.' or contain ':'.
+ //
+ // A regexp-based approach (like the one this replaced) would
+ // be more readable, but very slow.
h := md5.New()
size := 0
- _ = tokRe.ReplaceAllFunc([]byte(mt), func(tok []byte) []byte {
- if m := blkRe.Find(tok); m != nil {
- // write hash+size, ignore remaining block hints
- tok = m
+ todo := []byte(mt)
+ for len(todo) > 0 {
+ // sp is the end of the current token (note that if
+ // the current token is the last file token in a
+ // stream, we'll also include the \n and the dirname
+ // token on the next line, which is perfectly fine for
+ // our purposes).
+ sp := bytes.IndexByte(todo, ' ')
+ if sp < 0 {
+ // Last token of the manifest, which is never
+ // a block token.
+ n, _ := h.Write(todo)
+ size += n
+ break
}
- n, err := h.Write(tok)
- if err != nil {
- panic(err)
+ if sp >= 34 && todo[32] == '+' && bytes.IndexByte(todo[:32], ':') == -1 && todo[0] != '.' {
+ // todo[:sp] is a block token.
+ sizeend := bytes.IndexByte(todo[33:sp], '+')
+ if sizeend < 0 {
+ // "hash+size"
+ sizeend = sp
+ } else {
+ // "hash+size+extra"
+ sizeend += 33
+ }
+ n, _ := h.Write(todo[:sizeend])
+ h.Write([]byte{' '})
+ size += n + 1
+ } else {
+ // todo[:sp] is not a block token.
+ n, _ := h.Write(todo[:sp+1])
+ size += n
}
- size += n
- return nil
- })
+ todo = todo[sp+1:]
+ }
return fmt.Sprintf("%x+%d", h.Sum(nil), size)
}
KeepproxyPermission UploadDownloadRolePermissions
WebDAVPermission UploadDownloadRolePermissions
WebDAVLogEvents bool
+ WebDAVOutputBuffer ByteSize
}
Git struct {
GitCommand string
}
streams = streams[:len(streams)-1]
segments := []storedSegment{}
+ // streamoffset[n] is the position in the stream of the nth
+ // block, i.e., ∑ segments[j].size ∀ 0≤j<n. We ensure
+ // len(streamoffset) == len(segments) + 1.
+ streamoffset := []int64{0}
// To reduce allocs, we reuse a single "pathparts" slice
// (pre-split on "/" separators) for the duration of this
// func.
}
for i, stream := range streams {
lineno := i + 1
+ fnodeCache := make(map[string]*filenode)
var anyFileTokens bool
- var pos int64
var segIdx int
segments = segments[:0]
+ streamoffset = streamoffset[:1]
pathparts = nil
streamparts := 0
for i, token := range bytes.Split(stream, []byte{' '}) {
if err != nil || length < 0 {
return fmt.Errorf("line %d: bad locator %q", lineno, token)
}
+ streamoffset = append(streamoffset, streamoffset[len(segments)]+int64(length))
segments = append(segments, storedSegment{
locator: string(token),
size: int(length),
if err != nil || length < 0 {
return fmt.Errorf("line %d: bad file segment %q", lineno, token)
}
- if !bytes.ContainsAny(toks[2], `\/`) {
- // optimization for a common case
- pathparts = append(pathparts[:streamparts], string(toks[2]))
- } else {
- pathparts = append(pathparts[:streamparts], strings.Split(manifestUnescape(string(toks[2])), "/")...)
+ fnode, cached := fnodeCache[string(toks[2])]
+ if !cached {
+ if !bytes.ContainsAny(toks[2], `\/`) {
+ // optimization for a common case
+ pathparts = append(pathparts[:streamparts], string(toks[2]))
+ } else {
+ pathparts = append(pathparts[:streamparts], strings.Split(manifestUnescape(string(toks[2])), "/")...)
+ }
+ fnode, err = dn.createFileAndParents(pathparts)
+ if err != nil {
+ return fmt.Errorf("line %d: cannot use name %q with length %d: %s", lineno, toks[2], length, err)
+ }
+ fnodeCache[string(toks[2])] = fnode
}
- fnode, err := dn.createFileAndParents(pathparts)
- if fnode == nil && err == nil && length == 0 {
+ if fnode == nil {
+ // name matches an existing directory
+ if length != 0 {
+ return fmt.Errorf("line %d: cannot use name %q with length %d: is a directory", lineno, toks[2], length)
+ }
// Special case: an empty file used as
// a marker to preserve an otherwise
// empty directory in a manifest.
continue
}
- if err != nil || (fnode == nil && length != 0) {
- return fmt.Errorf("line %d: cannot use name %q with length %d: %s", lineno, toks[2], length, err)
- }
// Map the stream offset/range coordinates to
// block/offset/range coordinates and add
// corresponding storedSegments to the filenode
- if pos > offset {
- // Can't continue where we left off.
- // TODO: binary search instead of
- // rewinding all the way (but this
- // situation might be rare anyway)
- segIdx, pos = 0, 0
+ if segIdx < len(segments) && streamoffset[segIdx] <= offset && streamoffset[segIdx+1] > offset {
+ // common case with an easy
+ // optimization: start where the
+ // previous segment ended
+ } else if guess := int(offset >> 26); guess >= 0 && guess < len(segments) && streamoffset[guess] <= offset && streamoffset[guess+1] > offset {
+ // another common case with an easy
+ // optimization: all blocks are 64 MiB
+ // (or close enough)
+ segIdx = guess
+ } else {
+ // general case
+ segIdx = sort.Search(len(segments), func(i int) bool {
+ return streamoffset[i+1] > offset
+ })
}
for ; segIdx < len(segments); segIdx++ {
- seg := segments[segIdx]
- next := pos + int64(seg.Len())
- if next <= offset || seg.Len() == 0 {
- pos = next
- continue
- }
- if pos >= offset+length {
+ blkStart := streamoffset[segIdx]
+ if blkStart >= offset+length {
break
}
+ seg := &segments[segIdx]
+ if seg.size == 0 {
+ continue
+ }
var blkOff int
- if pos < offset {
- blkOff = int(offset - pos)
+ if blkStart < offset {
+ blkOff = int(offset - blkStart)
}
- blkLen := seg.Len() - blkOff
- if pos+int64(blkOff+blkLen) > offset+length {
- blkLen = int(offset + length - pos - int64(blkOff))
+ blkLen := seg.size - blkOff
+ if blkStart+int64(seg.size) > offset+length {
+ blkLen = int(offset + length - blkStart - int64(blkOff))
}
fnode.appendSegment(storedSegment{
kc: dn.fs,
offset: blkOff,
length: blkLen,
})
- if next > offset+length {
- break
- } else {
- pos = next
- }
}
- if segIdx == len(segments) && pos < offset+length {
- return fmt.Errorf("line %d: invalid segment in %d-byte stream: %q", lineno, pos, token)
+ if segIdx == len(segments) && streamoffset[segIdx] < offset+length {
+ return fmt.Errorf("line %d: invalid segment in %d-byte stream: %q", lineno, streamoffset[segIdx], token)
}
}
if !anyFileTokens {
var _ = check.Suite(&CollectionFSUnitSuite{})
// expect ~2 seconds to load a manifest with 256K files
-func (s *CollectionFSUnitSuite) TestLargeManifest(c *check.C) {
+func (s *CollectionFSUnitSuite) TestLargeManifest_ManyFiles(c *check.C) {
if testing.Short() {
c.Skip("slow")
}
+ s.testLargeManifest(c, 512, 512, 1, 0)
+}
- const (
- dirCount = 512
- fileCount = 512
- )
+func (s *CollectionFSUnitSuite) TestLargeManifest_LargeFiles(c *check.C) {
+ if testing.Short() {
+ c.Skip("slow")
+ }
+ s.testLargeManifest(c, 1, 800, 1000, 0)
+}
+func (s *CollectionFSUnitSuite) TestLargeManifest_InterleavedFiles(c *check.C) {
+ if testing.Short() {
+ c.Skip("slow")
+ }
+ // Timing figures here are from a dev host, (0)->(1)->(2)->(3)
+ // (0) no optimizations (main branch commit ea697fb1e8)
+ // (1) resolve streampos->blkidx with binary search
+ // (2) ...and rewrite PortableDataHash() without regexp
+ // (3) ...and use fnodeCache in loadManifest
+ s.testLargeManifest(c, 1, 800, 100, 4<<20) // 127s -> 12s -> 2.5s -> 1.5s
+ s.testLargeManifest(c, 1, 50, 1000, 4<<20) // 44s -> 10s -> 1.5s -> 0.8s
+ s.testLargeManifest(c, 1, 200, 100, 4<<20) // 13s -> 4s -> 0.6s -> 0.3s
+ s.testLargeManifest(c, 1, 200, 150, 4<<20) // 26s -> 4s -> 1s -> 0.5s
+ s.testLargeManifest(c, 1, 200, 200, 4<<20) // 38s -> 6s -> 1.3s -> 0.7s
+ s.testLargeManifest(c, 1, 200, 225, 4<<20) // 46s -> 7s -> 1.5s -> 1s
+ s.testLargeManifest(c, 1, 400, 400, 4<<20) // 477s -> 24s -> 5s -> 3s
+ // s.testLargeManifest(c, 1, 800, 1000, 4<<20) // timeout -> 186s -> 28s -> 17s
+}
+
+func (s *CollectionFSUnitSuite) testLargeManifest(c *check.C, dirCount, filesPerDir, blocksPerFile, interleaveChunk int) {
+ t0 := time.Now()
+ const blksize = 1 << 26
+ c.Logf("%s building manifest with dirCount=%d filesPerDir=%d blocksPerFile=%d", time.Now(), dirCount, filesPerDir, blocksPerFile)
mb := bytes.NewBuffer(make([]byte, 0, 40000000))
+ blkid := 0
for i := 0; i < dirCount; i++ {
fmt.Fprintf(mb, "./dir%d", i)
- for j := 0; j <= fileCount; j++ {
- fmt.Fprintf(mb, " %032x+42+A%040x@%08x", j, j, j)
+ for j := 0; j < filesPerDir; j++ {
+ for k := 0; k < blocksPerFile; k++ {
+ blkid++
+ fmt.Fprintf(mb, " %032x+%d+A%040x@%08x", blkid, blksize, blkid, blkid)
+ }
}
- for j := 0; j < fileCount; j++ {
- fmt.Fprintf(mb, " %d:%d:dir%d/file%d", j*42+21, 42, j, j)
+ for j := 0; j < filesPerDir; j++ {
+ if interleaveChunk == 0 {
+ fmt.Fprintf(mb, " %d:%d:dir%d/file%d", (filesPerDir-j-1)*blocksPerFile*blksize, blocksPerFile*blksize, j, j)
+ continue
+ }
+ for todo := int64(blocksPerFile) * int64(blksize); todo > 0; todo -= int64(interleaveChunk) {
+ size := int64(interleaveChunk)
+ if size > todo {
+ size = todo
+ }
+ offset := rand.Int63n(int64(blocksPerFile)*int64(blksize)*int64(filesPerDir) - size)
+ fmt.Fprintf(mb, " %d:%d:dir%d/file%d", offset, size, j, j)
+ }
}
mb.Write([]byte{'\n'})
}
coll := Collection{ManifestText: mb.String()}
- c.Logf("%s built", time.Now())
+ c.Logf("%s built manifest size=%d", time.Now(), mb.Len())
var memstats runtime.MemStats
runtime.ReadMemStats(&memstats)
f, err := coll.FileSystem(NewClientFromEnv(), &keepClientStub{})
c.Check(err, check.IsNil)
c.Logf("%s loaded", time.Now())
- c.Check(f.Size(), check.Equals, int64(42*dirCount*fileCount))
+ c.Check(f.Size(), check.Equals, int64(dirCount*filesPerDir*blocksPerFile*blksize))
+ // Stat() and OpenFile() each file. This mimics the behavior
+ // of webdav propfind, which opens each file even when just
+ // listing directory entries.
for i := 0; i < dirCount; i++ {
- for j := 0; j < fileCount; j++ {
- f.Stat(fmt.Sprintf("./dir%d/dir%d/file%d", i, j, j))
+ for j := 0; j < filesPerDir; j++ {
+ fnm := fmt.Sprintf("./dir%d/dir%d/file%d", i, j, j)
+ fi, err := f.Stat(fnm)
+ c.Assert(err, check.IsNil)
+ c.Check(fi.IsDir(), check.Equals, false)
+ f, err := f.OpenFile(fnm, os.O_RDONLY, 0)
+ c.Assert(err, check.IsNil)
+ f.Close()
}
}
- c.Logf("%s Stat() x %d", time.Now(), dirCount*fileCount)
+ c.Logf("%s OpenFile() x %d", time.Now(), dirCount*filesPerDir)
runtime.ReadMemStats(&memstats)
c.Logf("%s Alloc=%d Sys=%d", time.Now(), memstats.Alloc, memstats.Sys)
+ c.Logf("%s MemorySize=%d", time.Now(), f.MemorySize())
+ c.Logf("%s ... test duration %s", time.Now(), time.Now().Sub(t0))
}
// Gocheck boilerplate
self._put_queue = None
self._put_threads = None
self.lock = threading.Lock()
- self.prefetch_enabled = True
+ self.prefetch_lookahead = self._keep.num_prefetch_threads
self.num_put_threads = put_threads or _BlockManager.DEFAULT_PUT_THREADS
self.copies = copies
self.storage_classes = storage_classes_func or (lambda: [])
"""Initiate a background download of a block.
"""
- if not self.prefetch_enabled:
+ if not self.prefetch_lookahead:
return
with self.lock:
"""
__slots__ = ('parent', 'name', '_writers', '_committed',
- '_segments', 'lock', '_current_bblock', 'fuse_entry')
+ '_segments', 'lock', '_current_bblock', 'fuse_entry', '_read_counter')
def __init__(self, parent, name, stream=[], segments=[]):
"""
for s in segments:
self._add_segment(stream, s.locator, s.range_size)
self._current_bblock = None
+ self._read_counter = 0
def writable(self):
return self.parent.writable()
if size == 0 or offset >= self.size():
return b''
readsegs = locators_and_ranges(self._segments, offset, size)
- prefetch = locators_and_ranges(self._segments, offset + size, config.KEEP_BLOCK_SIZE * self.parent._my_block_manager()._keep.num_prefetch_threads, limit=32)
+
+ prefetch = None
+ prefetch_lookahead = self.parent._my_block_manager().prefetch_lookahead
+ if prefetch_lookahead:
+ # Doing prefetch on every read() call is surprisingly expensive
+ # when we're trying to deliver data at 600+ MiBps and want
+ # the read() fast path to be as lightweight as possible.
+ #
+ # Only prefetching every 128 read operations
+ # dramatically reduces the overhead while still
+ # getting the benefit of prefetching (e.g. when
+ # reading 128 KiB at a time, it checks for prefetch
+ # every 16 MiB).
+ self._read_counter = (self._read_counter+1) % 128
+ if self._read_counter == 1:
+ prefetch = locators_and_ranges(self._segments,
+ offset + size,
+ config.KEEP_BLOCK_SIZE * prefetch_lookahead,
+ limit=(1+prefetch_lookahead))
locs = set()
data = []
block = self.parent._my_block_manager().get_block_contents(lr.locator, num_retries=num_retries, cache_only=(bool(data) and not exact))
if block:
blockview = memoryview(block)
- data.append(blockview[lr.segment_offset:lr.segment_offset+lr.segment_size].tobytes())
+ data.append(blockview[lr.segment_offset:lr.segment_offset+lr.segment_size])
locs.add(lr.locator)
else:
break
- for lr in prefetch:
- if lr.locator not in locs:
- self.parent._my_block_manager().block_prefetch(lr.locator)
- locs.add(lr.locator)
+ if prefetch:
+ for lr in prefetch:
+ if lr.locator not in locs:
+ self.parent._my_block_manager().block_prefetch(lr.locator)
+ locs.add(lr.locator)
- return b''.join(data)
+ if len(data) == 1:
+ return data[0]
+ else:
+ return b''.join(data)
@must_be_writable
@synchronized
import arvados.commands._util as arv_cmd
import arvados.commands.keepdocker
import arvados.http_to_keep
-import ruamel.yaml as yaml
from arvados._version import __version__
import errno
import logging
import weakref
+import collections
_logger = logging.getLogger('arvados.keep')
def get(self):
self.ready.wait()
+ # 'content' can None, an empty byte string, or a nonempty mmap
+ # region. If it is an mmap region, we want to advise the
+ # kernel we're going to use it. This nudges the kernel to
+ # re-read most or all of the block if necessary (instead of
+ # just a few pages at a time), reducing the number of page
+ # faults and improving performance by 4x compared to not
+ # calling madvise.
+ if self.content:
+ self.content.madvise(mmap.MADV_WILLNEED)
return self.content
def set(self, value):
if value is None:
self.content = None
self.ready.set()
- return
+ return False
if len(value) == 0:
# Can't mmap a 0 length file
self.content = b''
self.ready.set()
- return
+ return True
if self.content is not None:
# Has been set already
self.ready.set()
- return
+ return False
blockdir = os.path.join(self.cachedir, self.locator[0:3])
os.makedirs(blockdir, mode=0o700, exist_ok=True)
self.content = mmap.mmap(self.filehandle.fileno(), 0, access=mmap.ACCESS_READ)
# only set the event when mmap is successful
self.ready.set()
+ return True
finally:
if tmpfile is not None:
# If the tempfile hasn't been renamed on disk yet, try to delete it.
return len(self.content)
def evict(self):
- if self.content is not None and len(self.content) > 0:
- # The mmap region might be in use when we decided to evict
- # it. This can happen if the cache is too small.
- #
- # If we call close() now, it'll throw an error if
- # something tries to access it.
- #
- # However, we don't need to explicitly call mmap.close()
- #
- # I confirmed in mmapmodule.c that that both close
- # and deallocate do the same thing:
+ if not self.content:
+ return
+
+ # The mmap region might be in use when we decided to evict
+ # it. This can happen if the cache is too small.
+ #
+ # If we call close() now, it'll throw an error if
+ # something tries to access it.
+ #
+ # However, we don't need to explicitly call mmap.close()
+ #
+ # I confirmed in mmapmodule.c that that both close
+ # and deallocate do the same thing:
+ #
+ # a) close the file descriptor
+ # b) unmap the memory range
+ #
+ # So we can forget it in the cache and delete the file on
+ # disk, and it will tear it down after any other
+ # lingering Python references to the mapped memory are
+ # gone.
+
+ blockdir = os.path.join(self.cachedir, self.locator[0:3])
+ final = os.path.join(blockdir, self.locator) + cacheblock_suffix
+ try:
+ fcntl.flock(self.filehandle, fcntl.LOCK_UN)
+
+ # try to get an exclusive lock, this ensures other
+ # processes are not using the block. It is
+ # nonblocking and will throw an exception if we
+ # can't get it, which is fine because that means
+ # we just won't try to delete it.
#
- # a) close the file descriptor
- # b) unmap the memory range
+ # I should note here, the file locking is not
+ # strictly necessary, we could just remove it and
+ # the kernel would ensure that the underlying
+ # inode remains available as long as other
+ # processes still have the file open. However, if
+ # you have multiple processes sharing the cache
+ # and deleting each other's files, you'll end up
+ # with a bunch of ghost files that don't show up
+ # in the file system but are still taking up
+ # space, which isn't particularly user friendly.
+ # The locking strategy ensures that cache blocks
+ # in use remain visible.
#
- # So we can forget it in the cache and delete the file on
- # disk, and it will tear it down after any other
- # lingering Python references to the mapped memory are
- # gone.
-
- blockdir = os.path.join(self.cachedir, self.locator[0:3])
- final = os.path.join(blockdir, self.locator) + cacheblock_suffix
- try:
- fcntl.flock(self.filehandle, fcntl.LOCK_UN)
-
- # try to get an exclusive lock, this ensures other
- # processes are not using the block. It is
- # nonblocking and will throw an exception if we
- # can't get it, which is fine because that means
- # we just won't try to delete it.
- #
- # I should note here, the file locking is not
- # strictly necessary, we could just remove it and
- # the kernel would ensure that the underlying
- # inode remains available as long as other
- # processes still have the file open. However, if
- # you have multiple processes sharing the cache
- # and deleting each other's files, you'll end up
- # with a bunch of ghost files that don't show up
- # in the file system but are still taking up
- # space, which isn't particularly user friendly.
- # The locking strategy ensures that cache blocks
- # in use remain visible.
- #
- fcntl.flock(self.filehandle, fcntl.LOCK_EX | fcntl.LOCK_NB)
-
- os.remove(final)
- return True
- except OSError:
- pass
- finally:
- self.filehandle = None
- self.linger = weakref.ref(self.content)
- self.content = None
- return False
+ fcntl.flock(self.filehandle, fcntl.LOCK_EX | fcntl.LOCK_NB)
- def gone(self):
- # Test if an evicted object is lingering
- return self.content is None and (self.linger is None or self.linger() is None)
+ os.remove(final)
+ return True
+ except OSError:
+ pass
+ finally:
+ self.filehandle = None
+ self.content = None
@staticmethod
def get_from_disk(locator, cachedir):
# Map in all the files we found, up to maxslots, if we exceed
# maxslots, start throwing things out.
- cachelist = []
+ cachelist: collections.OrderedDict = collections.OrderedDict()
for b in blocks:
got = DiskCacheSlot.get_from_disk(b[0], cachedir)
if got is None:
continue
if len(cachelist) < maxslots:
- cachelist.append(got)
+ cachelist[got.locator] = got
else:
# we found more blocks than maxslots, try to
# throw it out of the cache.
class KeepBlockCache(object):
def __init__(self, cache_max=0, max_slots=0, disk_cache=False, disk_cache_dir=None):
self.cache_max = cache_max
- self._cache = []
+ self._cache = collections.OrderedDict()
self._cache_lock = threading.Lock()
self._max_slots = max_slots
self._disk_cache = disk_cache
self.cache_max = max(self.cache_max, 64 * 1024 * 1024)
+ self.cache_total = 0
if self._disk_cache:
self._cache = arvados.diskcache.DiskCacheSlot.init_cache(self._disk_cache_dir, self._max_slots)
+ for slot in self._cache.values():
+ self.cache_total += slot.size()
self.cap_cache()
-
class CacheSlot(object):
__slots__ = ("locator", "ready", "content")
return self.content
def set(self, value):
+ if self.content is not None:
+ return False
self.content = value
self.ready.set()
+ return True
def size(self):
if self.content is None:
def evict(self):
self.content = None
- return self.gone()
- def gone(self):
- return (self.content is None)
def _resize_cache(self, cache_max, max_slots):
# Try and make sure the contents of the cache do not exceed
# the supplied maximums.
- # Select all slots except those where ready.is_set() and content is
- # None (that means there was an error reading the block).
- self._cache = [c for c in self._cache if not (c.ready.is_set() and c.content is None)]
- sm = sum([slot.size() for slot in self._cache])
- while len(self._cache) > 0 and (sm > cache_max or len(self._cache) > max_slots):
- for i in range(len(self._cache)-1, -1, -1):
- # start from the back, find a slot that is a candidate to evict
- if self._cache[i].ready.is_set():
- sz = self._cache[i].size()
-
- # If evict returns false it means the
- # underlying disk cache couldn't lock the file
- # for deletion because another process was using
- # it. Don't count it as reducing the amount
- # of data in the cache, find something else to
- # throw out.
- if self._cache[i].evict():
- sm -= sz
-
- # check to make sure the underlying data is gone
- if self._cache[i].gone():
- # either way we forget about it. either the
- # other process will delete it, or if we need
- # it again and it is still there, we'll find
- # it on disk.
- del self._cache[i]
- break
+ if self.cache_total <= cache_max and len(self._cache) <= max_slots:
+ return
+
+ _evict_candidates = collections.deque(self._cache.values())
+ while _evict_candidates and (self.cache_total > cache_max or len(self._cache) > max_slots):
+ slot = _evict_candidates.popleft()
+ if not slot.ready.is_set():
+ continue
+
+ sz = slot.size()
+ slot.evict()
+ self.cache_total -= sz
+ del self._cache[slot.locator]
def cap_cache(self):
def _get(self, locator):
# Test if the locator is already in the cache
- for i in range(0, len(self._cache)):
- if self._cache[i].locator == locator:
- n = self._cache[i]
- if i != 0:
- # move it to the front
- del self._cache[i]
- self._cache.insert(0, n)
- return n
+ if locator in self._cache:
+ n = self._cache[locator]
+ if n.ready.is_set() and n.content is None:
+ del self._cache[n.locator]
+ return None
+ self._cache.move_to_end(locator)
+ return n
if self._disk_cache:
# see if it exists on disk
n = arvados.diskcache.DiskCacheSlot.get_from_disk(locator, self._disk_cache_dir)
if n is not None:
- self._cache.insert(0, n)
+ self._cache[n.locator] = n
+ self.cache_total += n.size()
return n
return None
n = arvados.diskcache.DiskCacheSlot(locator, self._disk_cache_dir)
else:
n = KeepBlockCache.CacheSlot(locator)
- self._cache.insert(0, n)
+ self._cache[n.locator] = n
return n, True
def set(self, slot, blob):
try:
- slot.set(blob)
+ if slot.set(blob):
+ self.cache_total += slot.size()
return
except OSError as e:
if e.errno == errno.ENOMEM:
elif e.errno == errno.ENOSPC:
# Reduce disk max space to current - 256 MiB, cap cache and retry
with self._cache_lock:
- sm = sum([st.size() for st in self._cache])
+ sm = sum(st.size() for st in self._cache.values())
self.cache_max = max((256 * 1024 * 1024), sm - (256 * 1024 * 1024))
elif e.errno == errno.ENODEV:
_logger.error("Unable to use disk cache: The underlying filesystem does not support memory mapping.")
# exception handler adjusts limits downward in some cases
# to free up resources, which would make the operation
# succeed.
- slot.set(blob)
+ if slot.set(blob):
+ self.cache_total += slot.size()
except Exception as e:
# It failed again. Give up.
slot.set(None)
self.misses_counter = Counter()
self._storage_classes_unsupported_warning = False
self._default_classes = []
- self.num_prefetch_threads = num_prefetch_threads or 2
+ if num_prefetch_threads is not None:
+ self.num_prefetch_threads = num_prefetch_threads
+ else:
+ self.num_prefetch_threads = 2
self._prefetch_queue = None
self._prefetch_threads = None
# result, so if it is already in flight return
# immediately. Clear 'slot' to prevent
# finally block from calling slot.set()
+ if slot.ready.is_set():
+ slot.get()
slot = None
return None
does not block.
"""
+ if self.block_cache.get(locator) is not None:
+ return
+
self._start_prefetch_threads()
self._prefetch_queue.put(locator)
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
- return read_version(setup_dir, module)
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
if __name__ == '__main__':
- print(get_version(SETUP_DIR, "arvados"))
+ print(get_version())
from setuptools import setup, find_packages
from setuptools.command import build_py
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "arvados")
-
-short_tests_only = False
-if '--short-tests-only' in sys.argv:
- short_tests_only = True
- sys.argv.remove('--short-tests-only')
+version = arvados_version.get_version()
+short_tests_only = arvados_version.short_tests_only()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
class BuildPython(build_py.build_py):
"""Extend setuptools `build_py` to generate API documentation
('share/doc/arvados-python-client', ['LICENSE-2.0.txt', 'README.rst']),
],
install_requires=[
+ *arvados_version.iter_dependencies(version),
'ciso8601 >=2.0.0',
'future',
- 'google-api-core <2.11.0', # 2.11.0rc1 is incompatible with google-auth<2
'google-api-python-client >=2.1.0',
- 'google-auth <2',
- 'httplib2 >=0.9.2, <0.20.2',
- 'protobuf <4.0.0dev',
- 'pycurl >=7.19.5.1, <7.45.0',
- 'pyparsing <3',
- 'ruamel.yaml >=0.15.54, <0.17.22',
+ 'google-auth',
+ 'httplib2 >=0.9.2',
+ 'pycurl >=7.19.5.1',
'setuptools >=40.3.0',
'websockets >=11.0',
],
'Programming Language :: Python :: 3',
],
test_suite='tests',
- tests_require=['pbr<1.7.0', 'mock>=1.0,<4', 'PyYAML', 'parameterized'],
+ tests_require=['PyYAML', 'parameterized'],
zip_safe=False
)
from future import standard_library
standard_library.install_aliases()
-from builtins import str
-from builtins import range
-from builtins import object
import arvados
import contextlib
import errno
import http.client
import httplib2
import io
-import mock
import os
import pycurl
import queue
import tempfile
import unittest
-if sys.version_info >= (3, 0):
- from io import StringIO, BytesIO
-else:
- from cStringIO import StringIO
- BytesIO = StringIO
+from io import StringIO, BytesIO
+from unittest import mock
# Use this hostname when you want to make sure the traffic will be
# instantly refused. 100::/64 is a dedicated black hole.
import unittest
import urllib.parse as urlparse
-import mock
+from unittest import mock
from . import run_test_server
from apiclient import errors as apiclient_errors
from future.utils import listitems
import io
import logging
-import mock
import os
import re
import shutil
import tempfile
+from unittest import mock
+
import arvados
import arvados.collection as collection
import arvados.commands.get as arv_get
import copy
import hashlib
import logging
-import mock
import os
import subprocess
import sys
import tempfile
import unittest
+
from pathlib import Path
+from unittest import mock
import parameterized
import os
import random
import sys
-import mock
import tempfile
+from unittest import mock
+
import arvados.errors as arv_error
import arvados.commands.ls as arv_ls
from . import run_test_server
import datetime
import json
import logging
-import mock
import multiprocessing
import os
import pwd
import unittest
import uuid
+from unittest import mock
+
import arvados
import arvados.commands.put as arv_put
from . import arvados_testutil as tutil
from builtins import range
from builtins import object
import datetime
-import mock
import os
import unittest
import time
+from unittest import mock
+
import arvados
from arvados._ranges import Range
from arvados.keep import KeepLocator
self.blocks = blocks
self.nocache = nocache
self._keep = ArvadosFileWriterTestCase.MockKeep({})
+ self.prefetch_lookahead = 0
def block_prefetch(self, loc):
pass
with Collection(". 2e9ec317e197819358fbc43afca7d837+8 e8dc4081b13434b45189a720b77b6818+8 0:16:count.txt\n", keep_client=keep) as c:
r = c.open("count.txt", "rb")
self.assertEqual(b"0123", r.read(4))
- self.assertIn("2e9ec317e197819358fbc43afca7d837+8", keep.requests)
- self.assertIn("e8dc4081b13434b45189a720b77b6818+8", keep.requests)
+ self.assertEqual(["2e9ec317e197819358fbc43afca7d837+8",
+ "e8dc4081b13434b45189a720b77b6818+8"], keep.requests)
+
+ def test_prefetch_disabled(self):
+ keep = ArvadosFileWriterTestCase.MockKeep({
+ "2e9ec317e197819358fbc43afca7d837+8": b"01234567",
+ "e8dc4081b13434b45189a720b77b6818+8": b"abcdefgh",
+ })
+ keep.num_prefetch_threads = 0
+ with Collection(". 2e9ec317e197819358fbc43afca7d837+8 e8dc4081b13434b45189a720b77b6818+8 0:16:count.txt\n", keep_client=keep) as c:
+ r = c.open("count.txt", "rb")
+ self.assertEqual(b"0123", r.read(4))
+
+ self.assertEqual(["2e9ec317e197819358fbc43afca7d837+8"], keep.requests)
+
+ def test_prefetch_first_read_only(self):
+ # test behavior that prefetch only happens every 128 reads
+ # check that it doesn't make a prefetch request on the second read
+ keep = ArvadosFileWriterTestCase.MockKeep({
+ "2e9ec317e197819358fbc43afca7d837+8": b"01234567",
+ "e8dc4081b13434b45189a720b77b6818+8": b"abcdefgh",
+ })
+ with Collection(". 2e9ec317e197819358fbc43afca7d837+8 e8dc4081b13434b45189a720b77b6818+8 0:16:count.txt\n", keep_client=keep) as c:
+ r = c.open("count.txt", "rb")
+ self.assertEqual(b"0123", r.read(4))
+ self.assertEqual(b"45", r.read(2))
+ self.assertEqual(["2e9ec317e197819358fbc43afca7d837+8",
+ "e8dc4081b13434b45189a720b77b6818+8",
+ "2e9ec317e197819358fbc43afca7d837+8"], keep.requests)
+ self.assertEqual(3, len(keep.requests))
+
+ def test_prefetch_again(self):
+ # test behavior that prefetch only happens every 128 reads
+ # check that it does make another prefetch request after 128 reads
+ keep = ArvadosFileWriterTestCase.MockKeep({
+ "2e9ec317e197819358fbc43afca7d837+8": b"01234567",
+ "e8dc4081b13434b45189a720b77b6818+8": b"abcdefgh",
+ })
+ with Collection(". 2e9ec317e197819358fbc43afca7d837+8 e8dc4081b13434b45189a720b77b6818+8 0:16:count.txt\n", keep_client=keep) as c:
+ r = c.open("count.txt", "rb")
+ for i in range(0, 129):
+ r.seek(0)
+ self.assertEqual(b"0123", r.read(4))
+ self.assertEqual(["2e9ec317e197819358fbc43afca7d837+8",
+ "e8dc4081b13434b45189a720b77b6818+8",
+ "2e9ec317e197819358fbc43afca7d837+8",
+ "2e9ec317e197819358fbc43afca7d837+8"], keep.requests[0:4])
+ self.assertEqual(["2e9ec317e197819358fbc43afca7d837+8",
+ "2e9ec317e197819358fbc43afca7d837+8",
+ "2e9ec317e197819358fbc43afca7d837+8",
+ "e8dc4081b13434b45189a720b77b6818+8"], keep.requests[127:131])
+ # gets the 1st block 129 times from keep (cache),
+ # and the 2nd block twice to get 131 requests
+ self.assertEqual(131, len(keep.requests))
def test__eq__from_manifest(self):
with Collection('. 781e5e245d69b566979b86e28d23f2c7+10 0:10:count1.txt') as c1:
from builtins import str
from builtins import range
import hashlib
-import mock
import os
import random
import shutil
import threading
import unittest
+from unittest import mock
+
import arvados
import arvados.cache
from . import run_test_server
-
def _random(n):
return bytearray(random.getrandbits(8) for _ in range(n))
from builtins import object
import arvados
import copy
-import mock
import os
import random
import re
import unittest
import parameterized
+from unittest import mock
+
from . import run_test_server
from arvados._ranges import Range, LocatorAndRange
from arvados.collection import Collection, CollectionReader
import json
import logging
-import mock
import queue
import sys
import threading
import time
import unittest
+from unittest import mock
+
import websockets.exceptions as ws_exc
import arvados
import hashlib
import json
import logging
-import mock
import sys
import unittest
import datetime
+from unittest import mock
+
import arvados
import arvados.collection
import arvados.keep
from arvados.http_to_keep import http_to_keep
-import ruamel.yaml as yaml
-
# Turns out there was already "FakeCurl" that serves the same purpose, but
# I wrote this before I knew that. Whoops.
class CurlMock:
from builtins import range
from builtins import object
import hashlib
-import mock
import os
import errno
import pycurl
import time
import unittest
import urllib.parse
+import mmap
+
+from unittest import mock
+from unittest.mock import patch
import parameterized
-@tutil.skip_sleep
-@parameterized.parameterized_class([{"disk_cache": True}, {"disk_cache": False}])
-class KeepStorageClassesTestCase(unittest.TestCase, tutil.ApiClientMock, DiskCacheBase):
- disk_cache = False
-
- def setUp(self):
- self.api_client = self.mock_keep_services(count=2)
- self.keep_client = arvados.KeepClient(api_client=self.api_client, block_cache=self.make_block_cache(self.disk_cache))
- self.data = b'xyzzy'
- self.locator = '1271ed5ef305aadabc605b1609e24c52'
-
- def tearDown(self):
- DiskCacheBase.tearDown(self)
-
- def test_multiple_default_storage_classes_req_header(self):
- api_mock = self.api_client_mock()
- api_mock.config.return_value = {
- 'StorageClasses': {
- 'foo': { 'Default': True },
- 'bar': { 'Default': True },
- 'baz': { 'Default': False }
- }
- }
- api_client = self.mock_keep_services(api_mock=api_mock, count=2)
- keep_client = arvados.KeepClient(api_client=api_client, block_cache=self.make_block_cache(self.disk_cache))
- resp_hdr = {
- 'x-keep-storage-classes-confirmed': 'foo=1, bar=1',
- 'x-keep-replicas-stored': 1
- }
- with tutil.mock_keep_responses(self.locator, 200, **resp_hdr) as mock:
- keep_client.put(self.data, copies=1)
- req_hdr = mock.responses[0]
- self.assertIn(
- 'X-Keep-Storage-Classes: bar, foo', req_hdr.getopt(pycurl.HTTPHEADER))
-
- def test_storage_classes_req_header(self):
- self.assertEqual(
- self.api_client.config()['StorageClasses'],
- {'default': {'Default': True}})
- cases = [
- # requested, expected
- [['foo'], 'X-Keep-Storage-Classes: foo'],
- [['bar', 'foo'], 'X-Keep-Storage-Classes: bar, foo'],
- [[], 'X-Keep-Storage-Classes: default'],
- [None, 'X-Keep-Storage-Classes: default'],
- ]
- for req_classes, expected_header in cases:
- headers = {'x-keep-replicas-stored': 1}
- if req_classes is None or len(req_classes) == 0:
- confirmed_hdr = 'default=1'
- elif len(req_classes) > 0:
- confirmed_hdr = ', '.join(["{}=1".format(cls) for cls in req_classes])
- headers.update({'x-keep-storage-classes-confirmed': confirmed_hdr})
- with tutil.mock_keep_responses(self.locator, 200, **headers) as mock:
- self.keep_client.put(self.data, copies=1, classes=req_classes)
- req_hdr = mock.responses[0]
- self.assertIn(expected_header, req_hdr.getopt(pycurl.HTTPHEADER))
-
- def test_partial_storage_classes_put(self):
- headers = {
- 'x-keep-replicas-stored': 1,
- 'x-keep-storage-classes-confirmed': 'foo=1'}
- with tutil.mock_keep_responses(self.locator, 200, 503, **headers) as mock:
- with self.assertRaises(arvados.errors.KeepWriteError):
- self.keep_client.put(self.data, copies=1, classes=['foo', 'bar'], num_retries=0)
- # 1st request, both classes pending
- req1_headers = mock.responses[0].getopt(pycurl.HTTPHEADER)
- self.assertIn('X-Keep-Storage-Classes: bar, foo', req1_headers)
- # 2nd try, 'foo' class already satisfied
- req2_headers = mock.responses[1].getopt(pycurl.HTTPHEADER)
- self.assertIn('X-Keep-Storage-Classes: bar', req2_headers)
-
- def test_successful_storage_classes_put_requests(self):
- cases = [
- # wanted_copies, wanted_classes, confirmed_copies, confirmed_classes, expected_requests
- [ 1, ['foo'], 1, 'foo=1', 1],
- [ 1, ['foo'], 2, 'foo=2', 1],
- [ 2, ['foo'], 2, 'foo=2', 1],
- [ 2, ['foo'], 1, 'foo=1', 2],
- [ 1, ['foo', 'bar'], 1, 'foo=1, bar=1', 1],
- [ 1, ['foo', 'bar'], 2, 'foo=2, bar=2', 1],
- [ 2, ['foo', 'bar'], 2, 'foo=2, bar=2', 1],
- [ 2, ['foo', 'bar'], 1, 'foo=1, bar=1', 2],
- [ 1, ['foo', 'bar'], 1, None, 1],
- [ 1, ['foo'], 1, None, 1],
- [ 2, ['foo'], 2, None, 1],
- [ 2, ['foo'], 1, None, 2],
- ]
- for w_copies, w_classes, c_copies, c_classes, e_reqs in cases:
- headers = {'x-keep-replicas-stored': c_copies}
- if c_classes is not None:
- headers.update({'x-keep-storage-classes-confirmed': c_classes})
- with tutil.mock_keep_responses(self.locator, 200, 200, **headers) as mock:
- case_desc = 'wanted_copies={}, wanted_classes="{}", confirmed_copies={}, confirmed_classes="{}", expected_requests={}'.format(w_copies, ', '.join(w_classes), c_copies, c_classes, e_reqs)
- self.assertEqual(self.locator,
- self.keep_client.put(self.data, copies=w_copies, classes=w_classes),
- case_desc)
- self.assertEqual(e_reqs, mock.call_count, case_desc)
-
- def test_failed_storage_classes_put_requests(self):
- cases = [
- # wanted_copies, wanted_classes, confirmed_copies, confirmed_classes, return_code
- [ 1, ['foo'], 1, 'bar=1', 200],
- [ 1, ['foo'], 1, None, 503],
- [ 2, ['foo'], 1, 'bar=1, foo=0', 200],
- [ 3, ['foo'], 1, 'bar=1, foo=1', 200],
- [ 3, ['foo', 'bar'], 1, 'bar=2, foo=1', 200],
- ]
- for w_copies, w_classes, c_copies, c_classes, return_code in cases:
- headers = {'x-keep-replicas-stored': c_copies}
- if c_classes is not None:
- headers.update({'x-keep-storage-classes-confirmed': c_classes})
- with tutil.mock_keep_responses(self.locator, return_code, return_code, **headers):
- case_desc = 'wanted_copies={}, wanted_classes="{}", confirmed_copies={}, confirmed_classes="{}"'.format(w_copies, ', '.join(w_classes), c_copies, c_classes)
- with self.assertRaises(arvados.errors.KeepWriteError, msg=case_desc):
- self.keep_client.put(self.data, copies=w_copies, classes=w_classes, num_retries=0)
@tutil.skip_sleep
@parameterized.parameterized_class([{"disk_cache": True}, {"disk_cache": False}])
keep_client.get(self.locator)
- @mock.patch('mmap.mmap')
- def test_disk_cache_retry_write_error(self, mockmmap):
+ def test_disk_cache_retry_write_error(self):
block_cache = arvados.keep.KeepBlockCache(disk_cache=True,
disk_cache_dir=self.disk_cache_dir)
keep_client = arvados.KeepClient(api_client=self.api_client, block_cache=block_cache)
- mockmmap.side_effect = (OSError(errno.ENOSPC, "no space"), self.data)
+ called = False
+ realmmap = mmap.mmap
+ def sideeffect_mmap(*args, **kwargs):
+ nonlocal called
+ if not called:
+ called = True
+ raise OSError(errno.ENOSPC, "no space")
+ else:
+ return realmmap(*args, **kwargs)
- cache_max_before = block_cache.cache_max
+ with patch('mmap.mmap') as mockmmap:
+ mockmmap.side_effect = sideeffect_mmap
- with tutil.mock_keep_responses(self.data, 200) as mock:
- self.assertTrue(tutil.binary_compare(keep_client.get(self.locator), self.data))
+ cache_max_before = block_cache.cache_max
- self.assertIsNotNone(keep_client.get_from_cache(self.locator))
+ with tutil.mock_keep_responses(self.data, 200) as mock:
+ self.assertTrue(tutil.binary_compare(keep_client.get(self.locator), self.data))
+
+ self.assertIsNotNone(keep_client.get_from_cache(self.locator))
with open(os.path.join(self.disk_cache_dir, self.locator[0:3], self.locator+".keepcacheblock"), "rb") as f:
self.assertTrue(tutil.binary_compare(f.read(), self.data))
self.assertTrue(cache_max_before > block_cache.cache_max)
- @mock.patch('mmap.mmap')
- def test_disk_cache_retry_write_error2(self, mockmmap):
+ def test_disk_cache_retry_write_error2(self):
block_cache = arvados.keep.KeepBlockCache(disk_cache=True,
disk_cache_dir=self.disk_cache_dir)
keep_client = arvados.KeepClient(api_client=self.api_client, block_cache=block_cache)
- mockmmap.side_effect = (OSError(errno.ENOMEM, "no memory"), self.data)
+ called = False
+ realmmap = mmap.mmap
+ def sideeffect_mmap(*args, **kwargs):
+ nonlocal called
+ if not called:
+ called = True
+ raise OSError(errno.ENOMEM, "no memory")
+ else:
+ return realmmap(*args, **kwargs)
- slots_before = block_cache._max_slots
+ with patch('mmap.mmap') as mockmmap:
+ mockmmap.side_effect = sideeffect_mmap
- with tutil.mock_keep_responses(self.data, 200) as mock:
- self.assertTrue(tutil.binary_compare(keep_client.get(self.locator), self.data))
+ slots_before = block_cache._max_slots
- self.assertIsNotNone(keep_client.get_from_cache(self.locator))
+ with tutil.mock_keep_responses(self.data, 200) as mock:
+ self.assertTrue(tutil.binary_compare(keep_client.get(self.locator), self.data))
+
+ self.assertIsNotNone(keep_client.get_from_cache(self.locator))
with open(os.path.join(self.disk_cache_dir, self.locator[0:3], self.locator+".keepcacheblock"), "rb") as f:
self.assertTrue(tutil.binary_compare(f.read(), self.data))
import itertools
import unittest
+from unittest import mock
+
import arvados.errors as arv_error
import arvados.retry as arv_retry
-import mock
class RetryLoopTestMixin(object):
@staticmethod
from __future__ import absolute_import
from builtins import object
-import mock
import os
import unittest
import hashlib
from . import arvados_testutil as tutil
from apiclient import http as apiclient_http
+from unittest import mock
@tutil.skip_sleep
class ApiClientRetryTestMixin(object):
#
# SPDX-License-Identifier: Apache-2.0
-import mock
import os
import unittest
+from unittest import mock
+
import arvados
import arvados.collection
--- /dev/null
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+import arvados
+import pycurl
+
+import unittest
+import parameterized
+from . import arvados_testutil as tutil
+from .arvados_testutil import DiskCacheBase
+
+@tutil.skip_sleep
+@parameterized.parameterized_class([{"disk_cache": True}, {"disk_cache": False}])
+class KeepStorageClassesTestCase(unittest.TestCase, tutil.ApiClientMock, DiskCacheBase):
+ disk_cache = False
+
+ def setUp(self):
+ self.api_client = self.mock_keep_services(count=2)
+ self.keep_client = arvados.KeepClient(api_client=self.api_client, block_cache=self.make_block_cache(self.disk_cache))
+ self.data = b'xyzzy'
+ self.locator = '1271ed5ef305aadabc605b1609e24c52'
+
+ def tearDown(self):
+ DiskCacheBase.tearDown(self)
+
+ def test_multiple_default_storage_classes_req_header(self):
+ api_mock = self.api_client_mock()
+ api_mock.config.return_value = {
+ 'StorageClasses': {
+ 'foo': { 'Default': True },
+ 'bar': { 'Default': True },
+ 'baz': { 'Default': False }
+ }
+ }
+ api_client = self.mock_keep_services(api_mock=api_mock, count=2)
+ keep_client = arvados.KeepClient(api_client=api_client, block_cache=self.make_block_cache(self.disk_cache))
+ resp_hdr = {
+ 'x-keep-storage-classes-confirmed': 'foo=1, bar=1',
+ 'x-keep-replicas-stored': 1
+ }
+ with tutil.mock_keep_responses(self.locator, 200, **resp_hdr) as mock:
+ keep_client.put(self.data, copies=1)
+ req_hdr = mock.responses[0]
+ self.assertIn(
+ 'X-Keep-Storage-Classes: bar, foo', req_hdr.getopt(pycurl.HTTPHEADER))
+
+ def test_storage_classes_req_header(self):
+ self.assertEqual(
+ self.api_client.config()['StorageClasses'],
+ {'default': {'Default': True}})
+ cases = [
+ # requested, expected
+ [['foo'], 'X-Keep-Storage-Classes: foo'],
+ [['bar', 'foo'], 'X-Keep-Storage-Classes: bar, foo'],
+ [[], 'X-Keep-Storage-Classes: default'],
+ [None, 'X-Keep-Storage-Classes: default'],
+ ]
+ for req_classes, expected_header in cases:
+ headers = {'x-keep-replicas-stored': 1}
+ if req_classes is None or len(req_classes) == 0:
+ confirmed_hdr = 'default=1'
+ elif len(req_classes) > 0:
+ confirmed_hdr = ', '.join(["{}=1".format(cls) for cls in req_classes])
+ headers.update({'x-keep-storage-classes-confirmed': confirmed_hdr})
+ with tutil.mock_keep_responses(self.locator, 200, **headers) as mock:
+ self.keep_client.put(self.data, copies=1, classes=req_classes)
+ req_hdr = mock.responses[0]
+ self.assertIn(expected_header, req_hdr.getopt(pycurl.HTTPHEADER))
+
+ def test_partial_storage_classes_put(self):
+ headers = {
+ 'x-keep-replicas-stored': 1,
+ 'x-keep-storage-classes-confirmed': 'foo=1'}
+ with tutil.mock_keep_responses(self.locator, 200, 503, **headers) as mock:
+ with self.assertRaises(arvados.errors.KeepWriteError):
+ self.keep_client.put(self.data, copies=1, classes=['foo', 'bar'], num_retries=0)
+ # 1st request, both classes pending
+ req1_headers = mock.responses[0].getopt(pycurl.HTTPHEADER)
+ self.assertIn('X-Keep-Storage-Classes: bar, foo', req1_headers)
+ # 2nd try, 'foo' class already satisfied
+ req2_headers = mock.responses[1].getopt(pycurl.HTTPHEADER)
+ self.assertIn('X-Keep-Storage-Classes: bar', req2_headers)
+
+ def test_successful_storage_classes_put_requests(self):
+ cases = [
+ # wanted_copies, wanted_classes, confirmed_copies, confirmed_classes, expected_requests
+ [ 1, ['foo'], 1, 'foo=1', 1],
+ [ 1, ['foo'], 2, 'foo=2', 1],
+ [ 2, ['foo'], 2, 'foo=2', 1],
+ [ 2, ['foo'], 1, 'foo=1', 2],
+ [ 1, ['foo', 'bar'], 1, 'foo=1, bar=1', 1],
+ [ 1, ['foo', 'bar'], 2, 'foo=2, bar=2', 1],
+ [ 2, ['foo', 'bar'], 2, 'foo=2, bar=2', 1],
+ [ 2, ['foo', 'bar'], 1, 'foo=1, bar=1', 2],
+ [ 1, ['foo', 'bar'], 1, None, 1],
+ [ 1, ['foo'], 1, None, 1],
+ [ 2, ['foo'], 2, None, 1],
+ [ 2, ['foo'], 1, None, 2],
+ ]
+ for w_copies, w_classes, c_copies, c_classes, e_reqs in cases:
+ headers = {'x-keep-replicas-stored': c_copies}
+ if c_classes is not None:
+ headers.update({'x-keep-storage-classes-confirmed': c_classes})
+ with tutil.mock_keep_responses(self.locator, 200, 200, **headers) as mock:
+ case_desc = 'wanted_copies={}, wanted_classes="{}", confirmed_copies={}, confirmed_classes="{}", expected_requests={}'.format(w_copies, ', '.join(w_classes), c_copies, c_classes, e_reqs)
+ self.assertEqual(self.locator,
+ self.keep_client.put(self.data, copies=w_copies, classes=w_classes),
+ case_desc)
+ self.assertEqual(e_reqs, mock.call_count, case_desc)
+
+ def test_failed_storage_classes_put_requests(self):
+ cases = [
+ # wanted_copies, wanted_classes, confirmed_copies, confirmed_classes, return_code
+ [ 1, ['foo'], 1, 'bar=1', 200],
+ [ 1, ['foo'], 1, None, 503],
+ [ 2, ['foo'], 1, 'bar=1, foo=0', 200],
+ [ 3, ['foo'], 1, 'bar=1, foo=1', 200],
+ [ 3, ['foo', 'bar'], 1, 'bar=2, foo=1', 200],
+ ]
+ for w_copies, w_classes, c_copies, c_classes, return_code in cases:
+ headers = {'x-keep-replicas-stored': c_copies}
+ if c_classes is not None:
+ headers.update({'x-keep-storage-classes-confirmed': c_classes})
+ with tutil.mock_keep_responses(self.locator, return_code, return_code, **headers):
+ case_desc = 'wanted_copies={}, wanted_classes="{}", confirmed_copies={}, confirmed_classes="{}"'.format(w_copies, ', '.join(w_classes), c_copies, c_classes)
+ with self.assertRaises(arvados.errors.KeepWriteError, msg=case_desc):
+ self.keep_client.put(self.data, copies=w_copies, classes=w_classes, num_retries=0)
import bz2
import gzip
import io
-import mock
import os
import unittest
import hashlib
+from unittest import mock
+
import arvados
from arvados import StreamReader, StreamFileReader
from arvados._ranges import Range
import arvados
import unittest
-import mock
+
+from unittest import mock
from arvados import api, vocabulary
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.0.8)
- actionpack (= 7.0.8)
- activesupport (= 7.0.8)
+ actioncable (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
- actionmailbox (7.0.8)
- actionpack (= 7.0.8)
- activejob (= 7.0.8)
- activerecord (= 7.0.8)
- activestorage (= 7.0.8)
- activesupport (= 7.0.8)
+ actionmailbox (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ activejob (= 7.0.8.1)
+ activerecord (= 7.0.8.1)
+ activestorage (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
- actionmailer (7.0.8)
- actionpack (= 7.0.8)
- actionview (= 7.0.8)
- activejob (= 7.0.8)
- activesupport (= 7.0.8)
+ actionmailer (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ actionview (= 7.0.8.1)
+ activejob (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0)
- actionpack (7.0.8)
- actionview (= 7.0.8)
- activesupport (= 7.0.8)
+ actionpack (7.0.8.1)
+ actionview (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
rack (~> 2.0, >= 2.2.4)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
- actiontext (7.0.8)
- actionpack (= 7.0.8)
- activerecord (= 7.0.8)
- activestorage (= 7.0.8)
- activesupport (= 7.0.8)
+ actiontext (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ activerecord (= 7.0.8.1)
+ activestorage (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.0.8)
- activesupport (= 7.0.8)
+ actionview (7.0.8.1)
+ activesupport (= 7.0.8.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
- activejob (7.0.8)
- activesupport (= 7.0.8)
+ activejob (7.0.8.1)
+ activesupport (= 7.0.8.1)
globalid (>= 0.3.6)
- activemodel (7.0.8)
- activesupport (= 7.0.8)
- activerecord (7.0.8)
- activemodel (= 7.0.8)
- activesupport (= 7.0.8)
- activestorage (7.0.8)
- actionpack (= 7.0.8)
- activejob (= 7.0.8)
- activerecord (= 7.0.8)
- activesupport (= 7.0.8)
+ activemodel (7.0.8.1)
+ activesupport (= 7.0.8.1)
+ activerecord (7.0.8.1)
+ activemodel (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
+ activestorage (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ activejob (= 7.0.8.1)
+ activerecord (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
- activesupport (7.0.8)
+ activesupport (7.0.8.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
byebug (11.1.3)
concurrent-ruby (1.2.3)
crass (1.0.6)
- date (3.3.3)
+ date (3.3.4)
docile (1.4.0)
erubi (1.12.0)
extlib (0.9.16)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
httpclient (2.8.3)
- i18n (1.14.1)
+ i18n (1.14.4)
concurrent-ruby (~> 1.0)
jquery-rails (4.6.0)
rails-dom-testing (>= 1, < 3)
railties (>= 4)
request_store (~> 1.0)
logstash-event (1.2.02)
- loofah (2.21.3)
+ loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
net-imap
net-pop
net-smtp
- marcel (1.0.2)
+ marcel (1.0.4)
method_source (1.0.0)
mini_mime (1.1.5)
- mini_portile2 (2.8.4)
+ mini_portile2 (2.8.5)
minitest (5.10.3)
mocha (2.1.0)
ruby2_keywords (>= 0.0.5)
net-protocol
net-pop (0.1.2)
net-protocol
- net-protocol (0.2.1)
+ net-protocol (0.2.2)
timeout
- net-smtp (0.4.0)
+ net-smtp (0.5.0)
net-protocol
- nio4r (2.5.9)
- nokogiri (1.15.4)
+ nio4r (2.7.1)
+ nokogiri (1.15.6)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.1)
pg (1.5.4)
power_assert (2.0.3)
public_suffix (5.0.4)
- racc (1.7.1)
- rack (2.2.8)
+ racc (1.7.3)
+ rack (2.2.9)
rack-test (2.1.0)
rack (>= 1.3)
- rails (7.0.8)
- actioncable (= 7.0.8)
- actionmailbox (= 7.0.8)
- actionmailer (= 7.0.8)
- actionpack (= 7.0.8)
- actiontext (= 7.0.8)
- actionview (= 7.0.8)
- activejob (= 7.0.8)
- activemodel (= 7.0.8)
- activerecord (= 7.0.8)
- activestorage (= 7.0.8)
- activesupport (= 7.0.8)
+ rails (7.0.8.1)
+ actioncable (= 7.0.8.1)
+ actionmailbox (= 7.0.8.1)
+ actionmailer (= 7.0.8.1)
+ actionpack (= 7.0.8.1)
+ actiontext (= 7.0.8.1)
+ actionview (= 7.0.8.1)
+ activejob (= 7.0.8.1)
+ activemodel (= 7.0.8.1)
+ activerecord (= 7.0.8.1)
+ activestorage (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
bundler (>= 1.15.0)
- railties (= 7.0.8)
+ railties (= 7.0.8.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
rails-observers (0.1.5)
activemodel (>= 4.0)
rails-perftest (0.0.7)
- railties (7.0.8)
- actionpack (= 7.0.8)
- activesupport (= 7.0.8)
+ railties (7.0.8.1)
+ actionpack (= 7.0.8.1)
+ activesupport (= 7.0.8.1)
method_source
rake (>= 12.2)
thor (~> 1.0)
zeitwerk (~> 2.5)
- rake (13.0.6)
+ rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
sprockets (>= 3.0.0)
test-unit (3.6.1)
power_assert
- thor (1.2.2)
- timeout (0.4.0)
+ thor (1.3.1)
+ timeout (0.4.1)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
webrick (1.8.1)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
- zeitwerk (2.6.11)
+ zeitwerk (2.6.13)
zlib (3.1.0)
PLATFORMS
webrick
BUNDLED WITH
- 2.4.19
+ 2.4.22
raise "remote cluster #{upstream_cluster_id} returned invalid token uuid #{token_uuid.inspect}"
end
rescue HTTPClient::BadResponseError => e
+ if e.res.status_code >= 400 && e.res.status_code < 500
+ # Remote cluster does not accept this token.
+ return nil
+ end
# CurrentApiToken#call and ApplicationController#render_error will
# propagate the status code from the #http_status method, so define
# that here.
end
rescue ActiveRecord::RecordNotUnique
Rails.logger.debug("cached remote token #{token_uuid} already exists, retrying...")
- # Some other request won the race: retry just once before erroring out
- if (retries += 1) <= 1
+ # Another request won the race (trying to find_or_create the
+ # same token UUID) ...and/or... there is an expired entry with
+ # the same secret but a different UUID (e.g., the token is an
+ # OIDC access token and [a] our database has an expired cached
+ # row that was not used above, and [b] the remote cluster had
+ # deleted its expired cached row so it assigned a new UUID).
+ #
+ # Delete any conflicting row if any. Retry twice (in case we
+ # hit both of those situations at once), then give up.
+ if (retries += 1) <= 2
+ ApiClientAuthorization.where('api_token=? and uuid<>?', stored_secret, token_uuid).delete_all
retry
else
Rails.logger.warn("cannot find or create cached remote token #{token_uuid}")
--- /dev/null
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+require 'test_helper'
+
+class BundlerVersionTest < ActionDispatch::IntegrationTest
+ test "Bundler version matches expectations" do
+ # The expected version range should be the latest that supports all the
+ # versions of Ruby we intend to support. This test checks that a developer
+ # doesn't accidentally update Bundler past that point.
+ expected = Gem::Dependency.new("", "~> 2.4.22")
+ actual = Bundler.gem_version
+ assert(
+ expected.match?("", actual),
+ "Bundler version #{actual} did not match #{expected}",
+ )
+ end
+end
res.status = @stub_token_status
if res.status == 200
body = {
- uuid: api_client_authorizations(:active).uuid.sub('zzzzz', clusterid),
+ uuid: @stub_token_uuid || api_client_authorizations(:active).uuid.sub('zzzzz', clusterid),
owner_uuid: "#{clusterid}-tpzed-00000000000000z",
scopes: @stub_token_scopes,
}
}
@stub_token_status = 200
@stub_token_scopes = ["all"]
+ @stub_token_uuid = nil
ActionMailer::Base.deliveries = []
end
assert_equal 'foo', json_response['username']
end
+ test 'authenticate with remote token with secret part identical to previously cached token' do
+ get '/arvados/v1/users/current',
+ params: {format: 'json'},
+ headers: auth(remote: 'zbbbb')
+ assert_response :success
+ get '/arvados/v1/api_client_authorizations/current',
+ params: {format: 'json'},
+ headers: auth(remote: 'zbbbb')
+ assert_response :success
+
+ # Expire the cached token.
+ @cached_token_uuid = json_response['uuid']
+ act_as_system_user do
+ ApiClientAuthorization.where(uuid: @cached_token_uuid).update_all(expires_at: db_current_time() - 1.day)
+ end
+
+ # Now use the same bare token, but set up the remote cluster to
+ # return a different UUID this time.
+ @stub_token_uuid = 'zbbbb-gj3su-123451234512345'
+ get '/arvados/v1/users/current',
+ params: {format: 'json'},
+ headers: auth(remote: 'zbbbb')
+ assert_response :success
+
+ # Confirm that we actually retrieved the new UUID from the stub
+ # cluster -- otherwise we didn't really test the conflicting-UUID
+ # case.
+ get '/arvados/v1/api_client_authorizations/current',
+ params: {format: 'json'},
+ headers: auth(remote: 'zbbbb')
+ assert_response :success
+ assert_equal @stub_token_uuid, json_response['uuid']
+ end
+
test 'authenticate with remote token from misbehaving remote cluster' do
get '/arvados/v1/users/current',
params: {format: 'json'},
assert_equal 'zzzzz-tpzed-anonymouspublic', json_response['uuid']
end
- [401, 403, 422, 500, 502, 503].each do |status|
- test "propagate #{status} response from getting remote token" do
+ [400, 401, 403, 422, 500, 502, 503].each do |status|
+ test "handle #{status} response when checking remote-provided v2 token" do
@stub_token_status = status
get "/arvados/v1/users/#{@stub_content[:uuid]}",
params: {format: "json"},
headers: auth(remote: "zbbbb")
- assert_response status
+ assert_response(status < 500 ? 401 : status)
+ end
+
+ test "handle #{status} response when checking remote-provided v2 token at anonymously accessible endpoint" do
+ @stub_token_status = status
+ get "/arvados/v1/keep_services/accessible",
+ params: {format: "json"},
+ headers: auth(remote: "zbbbb")
+ assert_response(status < 500 ? :success : status)
+ end
+
+ test "handle #{status} response when checking token issued by login cluster" do
+ @stub_token_status = status
+ Rails.configuration.Login.LoginCluster = "zbbbb"
+ get "/arvados/v1/users/current",
+ params: {format: "json"},
+ headers: {'HTTP_AUTHORIZATION' => "Bearer badtoken"}
+ assert_response(status < 500 ? 401 : status)
end
+ test "handle #{status} response when checking token issued by login cluster at anonymously accessible endpoint" do
+ @stub_token_status = status
+ Rails.configuration.Login.LoginCluster = "zbbbb"
+ get "/arvados/v1/keep_services/accessible",
+ params: {format: "json"},
+ headers: {'HTTP_AUTHORIZATION' => "Bearer badtoken"}
+ assert_response(status < 500 ? :success : status)
+ end
+ end
+
+ [401, 403, 422, 500, 502, 503].each do |status|
test "propagate #{status} response from getting uncached user" do
@stub_status = status
get "/arvados/v1/users/#{@stub_content[:uuid]}",
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
+
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
- return read_version(setup_dir, module)
+# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
+if __name__ == '__main__':
+ print(get_version())
from setuptools import setup, find_packages
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "arvados_docker")
-
-short_tests_only = False
-if '--short-tests-only' in sys.argv:
- short_tests_only = True
- sys.argv.remove('--short-tests-only')
+version = arvados_version.get_version()
+short_tests_only = arvados_version.short_tests_only()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
setup(name="arvados-docker-cleaner",
version=version,
('share/doc/arvados-docker-cleaner', ['agpl-3.0.txt', 'arvados-docker-cleaner.service']),
],
install_requires=[
+ *arvados_version.iter_dependencies(version),
'docker>=6.1.0',
'setuptools',
],
The FUSE driver supports the Arvados event bus. When an event is received for
an object that is live in the inode cache, that object is immediately updated.
+Implementation note: in the code, the terms 'object', 'entry' and
+'inode' are used somewhat interchangeably, but generally mean an
+arvados_fuse.File or arvados_fuse.Directory object which has numeric
+inode assigned to it and appears in the Inodes._entries dictionary.
+
"""
from __future__ import absolute_import
from __future__ import division
-from future.utils import viewitems
-from future.utils import native
-from future.utils import listvalues
-from future.utils import listitems
-from future import standard_library
-standard_library.install_aliases()
from builtins import next
from builtins import str
from builtins import object
import arvados.keep
from prometheus_client import Summary
import queue
-
-# Default _notify_queue has a limit of 1000 items, but it really needs to be
-# unlimited to avoid deadlocks, see https://arvados.org/issues/3198#note-43 for
-# details.
-
-if hasattr(llfuse, 'capi'):
- # llfuse < 0.42
- llfuse.capi._notify_queue = queue.Queue()
-else:
- # llfuse >= 0.42
- llfuse._notify_queue = queue.Queue()
-
-LLFUSE_VERSION_0 = llfuse.__version__.startswith('0')
+from dataclasses import dataclass
+import typing
from .fusedir import Directory, CollectionDirectory, TmpCollectionDirectory, MagicDirectory, TagsDirectory, ProjectDirectory, SharedDirectory, CollectionDirectoryBase
-from .fusefile import StringFile, FuseArvadosFile
+from .fusefile import File, StringFile, FuseArvadosFile
_logger = logging.getLogger('arvados.arvados_fuse')
class DirectoryHandle(Handle):
"""Connects a numeric file handle to a Directory object that has
- been opened by the client."""
+ been opened by the client.
+
+ DirectoryHandle is used by opendir() and readdir() to get
+ directory listings. Entries returned by readdir() don't increment
+ the lookup count (kernel references), so increment our internal
+ "use count" to avoid having an item being removed mid-read.
+
+ """
def __init__(self, fh, dirobj, entries):
super(DirectoryHandle, self).__init__(fh, dirobj)
self.entries = entries
+ for ent in self.entries:
+ ent[1].inc_use()
+
+ def release(self):
+ for ent in self.entries:
+ ent[1].dec_use()
+ super(DirectoryHandle, self).release()
+
class InodeCache(object):
"""Records the memory footprint of objects and when they are last used.
- When the cache limit is exceeded, the least recently used objects are
- cleared. Clearing the object means discarding its contents to release
- memory. The next time the object is accessed, it must be re-fetched from
- the server. Note that the inode cache limit is a soft limit; the cache
- limit may be exceeded if necessary to load very large objects, it may also
- be exceeded if open file handles prevent objects from being cleared.
+ When the cache limit is exceeded, the least recently used objects
+ are cleared. Clearing the object means discarding its contents to
+ release memory. The next time the object is accessed, it must be
+ re-fetched from the server. Note that the inode cache limit is a
+ soft limit; the cache limit may be exceeded if necessary to load
+ very large projects or collections, it may also be exceeded if an
+ inode can't be safely discarded based on kernel lookups
+ (has_ref()) or internal use count (in_use()).
"""
def __init__(self, cap, min_entries=4):
- self._entries = collections.OrderedDict()
- self._by_uuid = {}
+ # Standard dictionaries are ordered, but OrderedDict is still better here, see
+ # https://docs.python.org/3.11/library/collections.html#ordereddict-objects
+ # specifically we use move_to_end() which standard dicts don't have.
+ self._cache_entries = collections.OrderedDict()
self.cap = cap
self._total = 0
self.min_entries = min_entries
def total(self):
return self._total
- def _remove(self, obj, clear):
- if clear:
- # Kernel behavior seems to be that if a file is
- # referenced, its parents remain referenced too. This
- # means has_ref() exits early when a collection is not
- # candidate for eviction.
- #
- # By contrast, in_use() doesn't increment references on
- # parents, so it requires a full tree walk to determine if
- # a collection is a candidate for eviction. This takes
- # .07s for 240000 files, which becomes a major drag when
- # cap_cache is being called several times a second and
- # there are multiple non-evictable collections in the
- # cache.
- #
- # So it is important for performance that we do the
- # has_ref() check first.
-
- if obj.has_ref(True):
- _logger.debug("InodeCache cannot clear inode %i, still referenced", obj.inode)
- return
+ def evict_candidates(self):
+ """Yield entries that are candidates to be evicted
+ and stop when the cache total has shrunk sufficiently.
- if obj.in_use():
- _logger.debug("InodeCache cannot clear inode %i, in use", obj.inode)
- return
+ Implements a LRU cache, when an item is added or touch()ed it
+ goes to the back of the OrderedDict, so items in the front are
+ oldest. The Inodes._remove() function determines if the entry
+ can actually be removed safely.
- obj.kernel_invalidate()
- _logger.debug("InodeCache sent kernel invalidate inode %i", obj.inode)
- obj.clear()
+ """
- # The llfuse lock is released in del_entry(), which is called by
- # Directory.clear(). While the llfuse lock is released, it can happen
- # that a reentrant call removes this entry before this call gets to it.
- # Ensure that the entry is still valid before trying to remove it.
- if obj.inode not in self._entries:
+ if self._total <= self.cap:
return
- self._total -= obj.cache_size
- del self._entries[obj.inode]
- if obj.cache_uuid:
- self._by_uuid[obj.cache_uuid].remove(obj)
- if not self._by_uuid[obj.cache_uuid]:
- del self._by_uuid[obj.cache_uuid]
- obj.cache_uuid = None
- if clear:
- _logger.debug("InodeCache cleared inode %i total now %i", obj.inode, self._total)
+ _logger.debug("InodeCache evict_candidates total %i cap %i entries %i", self._total, self.cap, len(self._cache_entries))
- def cap_cache(self):
- if self._total > self.cap:
- for ent in listvalues(self._entries):
- if self._total < self.cap or len(self._entries) < self.min_entries:
- break
- self._remove(ent, True)
-
- def manage(self, obj):
- if obj.persisted():
- obj.cache_size = obj.objsize()
- self._entries[obj.inode] = obj
- obj.cache_uuid = obj.uuid()
- if obj.cache_uuid:
- if obj.cache_uuid not in self._by_uuid:
- self._by_uuid[obj.cache_uuid] = [obj]
- else:
- if obj not in self._by_uuid[obj.cache_uuid]:
- self._by_uuid[obj.cache_uuid].append(obj)
- self._total += obj.objsize()
- _logger.debug("InodeCache touched inode %i (size %i) (uuid %s) total now %i (%i entries)",
- obj.inode, obj.objsize(), obj.cache_uuid, self._total, len(self._entries))
- self.cap_cache()
+ # Copy this into a deque for two reasons:
+ #
+ # 1. _cache_entries is modified by unmanage() which is called
+ # by _remove
+ #
+ # 2. popping off the front means the reference goes away
+ # immediately intead of sticking around for the lifetime of
+ # "values"
+ values = collections.deque(self._cache_entries.values())
- def touch(self, obj):
- if obj.persisted():
- if obj.inode in self._entries:
- self._remove(obj, False)
- self.manage(obj)
+ while values:
+ if self._total < self.cap or len(self._cache_entries) < self.min_entries:
+ break
+ yield values.popleft()
- def unmanage(self, obj):
- if obj.persisted() and obj.inode in self._entries:
- self._remove(obj, True)
+ def unmanage(self, entry):
+ """Stop managing an object in the cache.
- def find_by_uuid(self, uuid):
- return self._by_uuid.get(uuid, [])
+ This happens when an object is being removed from the inode
+ entries table.
+
+ """
+
+ if entry.inode not in self._cache_entries:
+ return
+
+ # manage cache size running sum
+ self._total -= entry.cache_size
+ entry.cache_size = 0
+
+ # Now forget about it
+ del self._cache_entries[entry.inode]
+
+ def update_cache_size(self, obj):
+ """Update the cache total in response to the footprint of an
+ object changing (usually because it has been loaded or
+ cleared).
+
+ Adds or removes entries to the cache list based on the object
+ cache size.
+
+ """
+
+ if not obj.persisted():
+ return
+
+ if obj.inode in self._cache_entries:
+ self._total -= obj.cache_size
+
+ obj.cache_size = obj.objsize()
+
+ if obj.cache_size > 0 or obj.parent_inode is None:
+ self._total += obj.cache_size
+ self._cache_entries[obj.inode] = obj
+ elif obj.cache_size == 0 and obj.inode in self._cache_entries:
+ del self._cache_entries[obj.inode]
+
+ def touch(self, obj):
+ """Indicate an object was used recently, making it low
+ priority to be removed from the cache.
+
+ """
+ if obj.inode in self._cache_entries:
+ self._cache_entries.move_to_end(obj.inode)
+ return True
+ return False
def clear(self):
- self._entries.clear()
- self._by_uuid.clear()
+ self._cache_entries.clear()
self._total = 0
+@dataclass
+class RemoveInode:
+ entry: typing.Union[Directory, File]
+ def inode_op(self, inodes, locked_ops):
+ if locked_ops is None:
+ inodes._remove(self.entry)
+ return True
+ else:
+ locked_ops.append(self)
+ return False
+
+@dataclass
+class InvalidateInode:
+ inode: int
+ def inode_op(self, inodes, locked_ops):
+ llfuse.invalidate_inode(self.inode)
+ return True
+
+@dataclass
+class InvalidateEntry:
+ inode: int
+ name: str
+ def inode_op(self, inodes, locked_ops):
+ llfuse.invalidate_entry(self.inode, self.name)
+ return True
+
+@dataclass
+class EvictCandidates:
+ def inode_op(self, inodes, locked_ops):
+ return True
+
+
class Inodes(object):
- """Manage the set of inodes. This is the mapping from a numeric id
- to a concrete File or Directory object"""
+ """Manage the set of inodes.
+
+ This is the mapping from a numeric id to a concrete File or
+ Directory object
- def __init__(self, inode_cache, encoding="utf-8"):
+ """
+
+ def __init__(self, inode_cache, encoding="utf-8", fsns=None, shutdown_started=None):
self._entries = {}
self._counter = itertools.count(llfuse.ROOT_INODE)
self.inode_cache = inode_cache
self.encoding = encoding
- self.deferred_invalidations = []
+ self._fsns = fsns
+ self._shutdown_started = shutdown_started or threading.Event()
+
+ self._inode_remove_queue = queue.Queue()
+ self._inode_remove_thread = threading.Thread(None, self._inode_remove)
+ self._inode_remove_thread.daemon = True
+ self._inode_remove_thread.start()
+
+ self.cap_cache_event = threading.Event()
+ self._by_uuid = collections.defaultdict(list)
def __getitem__(self, item):
return self._entries[item]
return iter(self._entries.keys())
def items(self):
- return viewitems(self._entries.items())
+ return self._entries.items()
def __contains__(self, k):
return k in self._entries
def touch(self, entry):
+ """Update the access time, adjust the cache position, and
+ notify the _inode_remove thread to recheck the cache.
+
+ """
+
entry._atime = time.time()
- self.inode_cache.touch(entry)
+ if self.inode_cache.touch(entry):
+ self.cap_cache()
+
+ def cap_cache(self):
+ """Notify the _inode_remove thread to recheck the cache."""
+ if not self.cap_cache_event.is_set():
+ self.cap_cache_event.set()
+ self._inode_remove_queue.put(EvictCandidates())
+
+ def update_uuid(self, entry):
+ """Update the Arvados uuid associated with an inode entry.
+
+ This is used to look up inodes that need to be invalidated
+ when a websocket event indicates the object has changed on the
+ API server.
+
+ """
+ if entry.cache_uuid and entry in self._by_uuid[entry.cache_uuid]:
+ self._by_uuid[entry.cache_uuid].remove(entry)
+
+ entry.cache_uuid = entry.uuid()
+ if entry.cache_uuid and entry not in self._by_uuid[entry.cache_uuid]:
+ self._by_uuid[entry.cache_uuid].append(entry)
+
+ if not self._by_uuid[entry.cache_uuid]:
+ del self._by_uuid[entry.cache_uuid]
def add_entry(self, entry):
+ """Assign a numeric inode to a new entry."""
+
entry.inode = next(self._counter)
if entry.inode == llfuse.ROOT_INODE:
entry.inc_ref()
self._entries[entry.inode] = entry
- self.inode_cache.manage(entry)
+
+ self.update_uuid(entry)
+ self.inode_cache.update_cache_size(entry)
+ self.cap_cache()
return entry
def del_entry(self, entry):
- if entry.ref_count == 0:
- self.inode_cache.unmanage(entry)
- del self._entries[entry.inode]
+ """Remove entry from the inode table.
+
+ Indicate this inode entry is pending deletion by setting
+ parent_inode to None. Notify the _inode_remove thread to try
+ and remove it.
+
+ """
+
+ entry.parent_inode = None
+ self._inode_remove_queue.put(RemoveInode(entry))
+ _logger.debug("del_entry on inode %i with refcount %i", entry.inode, entry.ref_count)
+
+ def _inode_remove(self):
+ """Background thread to handle tasks related to invalidating
+ inodes in the kernel, and removing objects from the inodes
+ table entirely.
+
+ """
+
+ locked_ops = collections.deque()
+ while True:
+ blocking_get = True
+ while True:
+ try:
+ qentry = self._inode_remove_queue.get(blocking_get)
+ except queue.Empty:
+ break
+ blocking_get = False
+ if qentry is None:
+ return
+
+ if self._shutdown_started.is_set():
+ continue
+
+ # Process this entry
+ if qentry.inode_op(self, locked_ops):
+ self._inode_remove_queue.task_done()
+
+ # Give up the reference
+ qentry = None
+
+ with llfuse.lock:
+ while locked_ops:
+ if locked_ops.popleft().inode_op(self, None):
+ self._inode_remove_queue.task_done()
+ self.cap_cache_event.clear()
+ for entry in self.inode_cache.evict_candidates():
+ self._remove(entry)
+
+ def wait_remove_queue_empty(self):
+ # used by tests
+ self._inode_remove_queue.join()
+
+ def _remove(self, entry):
+ """Remove an inode entry if possible.
+
+ If the entry is still referenced or in use, don't do anything.
+ If this is not referenced but the parent is still referenced,
+ clear any data held by the object (which may include directory
+ entries under the object) but don't remove it from the inode
+ table.
+
+ """
+ try:
+ if entry.inode is None:
+ # Removed already
+ return
+
+ if entry.inode == llfuse.ROOT_INODE:
+ return
+
+ if entry.in_use():
+ # referenced internally, stay pinned
+ #_logger.debug("InodeCache cannot clear inode %i, in use", entry.inode)
+ return
+
+ # Tell the kernel it should forget about it
+ entry.kernel_invalidate()
+
+ if entry.has_ref():
+ # has kernel reference, could still be accessed.
+ # when the kernel forgets about it, we can delete it.
+ #_logger.debug("InodeCache cannot clear inode %i, is referenced", entry.inode)
+ return
+
+ # commit any pending changes
with llfuse.lock_released:
entry.finalize()
- entry.inode = None
- else:
- entry.dead = True
- _logger.debug("del_entry on inode %i with refcount %i", entry.inode, entry.ref_count)
+
+ # Clear the contents
+ entry.clear()
+
+ if entry.parent_inode is None:
+ _logger.debug("InodeCache forgetting inode %i, object cache_size %i, cache total %i, forget_inode True, inode entries %i, type %s",
+ entry.inode, entry.cache_size, self.inode_cache.total(),
+ len(self._entries), type(entry))
+
+ if entry.cache_uuid:
+ self._by_uuid[entry.cache_uuid].remove(entry)
+ if not self._by_uuid[entry.cache_uuid]:
+ del self._by_uuid[entry.cache_uuid]
+ entry.cache_uuid = None
+
+ self.inode_cache.unmanage(entry)
+
+ del self._entries[entry.inode]
+ entry.inode = None
+
+ except Exception as e:
+ _logger.exception("failed remove")
def invalidate_inode(self, entry):
- if entry.has_ref(False):
+ if entry.has_ref():
# Only necessary if the kernel has previously done a lookup on this
# inode and hasn't yet forgotten about it.
- llfuse.invalidate_inode(entry.inode)
+ self._inode_remove_queue.put(InvalidateInode(entry.inode))
def invalidate_entry(self, entry, name):
- if entry.has_ref(False):
+ if entry.has_ref():
# Only necessary if the kernel has previously done a lookup on this
# inode and hasn't yet forgotten about it.
- llfuse.invalidate_entry(entry.inode, native(name.encode(self.encoding)))
+ self._inode_remove_queue.put(InvalidateEntry(entry.inode, name.encode(self.encoding)))
+
+ def begin_shutdown(self):
+ self._inode_remove_queue.put(None)
+ if self._inode_remove_thread is not None:
+ self._inode_remove_thread.join()
+ self._inode_remove_thread = None
def clear(self):
+ with llfuse.lock_released:
+ self.begin_shutdown()
+
self.inode_cache.clear()
+ self._by_uuid.clear()
- for k,v in viewitems(self._entries):
+ for k,v in self._entries.items():
try:
v.finalize()
except Exception as e:
self._entries.clear()
+ def forward_slash_subst(self):
+ return self._fsns
+
+ def find_by_uuid(self, uuid):
+ """Return a list of zero or more inode entries corresponding
+ to this Arvados UUID."""
+ return self._by_uuid.get(uuid, [])
+
def catch_exceptions(orig_func):
"""Catch uncaught exceptions and log them consistently."""
rename_time = fuse_time.labels(op='rename')
flush_time = fuse_time.labels(op='flush')
- def __init__(self, uid, gid, api_client, encoding="utf-8", inode_cache=None, num_retries=4, enable_write=False):
+ def __init__(self, uid, gid, api_client, encoding="utf-8", inode_cache=None, num_retries=4, enable_write=False, fsns=None):
super(Operations, self).__init__()
self._api_client = api_client
if not inode_cache:
inode_cache = InodeCache(cap=256*1024*1024)
- self.inodes = Inodes(inode_cache, encoding=encoding)
+
+ if fsns is None:
+ try:
+ fsns = self._api_client.config()["Collections"]["ForwardSlashNameSubstitution"]
+ except KeyError:
+ # old API server with no FSNS config
+ fsns = '_'
+ else:
+ if fsns == '' or fsns == '/':
+ fsns = None
+
+ # If we get overlapping shutdown events (e.g., fusermount -u
+ # -z and operations.destroy()) llfuse calls forget() on inodes
+ # that have already been deleted. To avoid this, we make
+ # forget() a no-op if called after destroy().
+ self._shutdown_started = threading.Event()
+
+ self.inodes = Inodes(inode_cache, encoding=encoding, fsns=fsns,
+ shutdown_started=self._shutdown_started)
self.uid = uid
self.gid = gid
self.enable_write = enable_write
# is fully initialized should wait() on this event object.
self.initlock = threading.Event()
- # If we get overlapping shutdown events (e.g., fusermount -u
- # -z and operations.destroy()) llfuse calls forget() on inodes
- # that have already been deleted. To avoid this, we make
- # forget() a no-op if called after destroy().
- self._shutdown_started = threading.Event()
-
self.num_retries = num_retries
self.read_counter = arvados.keep.Counter()
def metric_count_func(self, opname):
return lambda: int(self.metric_value(opname, "arvmount_fuse_operations_seconds_count"))
+ def begin_shutdown(self):
+ self._shutdown_started.set()
+ self.inodes.begin_shutdown()
+
@destroy_time.time()
@catch_exceptions
def destroy(self):
- self._shutdown_started.set()
+ _logger.debug("arv-mount destroy: start")
+
+ with llfuse.lock_released:
+ self.begin_shutdown()
+
if self.events:
self.events.close()
self.events = None
- # Different versions of llfuse require and forbid us to
- # acquire the lock here. See #8345#note-37, #10805#note-9.
- if LLFUSE_VERSION_0 and llfuse.lock.acquire():
- # llfuse < 0.42
- self.inodes.clear()
- llfuse.lock.release()
- else:
- # llfuse >= 0.42
- self.inodes.clear()
+ self.inodes.clear()
+
+ _logger.debug("arv-mount destroy: complete")
+
def access(self, inode, mode, ctx):
return True
old_attrs = properties.get("old_attributes") or {}
new_attrs = properties.get("new_attributes") or {}
- for item in self.inodes.inode_cache.find_by_uuid(ev["object_uuid"]):
+ for item in self.inodes.find_by_uuid(ev["object_uuid"]):
item.invalidate()
oldowner = old_attrs.get("owner_uuid")
newowner = ev.get("object_owner_uuid")
for parent in (
- self.inodes.inode_cache.find_by_uuid(oldowner) +
- self.inodes.inode_cache.find_by_uuid(newowner)):
+ self.inodes.find_by_uuid(oldowner) +
+ self.inodes.find_by_uuid(newowner)):
parent.invalidate()
@getattr_time.time()
@catch_exceptions
def getattr(self, inode, ctx=None):
if inode not in self.inodes:
+ _logger.debug("arv-mount getattr: inode %i missing", inode)
raise llfuse.FUSEError(errno.ENOENT)
e = self.inodes[inode]
+ self.inodes.touch(e)
+ parent = None
+ if e.parent_inode:
+ parent = self.inodes[e.parent_inode]
+ self.inodes.touch(parent)
entry = llfuse.EntryAttributes()
entry.st_ino = inode
entry.generation = 0
- entry.entry_timeout = 0
+ entry.entry_timeout = parent.time_to_next_poll() if parent is not None else 0
entry.attr_timeout = e.time_to_next_poll() if e.allow_attr_cache else 0
entry.st_mode = stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH
if name == '.':
inode = parent_inode
- else:
- if parent_inode in self.inodes:
- p = self.inodes[parent_inode]
- self.inodes.touch(p)
- if name == '..':
- inode = p.parent_inode
- elif isinstance(p, Directory) and name in p:
- inode = p[name].inode
+ elif parent_inode in self.inodes:
+ p = self.inodes[parent_inode]
+ self.inodes.touch(p)
+ if name == '..':
+ inode = p.parent_inode
+ elif isinstance(p, Directory) and name in p:
+ if p[name].inode is None:
+ _logger.debug("arv-mount lookup: parent_inode %i name '%s' found but inode was None",
+ parent_inode, name)
+ raise llfuse.FUSEError(errno.ENOENT)
+
+ inode = p[name].inode
if inode != None:
_logger.debug("arv-mount lookup: parent_inode %i name '%s' inode %i",
parent_inode, name, inode)
+ self.inodes.touch(self.inodes[inode])
self.inodes[inode].inc_ref()
return self.getattr(inode)
else:
for inode, nlookup in inodes:
ent = self.inodes[inode]
_logger.debug("arv-mount forget: inode %i nlookup %i ref_count %i", inode, nlookup, ent.ref_count)
- if ent.dec_ref(nlookup) == 0 and ent.dead:
+ if ent.dec_ref(nlookup) == 0 and ent.parent_inode is None:
self.inodes.del_entry(ent)
@open_time.time()
if inode in self.inodes:
p = self.inodes[inode]
else:
+ _logger.debug("arv-mount open: inode %i missing", inode)
raise llfuse.FUSEError(errno.ENOENT)
if isinstance(p, Directory):
finally:
self._filehandles[fh].release()
del self._filehandles[fh]
- self.inodes.inode_cache.cap_cache()
+ self.inodes.cap_cache()
def releasedir(self, fh):
self.release(fh)
if inode in self.inodes:
p = self.inodes[inode]
else:
+ _logger.debug("arv-mount opendir: called with unknown or removed inode %i", inode)
raise llfuse.FUSEError(errno.ENOENT)
if not isinstance(p, Directory):
if p.parent_inode in self.inodes:
parent = self.inodes[p.parent_inode]
else:
+ _logger.warning("arv-mount opendir: parent inode %i of %i is missing", p.parent_inode, inode)
raise llfuse.FUSEError(errno.EIO)
+ _logger.debug("arv-mount opendir: inode %i fh %i ", inode, fh)
+
# update atime
+ p.inc_use()
+ self._filehandles[fh] = DirectoryHandle(fh, p, [('.', p), ('..', parent)] + p.items())
+ p.dec_use()
self.inodes.touch(p)
- self._filehandles[fh] = DirectoryHandle(fh, p, [('.', p), ('..', parent)] + listitems(p))
return fh
@readdir_time.time()
e = off
while e < len(handle.entries):
- if handle.entries[e][1].inode in self.inodes:
- yield (handle.entries[e][0].encode(self.inodes.encoding), self.getattr(handle.entries[e][1].inode), e+1)
+ ent = handle.entries[e]
+ if ent[1].inode in self.inodes:
+ yield (ent[0].encode(self.inodes.encoding), self.getattr(ent[1].inode), e+1)
e += 1
@statfs_time.time()
metavar='CLASSES',
help="Comma-separated list of storage classes to request for new collections",
)
-
+ # This is a hidden argument used by tests. Normally this
+ # value will be extracted from the cluster config, but mocking
+ # the cluster config under the presence of multiple threads
+ # and processes turned out to be too complicated and brittle.
+ plumbing.add_argument(
+ '--fsns',
+ type=str,
+ default=None,
+ help=argparse.SUPPRESS)
class Mount(object):
def __init__(self, args, logger=logging.getLogger('arvados.arv-mount')):
disk_cache=self.args.disk_cache,
disk_cache_dir=self.args.disk_cache_dir)
- # If there's too many prefetch threads and you
- # max out the CPU, delivering data to the FUSE
- # layer actually ends up being slower.
- # Experimentally, capping 7 threads seems to
- # be a sweet spot.
- prefetch_threads = min(max((block_cache.cache_max // (64 * 1024 * 1024)) - 1, 1), 7)
-
self.api = arvados.safeapi.ThreadSafeApiCache(
apiconfig=arvados.config.settings(),
api_params={
},
keep_params={
'block_cache': block_cache,
- 'num_prefetch_threads': prefetch_threads,
'num_retries': self.args.retries,
},
version='v1',
api_client=self.api,
encoding=self.args.encoding,
inode_cache=InodeCache(cap=self.args.directory_cache),
- enable_write=self.args.enable_write)
+ enable_write=self.args.enable_write,
+ fsns=self.args.fsns)
if self.args.crunchstat_interval:
statsthread = threading.Thread(
e = self.operations.inodes.add_entry(Directory(
llfuse.ROOT_INODE,
self.operations.inodes,
- self.api.config,
self.args.enable_write,
self.args.filters,
))
def _llfuse_main(self):
try:
- llfuse.main()
+ llfuse.main(workers=10)
except:
llfuse.close(unmount=False)
raise
+ self.operations.begin_shutdown()
llfuse.close()
"""
__slots__ = ("_stale", "_poll", "_last_update", "_atime", "_poll_time", "use_count",
- "ref_count", "dead", "cache_size", "cache_uuid", "allow_attr_cache")
+ "ref_count", "cache_size", "cache_uuid", "allow_attr_cache")
def __init__(self):
self._stale = True
self._poll_time = 60
self.use_count = 0
self.ref_count = 0
- self.dead = False
self.cache_size = 0
self.cache_uuid = None
self.ref_count -= n
return self.ref_count
- def has_ref(self, only_children):
+ def has_ref(self):
"""Determine if there are any kernel references to this
- object or its children.
-
- If only_children is True, ignore refcount of self and only consider
- children.
+ object.
"""
- if only_children:
- return False
- else:
- return self.ref_count > 0
+ return self.ref_count > 0
def objsize(self):
return 0
and the value referencing a File or Directory object.
"""
- def __init__(self, parent_inode, inodes, apiconfig, enable_write, filters):
+ __slots__ = ("inode", "parent_inode", "inodes", "_entries", "_mtime", "_enable_write", "_filters")
+
+ def __init__(self, parent_inode, inodes, enable_write, filters):
"""parent_inode is the integer inode number"""
super(Directory, self).__init__()
raise Exception("parent_inode should be an int")
self.parent_inode = parent_inode
self.inodes = inodes
- self.apiconfig = apiconfig
self._entries = {}
self._mtime = time.time()
self._enable_write = enable_write
else:
yield [f_name, *f[1:]]
- def forward_slash_subst(self):
- if not hasattr(self, '_fsns'):
- self._fsns = None
- config = self.apiconfig()
- try:
- self._fsns = config["Collections"]["ForwardSlashNameSubstitution"]
- except KeyError:
- # old API server with no FSNS config
- self._fsns = '_'
- else:
- if self._fsns == '' or self._fsns == '/':
- self._fsns = None
- return self._fsns
-
def unsanitize_filename(self, incoming):
"""Replace ForwardSlashNameSubstitution value with /"""
- fsns = self.forward_slash_subst()
+ fsns = self.inodes.forward_slash_subst()
if isinstance(fsns, str):
return incoming.replace(fsns, '/')
else:
elif dirty == '..':
return '__'
else:
- fsns = self.forward_slash_subst()
+ fsns = self.inodes.forward_slash_subst()
if isinstance(fsns, str):
dirty = dirty.replace('/', fsns)
return _disallowed_filename_characters.sub('_', dirty)
self.inodes.touch(self)
super(Directory, self).fresh()
+ def objsize(self):
+ # Rough estimate of memory footprint based on using pympler
+ return len(self._entries) * 1024
+
def merge(self, items, fn, same, new_entry):
"""Helper method for updating the contents of the directory.
entries that are the same in both the old and new lists, create new
entries, and delete old entries missing from the new list.
- :items: iterable with new directory contents
+ Arguments:
+ * items: Iterable --- New directory contents
- :fn: function to take an entry in 'items' and return the desired file or
+ * fn: Callable --- Takes an entry in 'items' and return the desired file or
directory name, or None if this entry should be skipped
- :same: function to compare an existing entry (a File or Directory
+ * same: Callable --- Compare an existing entry (a File or Directory
object) with an entry in the items list to determine whether to keep
the existing entry.
- :new_entry: function to create a new directory entry (File or Directory
+ * new_entry: Callable --- Create a new directory entry (File or Directory
object) from an entry in the items list.
"""
changed = False
for i in items:
name = self.sanitize_filename(fn(i))
- if name:
- if name in oldentries and same(oldentries[name], i):
+ if not name:
+ continue
+ if name in oldentries:
+ ent = oldentries[name]
+ if same(ent, i) and ent.parent_inode == self.inode:
# move existing directory entry over
- self._entries[name] = oldentries[name]
+ self._entries[name] = ent
del oldentries[name]
- else:
- _logger.debug("Adding entry '%s' to inode %i", name, self.inode)
- # create new directory entry
- ent = new_entry(i)
- if ent is not None:
- self._entries[name] = self.inodes.add_entry(ent)
- changed = True
+ self.inodes.inode_cache.touch(ent)
+
+ for i in items:
+ name = self.sanitize_filename(fn(i))
+ if not name:
+ continue
+ if name not in self._entries:
+ # create new directory entry
+ ent = new_entry(i)
+ if ent is not None:
+ self._entries[name] = self.inodes.add_entry(ent)
+ # need to invalidate this just in case there was a
+ # previous entry that couldn't be moved over or a
+ # lookup that returned file not found and cached
+ # a negative result
+ self.inodes.invalidate_entry(self, name)
+ changed = True
+ _logger.debug("Added entry '%s' as inode %i to parent inode %i", name, ent.inode, self.inode)
# delete any other directory entries that were not in found in 'items'
- for i in oldentries:
- _logger.debug("Forgetting about entry '%s' on inode %i", i, self.inode)
- self.inodes.invalidate_entry(self, i)
- self.inodes.del_entry(oldentries[i])
+ for name, ent in oldentries.items():
+ _logger.debug("Detaching entry '%s' from parent_inode %i", name, self.inode)
+ self.inodes.invalidate_entry(self, name)
+ self.inodes.del_entry(ent)
changed = True
if changed:
- self.inodes.invalidate_inode(self)
self._mtime = time.time()
+ self.inodes.inode_cache.update_cache_size(self)
self.fresh()
return True
return False
- def has_ref(self, only_children):
- if super(Directory, self).has_ref(only_children):
- return True
- for v in self._entries.values():
- if v.has_ref(False):
- return True
- return False
-
def clear(self):
"""Delete all entries"""
+ if not self._entries:
+ return
oldentries = self._entries
self._entries = {}
- for n in oldentries:
- oldentries[n].clear()
- self.inodes.del_entry(oldentries[n])
self.invalidate()
+ for name, ent in oldentries.items():
+ ent.clear()
+ self.inodes.invalidate_entry(self, name)
+ self.inodes.del_entry(ent)
+ self.inodes.inode_cache.update_cache_size(self)
def kernel_invalidate(self):
# Invalidating the dentry on the parent implies invalidating all paths
# below it as well.
- parent = self.inodes[self.parent_inode]
+ if self.parent_inode in self.inodes:
+ parent = self.inodes[self.parent_inode]
+ else:
+ # parent was removed already.
+ return
# Find self on the parent in order to invalidate this path.
# Calling the public items() method might trigger a refresh,
"""
- def __init__(self, parent_inode, inodes, apiconfig, enable_write, filters, collection, collection_root):
- super(CollectionDirectoryBase, self).__init__(parent_inode, inodes, apiconfig, enable_write, filters)
- self.apiconfig = apiconfig
+ __slots__ = ("collection", "collection_root", "collection_record_file")
+
+ def __init__(self, parent_inode, inodes, enable_write, filters, collection, collection_root):
+ super(CollectionDirectoryBase, self).__init__(parent_inode, inodes, enable_write, filters)
self.collection = collection
self.collection_root = collection_root
self.collection_record_file = None
def new_entry(self, name, item, mtime):
name = self.sanitize_filename(name)
if hasattr(item, "fuse_entry") and item.fuse_entry is not None:
- if item.fuse_entry.dead is not True:
- raise Exception("Can only reparent dead inode entry")
+ if item.fuse_entry.parent_inode is not None:
+ raise Exception("Can only reparent unparented inode entry")
if item.fuse_entry.inode is None:
raise Exception("Reparented entry must still have valid inode")
- item.fuse_entry.dead = False
+ item.fuse_entry.parent_inode = self.inode
self._entries[name] = item.fuse_entry
elif isinstance(item, arvados.collection.RichCollectionBase):
self._entries[name] = self.inodes.add_entry(CollectionDirectoryBase(
self.inode,
self.inodes,
- self.apiconfig,
self._enable_write,
self._filters,
item,
def clear(self):
super(CollectionDirectoryBase, self).clear()
+ if self.collection is not None:
+ self.collection.unsubscribe()
self.collection = None
+ def objsize(self):
+ # objsize for the whole collection is represented at the root,
+ # don't double-count it
+ return 0
class CollectionDirectory(CollectionDirectoryBase):
"""Represents the root of a directory tree representing a collection."""
+ __slots__ = ("api", "num_retries", "collection_locator",
+ "_manifest_size", "_writable", "_updating_lock")
+
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters=None, collection_record=None, explicit_collection=None):
- super(CollectionDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters, None, self)
+ super(CollectionDirectory, self).__init__(parent_inode, inodes, enable_write, filters, None, self)
self.api = api
self.num_retries = num_retries
self._poll = True
if self.collection_record_file is not None:
self.collection_record_file.invalidate()
self.inodes.invalidate_inode(self.collection_record_file)
- _logger.debug("%s invalidated collection record file", self)
+ _logger.debug("parent_inode %s invalidated collection record file inode %s", self.inode,
+ self.collection_record_file.inode)
+ self.inodes.update_uuid(self)
+ self.inodes.inode_cache.update_cache_size(self)
self.fresh()
def uuid(self):
return False
@use_counter
+ @check_update
def collection_record(self):
self.flush()
return self.collection.api_response()
return (self.collection_locator is not None)
def objsize(self):
- # This is an empirically-derived heuristic to estimate the memory used
- # to store this collection's metadata. Calculating the memory
- # footprint directly would be more accurate, but also more complicated.
- return self._manifest_size * 128
+ # This is a rough guess of the amount of overhead involved for
+ # a collection; the assumptions are that that each file
+ # averages 128 bytes in the manifest, but consume 1024 bytes
+ # of Python data structures, so 1024/128=8 means we estimate
+ # the RAM footprint at 8 times the size of bare manifest text.
+ return self._manifest_size * 8
def finalize(self):
- if self.collection is not None:
- if self.writable():
+ if self.collection is None:
+ return
+
+ if self.writable():
+ try:
self.collection.save()
- self.collection.stop_threads()
+ except Exception as e:
+ _logger.exception("Failed to save collection %s", self.collection_locator)
+ self.collection.stop_threads()
def clear(self):
if self.collection is not None:
self.collection.stop_threads()
- super(CollectionDirectory, self).clear()
self._manifest_size = 0
+ super(CollectionDirectory, self).clear()
+ if self.collection_record_file is not None:
+ self.inodes.del_entry(self.collection_record_file)
+ self.collection_record_file = None
class TmpCollectionDirectory(CollectionDirectoryBase):
# This is always enable_write=True because it never tries to
# save to the backend
super(TmpCollectionDirectory, self).__init__(
- parent_inode, inodes, api_client.config, True, filters, collection, self)
+ parent_inode, inodes, True, filters, collection, self)
self.populate(self.mtime())
def on_event(self, *args, **kwargs):
with self.collection.lock:
self.collection_record_file.invalidate()
self.inodes.invalidate_inode(self.collection_record_file)
- _logger.debug("%s invalidated collection record", self)
+ _logger.debug("%s invalidated collection record", self.inode)
finally:
while lockcount > 0:
self.collection.lock.acquire()
""".lstrip()
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters, pdh_only=False, storage_classes=None):
- super(MagicDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters)
+ super(MagicDirectory, self).__init__(parent_inode, inodes, enable_write, filters)
self.api = api
self.num_retries = num_retries
self.pdh_only = pdh_only
"""A special directory that contains as subdirectories all tags visible to the user."""
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters, poll_time=60):
- super(TagsDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters)
+ super(TagsDirectory, self).__init__(parent_inode, inodes, enable_write, filters)
self.api = api
self.num_retries = num_retries
self._poll = True
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters, tag,
poll=False, poll_time=60):
- super(TagDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters)
+ super(TagDirectory, self).__init__(parent_inode, inodes, enable_write, filters)
self.api = api
self.num_retries = num_retries
self.tag = tag
class ProjectDirectory(Directory):
"""A special directory that contains the contents of a project."""
+ __slots__ = ("api", "num_retries", "project_object", "project_object_file",
+ "project_uuid", "_updating_lock",
+ "_current_user", "_full_listing", "storage_classes", "recursively_contained")
+
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters,
project_object, poll=True, poll_time=3, storage_classes=None):
- super(ProjectDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters)
+ super(ProjectDirectory, self).__init__(parent_inode, inodes, enable_write, filters)
self.api = api
self.num_retries = num_retries
self.project_object = project_object
self._current_user = None
self._full_listing = False
self.storage_classes = storage_classes
+ self.recursively_contained = False
+
+ # Filter groups can contain themselves, which causes tools
+ # that walk the filesystem to get stuck in an infinite loop,
+ # so suppress returning a listing in that case.
+ if self.project_object.get("group_class") == "filter":
+ iter_parent_inode = parent_inode
+ while iter_parent_inode != llfuse.ROOT_INODE:
+ parent_dir = self.inodes[iter_parent_inode]
+ if isinstance(parent_dir, ProjectDirectory) and parent_dir.project_uuid == self.project_uuid:
+ self.recursively_contained = True
+ break
+ iter_parent_inode = parent_dir.parent_inode
def want_event_subscribe(self):
return True
self.project_object_file = ObjectFile(self.inode, self.project_object)
self.inodes.add_entry(self.project_object_file)
- if not self._full_listing:
+ if self.recursively_contained or not self._full_listing:
return True
def samefn(a, i):
*self._filters_for('collections', qualified=True),
],
) if obj['current_version_uuid'] == obj['uuid'])
-
# end with llfuse.lock_released, re-acquire lock
self.merge(contents,
def persisted(self):
return True
+ def clear(self):
+ super(ProjectDirectory, self).clear()
+ if self.project_object_file is not None:
+ self.inodes.del_entry(self.project_object_file)
+ self.project_object_file = None
+
@use_counter
@check_update
def mkdir(self, name):
def __init__(self, parent_inode, inodes, api, num_retries, enable_write, filters,
exclude, poll=False, poll_time=60, storage_classes=None):
- super(SharedDirectory, self).__init__(parent_inode, inodes, api.config, enable_write, filters)
+ super(SharedDirectory, self).__init__(parent_inode, inodes, enable_write, filters)
self.api = api
self.num_retries = num_retries
self.current_user = api.users().current().execute(num_retries=num_retries)
if self.writable():
self.arvfile.parent.root_collection().save()
+ def clear(self):
+ if self.parent_inode is None:
+ self.arvfile.fuse_entry = None
+ self.arvfile = None
+
class StringFile(File):
"""Wrap a simple string as a file"""
+
+ __slots__ = ("contents",)
+
def __init__(self, parent_inode, contents, _mtime):
super(StringFile, self).__init__(parent_inode, _mtime)
self.contents = contents
class ObjectFile(StringFile):
"""Wrap a dict as a serialized json object."""
+ __slots__ = ("object_uuid",)
+
def __init__(self, parent_inode, obj):
super(ObjectFile, self).__init__(parent_inode, "", 0)
self.object_uuid = obj['uuid']
The function is called at the time the file is read. The result is
cached until invalidate() is called.
"""
+
+ __slots__ = ("func",)
+
def __init__(self, parent_inode, func):
super(FuncToJSONFile, self).__init__(parent_inode, "", 0)
self.func = func
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../../sdk/python")),
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
+
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
- return read_version(setup_dir, module)
+# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
+if __name__ == '__main__':
+ print(get_version())
from setuptools import setup, find_packages
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "arvados_fuse")
-if os.environ.get('ARVADOS_BUILDING_VERSION', False):
- pysdk_dep = "=={}".format(version)
-else:
- # On dev releases, arvados-python-client may have a different timestamp
- pysdk_dep = "<={}".format(version)
-
-short_tests_only = False
-if '--short-tests-only' in sys.argv:
- short_tests_only = True
- sys.argv.remove('--short-tests-only')
+version = arvados_version.get_version()
+short_tests_only = arvados_version.short_tests_only()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
setup(name='arvados_fuse',
version=version,
('share/doc/arvados_fuse', ['agpl-3.0.txt', 'README.rst']),
],
install_requires=[
- 'arvados-python-client{}'.format(pysdk_dep),
- 'llfuse >= 1.3.6',
+ *arvados_version.iter_dependencies(version),
+ 'arvados-llfuse >= 1.5.1',
'future',
'python-daemon',
'ciso8601 >= 2.0.0',
'Programming Language :: Python :: 3',
],
test_suite='tests',
- tests_require=['pbr<1.7.0', 'mock>=1.0', 'PyYAML', 'parameterized',],
+ tests_require=['PyYAML', 'parameterized',],
zip_safe=False
)
with arvados_fuse.command.Mount(
arvados_fuse.command.ArgumentParser().parse_args(
argv + ['--foreground',
- '--unmount-timeout=2',
+ '--unmount-timeout=60',
self.mnt])) as self.mount:
return func(self, *args, **kwargs)
finally:
self.operations.events.close(timeout=10)
subprocess.call(["fusermount", "-u", "-z", self.mounttmp])
t0 = time.time()
- self.llfuse_thread.join(timeout=10)
+ self.llfuse_thread.join(timeout=60)
if self.llfuse_thread.is_alive():
logger.warning("MountTestBase.tearDown():"
- " llfuse thread still alive 10s after umount"
+ " llfuse thread still alive 60s after umount"
" -- exiting with SIGKILL")
os.kill(os.getpid(), signal.SIGKILL)
waited = time.time() - t0
import json
import llfuse
import logging
-import mock
import os
from . import run_test_server
import sys
import unittest
import resource
+from unittest import mock
+
def noexit(func):
"""If argparse or arvados_fuse tries to exit, fail the test instead"""
class SystemExitCaught(Exception):
# SPDX-License-Identifier: AGPL-3.0
import arvados_fuse
-import mock
import unittest
import llfuse
import logging
+from unittest import mock
+
class InodeTests(unittest.TestCase):
+
+ # The following tests call next(inodes._counter) because inode 1
+ # (the root directory) gets special treatment.
+
def test_inodes_basic(self):
cache = arvados_fuse.InodeCache(1000, 4)
inodes = arvados_fuse.Inodes(cache)
+ next(inodes._counter)
# Check that ent1 gets added to inodes
ent1 = mock.MagicMock()
def test_inodes_not_persisted(self):
cache = arvados_fuse.InodeCache(1000, 4)
inodes = arvados_fuse.Inodes(cache)
+ next(inodes._counter)
ent1 = mock.MagicMock()
ent1.in_use.return_value = False
def test_inode_cleared(self):
cache = arvados_fuse.InodeCache(1000, 4)
inodes = arvados_fuse.Inodes(cache)
+ next(inodes._counter)
# Check that ent1 gets added to inodes
ent1 = mock.MagicMock()
inodes.add_entry(ent3)
# Won't clear anything because min_entries = 4
- self.assertEqual(2, len(cache._entries))
+ self.assertEqual(2, len(cache._cache_entries))
self.assertFalse(ent1.clear.called)
self.assertEqual(1100, cache.total())
# Change min_entries
cache.min_entries = 1
- cache.cap_cache()
+ ent1.parent_inode = None
+ inodes.cap_cache()
+ inodes.wait_remove_queue_empty()
self.assertEqual(600, cache.total())
self.assertTrue(ent1.clear.called)
# Touching ent1 should cause ent3 to get cleared
+ ent3.parent_inode = None
self.assertFalse(ent3.clear.called)
- cache.touch(ent1)
+ inodes.inode_cache.update_cache_size(ent1)
+ inodes.touch(ent1)
+ inodes.wait_remove_queue_empty()
self.assertTrue(ent3.clear.called)
self.assertEqual(500, cache.total())
def test_clear_in_use(self):
cache = arvados_fuse.InodeCache(1000, 4)
inodes = arvados_fuse.Inodes(cache)
+ next(inodes._counter)
ent1 = mock.MagicMock()
ent1.in_use.return_value = True
ent3.clear.called = False
self.assertFalse(ent1.clear.called)
self.assertFalse(ent3.clear.called)
- cache.touch(ent3)
+ inodes.touch(ent3)
+ inodes.wait_remove_queue_empty()
self.assertFalse(ent1.clear.called)
self.assertFalse(ent3.clear.called)
- self.assertFalse(ent3.kernel_invalidate.called)
+ # kernel invalidate gets called anyway
+ self.assertTrue(ent3.kernel_invalidate.called)
self.assertEqual(1100, cache.total())
# ent1 still in use, ent3 doesn't have ref,
ent3.has_ref.return_value = False
ent1.clear.called = False
ent3.clear.called = False
- cache.touch(ent3)
+ ent3.parent_inode = None
+ inodes.touch(ent3)
+ inodes.wait_remove_queue_empty()
self.assertFalse(ent1.clear.called)
self.assertTrue(ent3.clear.called)
self.assertEqual(500, cache.total())
def test_delete(self):
- cache = arvados_fuse.InodeCache(1000, 4)
+ cache = arvados_fuse.InodeCache(1000, 0)
inodes = arvados_fuse.Inodes(cache)
+ next(inodes._counter)
ent1 = mock.MagicMock()
ent1.in_use.return_value = False
ent1.ref_count = 0
with llfuse.lock:
inodes.del_entry(ent1)
+ inodes.wait_remove_queue_empty()
self.assertEqual(0, cache.total())
- cache.touch(ent3)
+
+ inodes.add_entry(ent3)
+ inodes.wait_remove_queue_empty()
self.assertEqual(600, cache.total())
import json
import llfuse
import logging
-import mock
import os
import subprocess
import time
import tempfile
import parameterized
+from unittest import mock
+
import arvados
import arvados_fuse as fuse
from arvados_fuse import fusedir
class SanitizeFilenameTest(MountTestBase):
def test_sanitize_filename(self):
pdir = fuse.ProjectDirectory(
- 1, {}, self.api, 0, False, None,
+ 1, fuse.Inodes(None), self.api, 0, False, None,
project_object=self.api.users().current().execute(),
)
acceptable = [
mnt_args = [
'--read-write',
'--mount-home', 'zzz',
+ '--fsns', '[SLASH]'
]
def setUp(self):
super(SlashSubstitutionTest, self).setUp()
+
self.api = arvados.safeapi.ThreadSafeApiCache(
arvados.config.settings(),
- version='v1',
+ version='v1'
)
- self.api.config = lambda: {"Collections": {"ForwardSlashNameSubstitution": "[SLASH]"}}
self.testcoll = self.api.collections().create(body={"name": "foo/bar/baz"}).execute()
self.testcolleasy = self.api.collections().create(body={"name": "foo-bar-baz"}).execute()
self.fusename = 'foo[SLASH]bar[SLASH]baz'
@IntegrationTest.mount(argv=mnt_args)
- @mock.patch('arvados.util.get_config_once')
- def test_slash_substitution_before_listing(self, get_config_once):
- get_config_once.return_value = {"Collections": {"ForwardSlashNameSubstitution": "[SLASH]"}}
+ def test_slash_substitution_before_listing(self):
self.pool_test(os.path.join(self.mnt, 'zzz'), self.fusename)
self.checkContents()
@staticmethod
import arvados
import arvados_fuse.command
import json
-import mock
import os
import pycurl
import queue
import tempfile
import unittest
-from .integration_test import IntegrationTest
+from unittest import mock
+from .integration_test import IntegrationTest
class KeepClientRetry(unittest.TestCase):
origKeepClient = arvados.keep.KeepClient
import arvados
import arvados_fuse
import logging
-import mock
import multiprocessing
import os
import re
import time
import unittest
+from unittest import mock
+
from .integration_test import IntegrationTest
logger = logging.getLogger('arvados.arv-mount')
self.mnt])
subprocess.check_call(
['./bin/arv-mount', '--subtype', 'test', '--replace',
- '--unmount-timeout', '10',
+ '--unmount-timeout', '60',
self.mnt])
subprocess.check_call(
['./bin/arv-mount', '--subtype', 'test', '--replace',
- '--unmount-timeout', '10',
+ '--unmount-timeout', '60',
self.mnt,
'--exec', 'true'])
for m in subprocess.check_output(['mount']).splitlines():
r.URL.Scheme = xfp
}
- w := httpserver.WrapResponseWriter(wOrig)
+ wbuffer := newWriteBuffer(wOrig, int(h.Cluster.Collections.WebDAVOutputBuffer))
+ defer wbuffer.Close()
+ w := httpserver.WrapResponseWriter(responseWriter{
+ Writer: wbuffer,
+ ResponseWriter: wOrig,
+ })
if r.Method == "OPTIONS" && ServeCORSPreflight(w, r.Header) {
return
return
}
defer f.Close()
- defer sess.Release()
collectionDir, sessionFS, session, tokenUser = f, fs, sess, user
break
}
+
+ // releaseSession() is equivalent to session.Release() except
+ // that it's a no-op if (1) session is nil, or (2) it has
+ // already been called.
+ //
+ // This way, we can do a defer call here to ensure it gets
+ // called in all code paths, and also call it inline (see
+ // below) in the cases where we want to release the lock
+ // before returning.
+ releaseSession := func() {}
+ if session != nil {
+ var releaseSessionOnce sync.Once
+ releaseSession = func() { releaseSessionOnce.Do(func() { session.Release() }) }
+ }
+ defer releaseSession()
+
if forceReload && collectionDir != nil {
err := collectionDir.Sync()
if err != nil {
if r.Method == http.MethodGet || r.Method == http.MethodHead {
targetfnm := fsprefix + strings.Join(pathParts[stripParts:], "/")
if fi, err := sessionFS.Stat(targetfnm); err == nil && fi.IsDir() {
+ releaseSession() // because we won't be writing anything
if !strings.HasSuffix(r.URL.Path, "/") {
h.seeOtherWithCookie(w, r, r.URL.Path+"/", credentialsOK)
} else {
collectionDir.Splice(snap)
return nil
}}
+ } else {
+ // When writing, we need to block session renewal
+ // until we're finished, in order to guarantee the
+ // effect of the write is visible in future responses.
+ // But if we're not writing, we can release the lock
+ // early. This enables us to keep renewing sessions
+ // and processing more requests even if a slow client
+ // takes a long time to download a large file.
+ releaseSession()
}
if r.Method == http.MethodGet {
applyContentDispositionHdr(w, r, basename, attachment)
allmetrics, err := ioutil.ReadAll(resp.Body)
c.Check(err, check.IsNil)
- c.Check(string(allmetrics), check.Matches, `(?ms).*\narvados_keepweb_download_apparent_backend_speed_bucket{size_range="0",le="1e\+06"} 4\n.*`)
+ c.Check(string(allmetrics), check.Matches, `(?ms).*\narvados_keepweb_download_apparent_backend_speed_bucket{size_range="0",le="\+Inf"} 4\n.*`)
c.Check(string(allmetrics), check.Matches, `(?ms).*\narvados_keepweb_download_speed_bucket{size_range="0",le="\+Inf"} 4\n.*`)
c.Check(string(allmetrics), check.Matches, `(?ms).*\narvados_keepweb_upload_speed_bucket{size_range="0",le="\+Inf"} 2\n.*`)
c.Check(string(allmetrics), check.Matches, `(?ms).*\narvados_keepweb_upload_sync_delay_seconds_bucket{size_range="0",le="10"} 2\n.*`)
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package keepweb
+
+import (
+ "errors"
+ "io"
+ "net/http"
+ "sync/atomic"
+)
+
+// writeBuffer uses a ring buffer to implement an asynchronous write
+// buffer.
+//
+// rpos==wpos means the buffer is empty.
+//
+// rpos==(wpos+1)%size means the buffer is full.
+//
+// size<2 means the buffer is always empty and full, so in this case
+// writeBuffer writes through synchronously.
+type writeBuffer struct {
+ out io.Writer
+ buf []byte
+ writesize int // max bytes flush() should write in a single out.Write()
+ wpos atomic.Int64 // index in buf where writer (Write()) will write to next
+ wsignal chan struct{} // receives a value after wpos or closed changes
+ rpos atomic.Int64 // index in buf where reader (flush()) will read from next
+ rsignal chan struct{} // receives a value after rpos or err changes
+ err error // error encountered by flush
+ closed atomic.Bool
+ flushed chan struct{} // closes when flush() is finished
+}
+
+func newWriteBuffer(w io.Writer, size int) *writeBuffer {
+ wb := &writeBuffer{
+ out: w,
+ buf: make([]byte, size),
+ writesize: (size + 63) / 64,
+ wsignal: make(chan struct{}, 1),
+ rsignal: make(chan struct{}, 1),
+ flushed: make(chan struct{}),
+ }
+ go wb.flush()
+ return wb
+}
+
+func (wb *writeBuffer) Close() error {
+ if wb.closed.Load() {
+ return errors.New("writeBuffer: already closed")
+ }
+ wb.closed.Store(true)
+ // wake up flush()
+ select {
+ case wb.wsignal <- struct{}{}:
+ default:
+ }
+ // wait for flush() to finish
+ <-wb.flushed
+ return wb.err
+}
+
+func (wb *writeBuffer) Write(p []byte) (int, error) {
+ if len(wb.buf) < 2 {
+ // Our buffer logic doesn't work with size<2, and such
+ // a tiny buffer has no purpose anyway, so just write
+ // through unbuffered.
+ return wb.out.Write(p)
+ }
+ todo := p
+ wpos := int(wb.wpos.Load())
+ rpos := int(wb.rpos.Load())
+ for len(todo) > 0 {
+ // wait until the buffer is not full.
+ for rpos == (wpos+1)%len(wb.buf) {
+ select {
+ case <-wb.flushed:
+ if wb.err == nil {
+ return 0, errors.New("Write called on closed writeBuffer")
+ }
+ return 0, wb.err
+ case <-wb.rsignal:
+ rpos = int(wb.rpos.Load())
+ }
+ }
+ // determine next contiguous portion of buffer that is
+ // available.
+ var avail []byte
+ if rpos == 0 {
+ avail = wb.buf[wpos : len(wb.buf)-1]
+ } else if wpos >= rpos {
+ avail = wb.buf[wpos:]
+ } else {
+ avail = wb.buf[wpos : rpos-1]
+ }
+ n := copy(avail, todo)
+ wpos = (wpos + n) % len(wb.buf)
+ wb.wpos.Store(int64(wpos))
+ // wake up flush()
+ select {
+ case wb.wsignal <- struct{}{}:
+ default:
+ }
+ todo = todo[n:]
+ }
+ return len(p), nil
+}
+
+func (wb *writeBuffer) flush() {
+ defer close(wb.flushed)
+ rpos := 0
+ wpos := 0
+ closed := false
+ for {
+ // wait until buffer is not empty.
+ for rpos == wpos {
+ if closed {
+ return
+ }
+ <-wb.wsignal
+ closed = wb.closed.Load()
+ wpos = int(wb.wpos.Load())
+ }
+ // determine next contiguous portion of buffer that is
+ // ready to write through.
+ var ready []byte
+ if rpos < wpos {
+ ready = wb.buf[rpos:wpos]
+ } else {
+ ready = wb.buf[rpos:]
+ }
+ if len(ready) > wb.writesize {
+ ready = ready[:wb.writesize]
+ }
+ _, wb.err = wb.out.Write(ready)
+ if wb.err != nil {
+ return
+ }
+ rpos = (rpos + len(ready)) % len(wb.buf)
+ wb.rpos.Store(int64(rpos))
+ select {
+ case wb.rsignal <- struct{}{}:
+ default:
+ }
+ }
+}
+
+// responseWriter enables inserting an io.Writer-wrapper (like
+// *writeBuffer) into an http.ResponseWriter stack.
+//
+// It passes Write() calls to an io.Writer, and all other calls to an
+// http.ResponseWriter.
+type responseWriter struct {
+ io.Writer
+ http.ResponseWriter
+}
+
+func (rwc responseWriter) Write(p []byte) (int, error) {
+ return rwc.Writer.Write(p)
+}
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package keepweb
+
+import (
+ "bytes"
+ "io"
+ "math/rand"
+ "time"
+
+ . "gopkg.in/check.v1"
+)
+
+var _ = Suite(&writeBufferSuite{})
+
+type writeBufferSuite struct {
+}
+
+// 1000 / 96.3 ns/op = 10.384 GB/s
+func (s *writeBufferSuite) Benchmark_1KBWrites(c *C) {
+ wb := newWriteBuffer(io.Discard, 1<<20)
+ in := make([]byte, 1000)
+ for i := 0; i < c.N; i++ {
+ wb.Write(in)
+ }
+ wb.Close()
+}
+
+func (s *writeBufferSuite) TestRandomizedSpeedsAndSizes(c *C) {
+ for i := 0; i < 20; i++ {
+ insize := rand.Intn(1 << 26)
+ bufsize := rand.Intn(1 << 26)
+ if i < 2 {
+ // make sure to test edge cases
+ bufsize = i
+ } else if insize/bufsize > 1000 {
+ // don't waste too much time testing tiny
+ // buffer / huge content
+ insize = bufsize*1000 + 123
+ }
+ c.Logf("%s: insize %d bufsize %d", c.TestName(), insize, bufsize)
+
+ in := make([]byte, insize)
+ b := byte(0)
+ for i := range in {
+ in[i] = b
+ b++
+ }
+
+ out := &bytes.Buffer{}
+ done := make(chan struct{})
+ pr, pw := io.Pipe()
+ go func() {
+ n, err := slowCopy(out, pr, rand.Intn(8192)+1)
+ c.Check(err, IsNil)
+ c.Check(n, Equals, int64(insize))
+ close(done)
+ }()
+ wb := newWriteBuffer(pw, bufsize)
+ n, err := slowCopy(wb, bytes.NewBuffer(in), rand.Intn(8192)+1)
+ c.Check(err, IsNil)
+ c.Check(n, Equals, int64(insize))
+ c.Check(wb.Close(), IsNil)
+ c.Check(pw.Close(), IsNil)
+ <-done
+ c.Check(out.Len(), Equals, insize)
+ for i := 0; i < out.Len() && i < len(in); i++ {
+ if out.Bytes()[i] != in[i] {
+ c.Errorf("content mismatch at byte %d", i)
+ break
+ }
+ }
+ }
+}
+
+func slowCopy(dst io.Writer, src io.Reader, bufsize int) (int64, error) {
+ wrote := int64(0)
+ buf := make([]byte, bufsize)
+ for {
+ time.Sleep(time.Duration(rand.Intn(100) + 1))
+ n, err := src.Read(buf)
+ if n > 0 {
+ n, err := dst.Write(buf[:n])
+ wrote += int64(n)
+ if err != nil {
+ return wrote, err
+ }
+ }
+ if err == io.EOF {
+ return wrote, nil
+ }
+ if err != nil {
+ return wrote, err
+ }
+ }
+}
c.Check(resp.Code, Equals, http.StatusBadGateway)
c.Check(resp.Body.String(), Equals, "test error\n")
+ router.keepstore.mountsW[0].volume.(*stubVolume).blockRead = func(_ context.Context, hash string, w io.WriterAt) error {
+ return errors.New("no http status provided")
+ }
+ resp = call(router, "GET", "http://example/"+locSigned, arvadostest.ActiveTokenV2, nil, nil)
+ c.Check(resp.Code, Equals, http.StatusInternalServerError)
+ c.Check(resp.Body.String(), Equals, "no http status provided\n")
+
c.Assert(router.keepstore.mountsW[1].volume.BlockWrite(context.Background(), barHash, []byte("bar")), IsNil)
// If the requested block is available on the second volume,
creds := aws.NewChainProvider(
[]aws.CredentialsProvider{
aws.NewStaticCredentialsProvider(v.AccessKeyID, v.SecretAccessKey, v.AuthToken),
- ec2rolecreds.New(ec2metadata.New(cfg)),
+ ec2rolecreds.New(ec2metadata.New(cfg), func(opts *ec2rolecreds.ProviderOptions) {
+ // (from aws-sdk-go-v2 comments)
+ // "allow the credentials to trigger
+ // refreshing prior to the credentials
+ // actually expiring. This is
+ // beneficial so race conditions with
+ // expiring credentials do not cause
+ // request to fail unexpectedly due to
+ // ExpiredTokenException exceptions."
+ //
+ // (from
+ // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
+ // "We make new credentials available
+ // at least five minutes before the
+ // expiration of the old credentials."
+ opts.ExpiryWindow = 5 * time.Minute
+ }),
})
cfg.Credentials = creds
.idea
.vscode
+.eslintcache
/public/config.json
/public/_health/
ARVADOS_DIRECTORY?=$(shell env -C $(WORKSPACE) git rev-parse --show-toplevel)
+ifndef ci
+ TI=-ti
+else
+ TI=
+endif
+
.PHONY: help clean* yarn-install test build packages packages-with-version integration-tests-in-docker
help:
endif
integration-tests-in-docker: workbench2-build-image check-arvados-directory
- docker run -ti --rm \
+ docker run $(TI) --rm \
--env ARVADOS_DIRECTORY=/usr/src/arvados \
--env GIT_DISCOVERY_ACROSS_FILESYSTEM=1 \
-v $(WORKSPACE):/usr/src/arvados/services/workbench2 \
make arvados-server-install integration-tests SPECFILE=$(SPECFILE)
unit-tests-in-docker: workbench2-build-image check-arvados-directory
- docker run -ti --rm \
+ docker run $(TI) --rm \
--env ARVADOS_DIRECTORY=/usr/src/arvados \
--env GIT_DISCOVERY_ACROSS_FILESYSTEM=1 \
-v $(WORKSPACE):/usr/src/arvados/services/workbench2 \
make arvados-server-install unit-tests
tests-in-docker: workbench2-build-image check-arvados-directory
- docker run -ti --rm \
+ docker run $(TI) --rm \
--env ARVADOS_DIRECTORY=/usr/src/arvados \
--env GIT_DISCOVERY_ACROSS_FILESYSTEM=1 \
--env ci="${ci}" \
it('shows the appropriate buttons in the toolbar', () => {
const msButtonTooltips = [
+ 'View details',
+ 'Open in new tab',
+ 'Copy link to clipboard',
+ 'Open with 3rd party client',
'API Details',
- 'Add to Favorites',
- 'Copy to clipboard',
+ 'Share',
'Edit collection',
- 'Make a copy',
'Move to',
+ 'Make a copy',
'Move to trash',
- 'Open in new tab',
- 'Open with 3rd party client',
- 'Share',
- 'View details',
+ 'Add to favorites',
];
cy.loginAs(activeUser);
cy.get("[data-cy=name-field]").within(() => {
cy.get("input").type(" renamed");
});
- cy.get("[data-cy=form-submit-btn]").click();
+ cy.get("[data-cy=form-submit-btn]").click({timeout: 10000});
});
cy.get("[data-cy=form-dialog]").should("not.exist");
// Attempt to rename the collection with the duplicate name
cy.get("[data-cy=context-menu]")
.should("contain", "Download")
.and("contain", "Open in new tab")
- .and("contain", "Copy to clipboard")
+ .and("contain", "Copy link to clipboard")
.and(`${isWritable ? "" : "not."}contain`, "Rename")
.and(`${isWritable ? "" : "not."}contain`, "Remove");
cy.get("body").click(); // Collapse the menu
cy.get("[data-cy=context-menu]")
.should("not.contain", "Download")
.and("contain", "Open in new tab")
- .and("contain", "Copy to clipboard")
+ .and("contain", "Copy link to clipboard")
.and(`${isWritable ? "" : "not."}contain`, "Rename")
.and(`${isWritable ? "" : "not."}contain`, "Remove");
cy.get("body").click(); // Collapse the menu
it('shows the appropriate buttons in the toolbar', () => {
const msButtonTooltips = [
- 'API Details',
- 'Add to Favorites',
- 'CANCEL',
- 'Copy and re-run process',
- 'Edit process',
- 'Move to',
+ 'View details',
'Open in new tab',
'Outputs',
+ 'API Details',
+ 'Edit process',
+ 'Copy and re-run process',
+ 'CANCEL',
'Remove',
- 'Share',
- 'View details',
+ 'Add to favorites',
];
createContainerRequest(
.contains(name)
.parents("tr")
.within($mainRow => {
+ cy.get($mainRow).scrollIntoView();
label && cy.contains(label);
if (multipleRows) {
cy.get("[data-cy=process-io-card] h6")
.contains("Input Parameters")
.parents("[data-cy=process-io-card]")
- .within(() => {
+ .within((ctx) => {
+ cy.get(ctx).scrollIntoView();
verifyIOParameter("input_file", null, "Label Description", "input1.tar", "00000000000000000000000000000000+01");
verifyIOParameter("input_file", null, "Label Description", "input1-2.txt", undefined, true);
verifyIOParameter("input_file", null, "Label Description", "input1-3.txt", undefined, true);
.parents("[data-cy=process-io-card]")
.within(ctx => {
cy.get(ctx).scrollIntoView();
- cy.get('[data-cy="io-preview-image-toggle"]').click({ waitForAnimations: false });
const outPdh = testOutputCollection.portable_data_hash;
verifyIOParameter("output_file", null, "Label Description", "cat.png", `${outPdh}`);
- verifyIOParameterImage("output_file", `/c=${outPdh}/cat.png`);
+ // Disabled until image preview returns
+ // verifyIOParameterImage("output_file", `/c=${outPdh}/cat.png`);
verifyIOParameter("output_file_with_secondary", null, "Doc Description", "main.dat", `${outPdh}`);
verifyIOParameter("output_file_with_secondary", null, "Doc Description", "secondary.dat", undefined, true);
verifyIOParameter("output_file_with_secondary", null, "Doc Description", "secondary2.dat", undefined, true);
cy.get("[data-cy=process-io-card] h6")
.contains("Input Parameters")
.parents("[data-cy=process-io-card]")
- .within(() => {
+ .within((ctx) => {
+ cy.get(ctx).scrollIntoView();
cy.wait(2000);
cy.waitForDom();
- cy.get("tbody tr").each(item => {
- cy.wrap(item).contains("No value");
+
+ testInputs.map((input) => {
+ verifyIOParameter(input.definition.id.split('/').slice(-1)[0], null, null, "No value");
});
});
cy.get("[data-cy=process-io-card] h6")
.contains("Output Parameters")
.parents("[data-cy=process-io-card]")
- .within(() => {
- cy.get("tbody tr").each(item => {
- cy.wrap(item).contains("No value");
+ .within((ctx) => {
+ cy.get(ctx).scrollIntoView();
+
+ testOutputs.map((output) => {
+ verifyIOParameter(output.definition.id.split('/').slice(-1)[0], null, null, "No value");
});
});
});
it('shows the appropriate buttons in the multiselect toolbar', () => {
const msButtonTooltips = [
+ 'View details',
+ 'Open in new tab',
+ 'Copy link to clipboard',
+ 'Open with 3rd party client',
'API Details',
- 'Add to Favorites',
- 'Copy to clipboard',
+ 'Share',
+ 'New project',
'Edit project',
- 'Freeze Project',
'Move to',
'Move to trash',
- 'New project',
- 'Open in new tab',
- 'Open with 3rd party client',
- 'Share',
- 'View details',
+ 'Freeze project',
+ 'Add to favorites',
];
cy.loginAs(activeUser);
cy.get("[data-cy=side-panel-tree]").contains("Projects").click();
cy.waitForDom();
cy.get("[data-cy=project-panel]").contains(projectName).should("be.visible").rightclick();
- cy.get("[data-cy=context-menu]").contains("Copy to clipboard").click();
+ cy.get("[data-cy=context-menu]").contains("Copy link to clipboard").click();
cy.window().then(win =>
win.navigator.clipboard.readText().then(text => {
expect(text).to.match(/https\:\/\/127\.0\.0\.1\:[0-9]+\/projects\/[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}/);
cy.stub(win, "open").as("Open");
});
- // Check copy to clipboard
+ // Check Copy link to clipboard
cy.get("[data-cy=search-results]").contains(colName).rightclick();
cy.get("[data-cy=context-menu]").within(ctx => {
// Check that there are 4 items in the menu
cy.get(ctx).children().should("have.length", 4);
cy.contains("API Details");
- cy.contains("Copy to clipboard");
+ cy.contains("Copy link to clipboard");
cy.contains("Open in new tab");
cy.contains("View details");
- cy.contains("Copy to clipboard").click();
+ cy.contains("Copy link to clipboard").click();
cy.waitForDom();
cy.window().then(win =>
win.navigator.clipboard.readText().then(text => {
cy.get("@Open").should("have.been.calledOnceWith", `${window.location.origin}/collections/${testCollection.uuid}`);
});
- // Check federated result copy to clipboard
+ // Check federated result Copy link to clipboard
cy.get("[data-cy=search-results]").contains(federatedColName).rightclick();
cy.get("[data-cy=context-menu]").within(() => {
- cy.contains("Copy to clipboard").click();
+ cy.contains("Copy link to clipboard").click();
cy.waitForDom();
cy.window().then(win =>
win.navigator.clipboard.readText().then(text => {
cy.get('main').contains(sharedCollection.name).rightclick();
cy.get('[data-cy=context-menu]').within(() => {
- cy.contains('Share').click();
+ cy.contains('Share').click({ waitForAnimations: false });
});
cy.get('.sharing-dialog').within(() => {
cy.contains('Sharing URLs').click();
cy.contains('Refresh').click();
cy.get('main').contains(mySharedWritableProject.name).rightclick();
cy.get('[data-cy=context-menu]').within(() => {
- cy.contains('Share').click();
+ cy.contains('Share').click({ waitForAnimations: false });
});
cy.get('[id="select-permissions"]').as('selectPermissions');
cy.get('@selectPermissions').click();
cy.get('[role=tooltip]').click();
cy.get('@sharingDialog').within(() => {
cy.get('[data-cy=add-invited-people]').click();
- cy.contains('Close').click();
+ cy.contains('Close').click({ waitForAnimations: false });
});
});
cy.contains('Refresh').click();
cy.get('main').contains(mySharedReadonlyProject.name).rightclick();
cy.get('[data-cy=context-menu]').within(() => {
- cy.contains('Share').click();
+ cy.contains('Share').click({ waitForAnimations: false });
});
cy.get('.sharing-dialog').as('sharingDialog');
cy.get('[data-cy=invite-people-field]').find('input').type(activeUser.user.email);
cy.get('[role=tooltip]').click();
cy.get('@sharingDialog').within(() => {
cy.get('[data-cy=add-invited-people]').click();
- cy.contains('Close').click();
+ cy.contains('Close').click({ waitForAnimations: false });
});
});
// Test move to trash
cy.get('main').contains(mySharedWritableProject.name).rightclick();
cy.get('[data-cy=context-menu]').should('contain', 'Move to trash');
- cy.get('[data-cy=context-menu]').contains('Move to trash').click();
+ cy.get('[data-cy=context-menu]').contains('Move to trash').click({ waitForAnimations: false });
// GUARD: Let's wait for the above removed project to disappear
// before continuing, to avoid intermittent failures.
.then(function ([]) {
cy.loginAs(adminUser);
cy.get('[data-cy=project-panel]').contains(collName).rightclick();
- cy.get('[data-cy=context-menu]').contains('Share').click();
+ cy.get('[data-cy=context-menu]').contains('Share').click({ waitForAnimations: false });
cy.get('button').get('[data-cy=add-invited-people]').should('be.disabled');
cy.get('[data-cy=invite-people-field] input').type('Anonymous');
cy.get('div[role=tooltip]').contains('anonymous').click();
cy.get('[role=button]').contains('API Details');
cy.get('[role=button]').should(account ? 'contain' : 'not.contain', 'Account Settings');
- cy.get('[role=button]').should(activate ? 'contain' : 'not.contain', 'Activate User');
- cy.get('[role=button]').should(deactivate ? 'contain' : 'not.contain', 'Deactivate User');
- cy.get('[role=button]').should(login ? 'contain' : 'not.contain', 'Login As User');
- cy.get('[role=button]').should(setup ? 'contain' : 'not.contain', 'Setup User');
+ cy.get('[role=button]').should(activate ? 'contain' : 'not.contain', 'Activate user');
+ cy.get('[role=button]').should(deactivate ? 'contain' : 'not.contain', 'Deactivate user');
+ cy.get('[role=button]').should(login ? 'contain' : 'not.contain', 'Login as user');
+ cy.get('[role=button]').should(setup ? 'contain' : 'not.contain', 'Setup user');
});
cy.get('div[role=presentation]').click();
}
// Deactivate user
cy.get('[data-cy=user-profile-panel-options-btn]').click();
- cy.get('[data-cy=context-menu]').contains('Deactivate User').click();
+ cy.get('[data-cy=context-menu]').contains('Deactivate user').click();
cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
// Check that user is deactivated
// Setup user
cy.get('[data-cy=user-profile-panel-options-btn]').click();
- cy.get('[data-cy=context-menu]').contains('Setup User').click();
+ cy.get('[data-cy=context-menu]').contains('Setup user').click();
cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
// Check that user is setup
// Activate user
cy.get('[data-cy=user-profile-panel-options-btn]').click();
- cy.get('[data-cy=context-menu]').contains('Activate User').click();
+ cy.get('[data-cy=context-menu]').contains('Activate user').click();
cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
// Check that user is active
// Deactivate and activate user skipping setup
cy.get('[data-cy=user-profile-panel-options-btn]').click();
- cy.get('[data-cy=context-menu]').contains('Deactivate User').click();
+ cy.get('[data-cy=context-menu]').contains('Deactivate user').click();
cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
// Check
cy.get('[data-cy=account-status]').contains('Inactive');
});
// reactivate
cy.get('[data-cy=user-profile-panel-options-btn]').click();
- cy.get('[data-cy=context-menu]').contains('Activate User').click();
+ cy.get('[data-cy=context-menu]').contains('Activate user').click();
cy.get('[data-cy=confirmation-dialog-ok-btn]').click();
// Check that user is active
it('shows the appropriate buttons in the multiselect toolbar', () => {
const msButtonTooltips = [
- 'API Details',
- 'Copy to clipboard',
- 'Delete Workflow',
+ 'View details',
'Open in new tab',
+ 'Copy link to clipboard',
+ 'API Details',
'Run Workflow',
- 'View details',
+ 'Delete Workflow',
];
cy.createResource(activeUser.token, "workflows", {workflow: {name: "Test wf"}})
"version": "0.1.0",
"private": true,
"dependencies": {
+ "@babel/core": "^7.0.0",
+ "@babel/runtime-corejs2": "^7.0.0",
"@coreui/coreui": "^4.3.2",
"@coreui/react": "^4.11.0",
"@date-io/date-fns": "1",
"@types/react-window": "1.8.2",
"@types/redux-form": "7.4.12",
"@types/shell-escape": "^0.2.0",
- "axios": "^0.21.1",
- "babel-core": "6.26.3",
- "babel-runtime": "6.26.0",
+ "axios": "^0.28.1",
"bootstrap": "^5.3.2",
- "caniuse-lite": "1.0.30001299",
+ "caniuse-lite": "1.0.30001606",
"classnames": "2.2.6",
"cwlts": "1.15.29",
"date-fns": "^2.28.0",
"react-router-dom": "4.3.1",
"react-router-redux": "5.0.0-alpha.9",
"react-rte": "^0.16.5",
- "react-scripts": "3.4.4",
+ "react-scripts": "4.0.1",
"react-splitter-layout": "3.0.1",
"react-transition-group": "2.5.0",
"react-virtualized-auto-sizer": "1.0.2",
"test-local": "react-scripts test",
"eject": "react-scripts eject",
"lint": "tslint src/** -t verbose",
- "build-css": "node-sass-chokidar src/ -o src/",
- "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive"
+ "build-css": "node-sass src/ -o src/",
+ "watch-css": "npm run build-css && node-sass src/ -o src/ --watch --recursive"
},
"devDependencies": {
"@sinonjs/fake-timers": "^10.3.0",
"enzyme-adapter-react-16": "1.15.6",
"jest-localstorage-mock": "2.2.0",
"node-sass": "^9.0.0",
- "node-sass-chokidar": "^2.0.0",
"redux-devtools": "3.4.1",
"redux-mock-store": "1.5.4",
"ts-mock-imports": "1.3.7",
"last 1 safari version"
]
},
- "packageManager": "yarn@3.2.0"
+ "packageManager": "yarn@3.2.0",
+ "eslintConfig": {
+ "extends": [
+ "react-app",
+ "react-app/jest"
+ ]
+ }
}
</Typography>
));
-const renderLinks = (auth: FederationConfig, dispatch: Dispatch) => (text: string): JSX.Element => {
+export const renderLinks = (auth: FederationConfig, dispatch: Dispatch) => (text: string): JSX.Element => {
// Matches UUIDs & PDHs
const REGEX = /[a-z0-9]{5}-[a-z0-9]{5}-[a-z0-9]{15}|[0-9a-f]{32}\+\d+/g;
const links = text.match(REGEX);
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { StyleRulesCallback, WithStyles, Typography, withStyles } from '@material-ui/core';
+import { ArvadosTheme } from 'common/custom-theme';
+import classNames from 'classnames';
+import { connect, DispatchProp } from 'react-redux';
+import { RootState } from 'store/store';
+import { FederationConfig } from 'routes/routes';
+import { renderLinks } from './code-snippet';
+import { FixedSizeList } from 'react-window';
+import AutoSizer from "react-virtualized-auto-sizer";
+
+type CssRules = 'root' | 'space' | 'content' ;
+
+const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
+ root: {
+ boxSizing: 'border-box',
+ height: '100%',
+ padding: theme.spacing.unit,
+ },
+ space: {
+ marginLeft: '15px',
+ },
+ content: {
+ maxHeight: '100%',
+ height: '100vh',
+ },
+});
+
+export interface CodeSnippetDataProps {
+ lines: string[];
+ lineFormatter?: (lines: string[], index: number) => string;
+ className?: string;
+ apiResponse?: boolean;
+ linked?: boolean;
+}
+
+interface CodeSnippetAuthProps {
+ auth: FederationConfig;
+}
+
+type CodeSnippetProps = CodeSnippetDataProps & WithStyles<CssRules>;
+
+const mapStateToProps = (state: RootState): CodeSnippetAuthProps => ({
+ auth: state.auth,
+});
+
+export const VirtualCodeSnippet = withStyles(styles)(connect(mapStateToProps)(
+ ({ classes, lines, lineFormatter, linked, className, apiResponse, dispatch, auth }: CodeSnippetProps & CodeSnippetAuthProps & DispatchProp) => {
+ const RenderRow = ({index, style}) => {
+ const lineContents = lineFormatter ? lineFormatter(lines, index) : lines[index];
+ return <span style={style}>{linked ? renderLinks(auth, dispatch)(lineContents) : lineContents}</span>
+ };
+
+ return <Typography
+ component="div"
+ className={classNames([classes.root, className])}>
+ <Typography className={classNames(classes.content, apiResponse ? classes.space : className)} component="pre">
+ <AutoSizer>
+ {({ height, width }) =>
+ <FixedSizeList
+ height={height}
+ width={width}
+ itemSize={21}
+ itemCount={lines.length}
+ >
+ {RenderRow}
+ </FixedSizeList>
+ }
+ </AutoSizer>
+ </Typography>
+ </Typography>;
+}));
setLeftSearch("");
setRightSearch("");
}
- }, [rightKey, rightData]); // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [rightKey, rightData]);
const currentPDH = (collectionPanel.item || {}).portableDataHash;
React.useEffect(() => {
if (currentPDH) {
fetchData([leftKey, rightKey], true);
}
- }, [currentPDH]); // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [currentPDH]);
React.useEffect(() => {
if (rightData) {
onItemMenuOpen(event, item, isWritable);
}
},
- [path, setPath, collectionPanelFiles] // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [path, setPath, collectionPanelFiles]
);
const getItemIcon = React.useCallback(
(ev, isWritable) => {
props.onOptionsMenuOpen(ev, isWritable);
},
- [props.onOptionsMenuOpen] // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ [props.onOptionsMenuOpen]
);
return (
render() {
const { children, value, classes } = this.props;
return (
- <Tooltip title='Copy to clipboard' onClick={(ev) => ev.stopPropagation()}>
+ <Tooltip title='Copy link to clipboard' onClick={(ev) => ev.stopPropagation()}>
<span className={classes.copyIcon}>
<CopyToClipboard text={value} onCopy={this.onCopy}>
{children || <CopyIcon />}
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { ReactElementLike } from 'prop-types';
+import copy from 'copy-to-clipboard';
+
+interface CopyToClipboardProps {
+ getText: (() => string);
+ children: ReactElementLike;
+ onCopy?(text: string, result: boolean): void;
+ options?: {
+ debug?: boolean;
+ message?: string;
+ format?: string; // MIME type
+ };
+}
+
+export default class CopyResultToClipboard extends React.PureComponent<CopyToClipboardProps> {
+ static defaultProps = {
+ onCopy: undefined,
+ options: undefined
+ };
+
+ onClick = event => {
+ const {
+ getText,
+ onCopy,
+ children,
+ options
+ } = this.props;
+
+ const elem = React.Children.only(children);
+
+ const text = getText();
+
+ const result = copy(text, options);
+
+ if (onCopy) {
+ onCopy(text, result);
+ }
+
+ // Bypass onClick if it was present
+ if (elem && elem.props && typeof elem.props.onClick === 'function') {
+ elem.props.onClick(event);
+ }
+ };
+
+
+ render() {
+ const {
+ getText: _getText,
+ onCopy: _onCopy,
+ options: _options,
+ children,
+ ...props
+ } = this.props;
+ const elem = React.Children.only(children);
+
+ return React.cloneElement(elem, {...props, onClick: this.onClick});
+ }
+}
//
// SPDX-License-Identifier: AGPL-3.0
-import React, { useEffect } from 'react';
+import React from 'react';
import {
WithStyles,
withStyles,
};
icon = React.createRef<HTMLElement>();
+ componentWillUnmount(): void {
+ this.submit.cancel();
+ }
+
render() {
const { name, classes, defaultSelection = SelectionMode.ALL, children } = this.props;
const isActive = getNodeDescendants('')(this.state.filters).some((f) => (defaultSelection === SelectionMode.ALL ? !f.selected : f.selected));
</>
</Card>
</Popover>
- <this.MountHandler />
</>
);
}
}
}, 1000);
- MountHandler = () => {
- useEffect(() => {
- return () => {
- this.submit.cancel();
- };
- }, []);
- return null;
- };
-
close = () => {
this.setState((prev) => ({
...prev,
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
+import { VirtualCodeSnippet, CodeSnippetDataProps } from 'components/code-snippet/virtual-code-snippet';
+import grey from '@material-ui/core/colors/grey';
+import { themeOptions } from 'common/custom-theme';
+
+const theme = createMuiTheme(Object.assign({}, themeOptions, {
+ overrides: {
+ MuiTypography: {
+ body1: {
+ color: grey["900"]
+ },
+ root: {
+ backgroundColor: grey["200"]
+ }
+ }
+ },
+ typography: {
+ fontFamily: 'monospace',
+ useNextVariants: true,
+ }
+}));
+
+export const DefaultVirtualCodeSnippet = (props: CodeSnippetDataProps) =>
+ <MuiThemeProvider theme={theme}>
+ <VirtualCodeSnippet {...props} />
+ </MuiThemeProvider>;
if (linkUrl[0] === '/') {
valueNode = <Link to={linkUrl} className={classes.link}>{uuid}</Link>;
} else {
- valueNode = <a href={linkUrl} className={classes.link} target='_blank' rel="noopener">{uuid}</a>;
+ valueNode = <a href={linkUrl} className={classes.link} target='_blank' rel="noopener noreferrer">{uuid}</a>;
}
} else if (link) {
- valueNode = <a href={link} className={classes.link} target='_blank' rel="noopener">{value}</a>;
+ valueNode = <a href={link} className={classes.link} target='_blank' rel="noopener noreferrer">{value}</a>;
} else {
valueNode = value;
}
className={classnames([props.classes.value, props.classValue, { [props.classes.lowercaseValue]: props.lowercaseValue }])}>
{props.value}
{props.children}
- {(props.linkToUuid || props.copyValue) && props.onCopy && <Tooltip title="Copy to clipboard">
+ {(props.linkToUuid || props.copyValue) && props.onCopy && <Tooltip title="Copy link to clipboard">
<span className={props.classes.copyIcon}>
<CopyToClipboard text={props.linkToUuid || props.copyValue || ""} onCopy={() => props.onCopy!("Copied")}>
<CopyIcon />
</SvgIcon>
)
+//https://pictogrammers.com/library/memory/icon/box-light-vertical/
+export const VerticalLineDivider: IconType = (props: any) => (
+ <SvgIcon {...props}>
+ <path d="M12 0V22H10V0H12Z" />
+ </SvgIcon>
+)
+
export type IconType = React.SFC<{ className?: string; style?: object }>;
export const AddIcon: IconType = props => <Add {...props} />;
//
// SPDX-License-Identifier: AGPL-3.0
-import React, { useEffect, useState } from "react";
+import React from "react";
import { connect } from "react-redux";
import { StyleRulesCallback, withStyles, WithStyles, Toolbar, Tooltip, IconButton } from "@material-ui/core";
import { ArvadosTheme } from "common/custom-theme";
import { getResource } from "store/resources/resources";
import { ResourcesState } from "store/resources/resources";
import { MultiSelectMenuAction, MultiSelectMenuActionSet } from "views-components/multiselect-toolbar/ms-menu-actions";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
-import { ContextMenuAction } from "views-components/context-menu/context-menu-action-set";
-import { multiselectActionsFilters, TMultiselectActionsFilters, msMenuResourceKind } from "./ms-toolbar-action-filters";
+import { ContextMenuAction, ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
+import { multiselectActionsFilters, TMultiselectActionsFilters } from "./ms-toolbar-action-filters";
import { kindToActionSet, findActionByName } from "./ms-kind-action-differentiator";
import { msToggleTrashAction } from "views-components/multiselect-toolbar/ms-project-action-set";
import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
import { PublicFavoritesState } from "store/public-favorites/public-favorites-reducer";
import { isExactlyOneSelected } from "store/multiselect/multiselect-actions";
import { IntersectionObserverWrapper } from "./ms-toolbar-overflow-wrapper";
+import { ContextMenuKind, sortMenuItems, menuDirection } from 'views-components/context-menu/menu-item-sort';
-const WIDTH_TRANSITION = 150
-
-type CssRules = "root" | "transition" | "button" | "iconContainer" | "icon";
+type CssRules = "root" | "button" | "iconContainer" | "icon" | "divider";
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
root: {
height: '2.7rem',
padding: 0,
margin: "1rem auto auto 0.3rem",
- transition: `width ${WIDTH_TRANSITION}ms`,
- overflow: 'hidden',
- },
- transition: {
- display: "flex",
- flexDirection: "row",
- height: '2.7rem',
- padding: 0,
- margin: "1rem auto auto 0.3rem",
overflow: 'hidden',
- transition: `width ${WIDTH_TRANSITION}ms`,
},
button: {
width: "2.5rem",
},
icon: {
marginLeft: '-0.5rem',
- }
+ },
+ divider: {
+ display: "flex",
+ alignItems: "center",
+ },
});
export type MultiselectToolbarProps = {
const singleResourceKind = singleSelectedUuid ? [resourceToMsResourceKind(singleSelectedUuid, iconProps.resources, user)] : null
const currentResourceKinds = singleResourceKind ? singleResourceKind : Array.from(selectedToKindSet(checkedList));
const currentPathIsTrash = window.location.pathname === "/trash";
- const [isTransitioning, setIsTransitioning] = useState(false);
-
- const handleTransition = () => {
- setIsTransitioning(true)
- setTimeout(() => {
- setIsTransitioning(false)
- }, WIDTH_TRANSITION);
- }
-
- useEffect(()=>{
- handleTransition()
- }, [checkedList])
- const actions =
+ const rawActions =
currentPathIsTrash && selectedToKindSet(checkedList).size
? [msToggleTrashAction]
: selectActionsByKind(currentResourceKinds as string[], multiselectActionsFilters).filter((action) =>
singleSelectedUuid === null ? action.isForMulti : true
);
+
+ const actions: ContextMenuAction[] | MultiSelectMenuAction[] = sortMenuItems(
+ singleResourceKind && singleResourceKind.length ? (singleResourceKind[0] as ContextMenuKind) : ContextMenuKind.MULTI,
+ rawActions,
+ menuDirection.HORIZONTAL
+ );
return (
<React.Fragment>
<Toolbar
- className={isTransitioning ? classes.transition: classes.root}
+ className={classes.root}
style={{ width: `${(actions.length * 2.5) + 6}rem`}}
data-cy='multiselect-toolbar'
>
<IntersectionObserverWrapper menuLength={actions.length}>
{actions.map((action, i) =>{
const { hasAlts, useAlts, name, altName, icon, altIcon } = action;
- return hasAlts ? (
+ return action.name === ContextMenuActionNames.DIVIDER ? (
+ action.component && (
+ <div
+ className={classes.divider}
+ data-targetid={`${name}${i}`}
+ key={i}
+ >
+ <action.component />
+ </div>
+ )
+ ) : hasAlts ? (
<Tooltip
className={classes.button}
data-targetid={name}
title={currentPathIsTrash || (useAlts && useAlts(singleSelectedUuid, iconProps)) ? altName : name}
key={i}
disableFocusListener
- >
+ >
<span className={classes.iconContainer}>
<IconButton
data-cy='multiselect-button'
title={action.name}
key={i}
disableFocusListener
- >
+ >
<span className={classes.iconContainer}>
<IconButton
data-cy='multiselect-button'
return actionArray[0].filter(action => filters.has(action.name as string));
}
-const resourceToMsResourceKind = (uuid: string, resources: ResourcesState, user: User | null, readonly = false): (msMenuResourceKind | ResourceKind) | undefined => {
+const resourceToMsResourceKind = (uuid: string, resources: ResourcesState, user: User | null, readonly = false): (ContextMenuKind | ResourceKind) | undefined => {
if (!user) return;
const resource = getResourceWithEditableStatus<GroupResource & EditableResource>(uuid, user.uuid)(resources);
const { isAdmin } = user;
switch (kind) {
case ResourceKind.PROJECT:
if (isFrozen) {
- return isAdmin ? msMenuResourceKind.FROZEN_PROJECT_ADMIN : msMenuResourceKind.FROZEN_PROJECT;
+ return isAdmin ? ContextMenuKind.FROZEN_PROJECT_ADMIN : ContextMenuKind.FROZEN_PROJECT;
}
return isAdmin && !readonly
? resource && resource.groupClass !== GroupClass.FILTER
- ? msMenuResourceKind.PROJECT_ADMIN
- : msMenuResourceKind.FILTER_GROUP_ADMIN
+ ? ContextMenuKind.PROJECT_ADMIN
+ : ContextMenuKind.FILTER_GROUP_ADMIN
: isEditable
? resource && resource.groupClass !== GroupClass.FILTER
- ? msMenuResourceKind.PROJECT
- : msMenuResourceKind.FILTER_GROUP
- : msMenuResourceKind.READONLY_PROJECT;
+ ? ContextMenuKind.PROJECT
+ : ContextMenuKind.FILTER_GROUP
+ : ContextMenuKind.READONLY_PROJECT;
case ResourceKind.COLLECTION:
const c = getResource<CollectionResource>(uuid)(resources);
if (c === undefined) {
const isOldVersion = c.uuid !== c.currentVersionUuid;
const isTrashed = c.isTrashed;
return isOldVersion
- ? msMenuResourceKind.OLD_VERSION_COLLECTION
+ ? ContextMenuKind.OLD_VERSION_COLLECTION
: isTrashed && isEditable
- ? msMenuResourceKind.TRASHED_COLLECTION
+ ? ContextMenuKind.TRASHED_COLLECTION
: isAdmin && isEditable
- ? msMenuResourceKind.COLLECTION_ADMIN
+ ? ContextMenuKind.COLLECTION_ADMIN
: isEditable
- ? msMenuResourceKind.COLLECTION
- : msMenuResourceKind.READONLY_COLLECTION;
+ ? ContextMenuKind.COLLECTION
+ : ContextMenuKind.READONLY_COLLECTION;
case ResourceKind.PROCESS:
return isAdmin && isEditable
? resource && isProcessCancelable(getProcess(resource.uuid)(resources) as Process)
- ? msMenuResourceKind.RUNNING_PROCESS_ADMIN
- : msMenuResourceKind.PROCESS_ADMIN
+ ? ContextMenuKind.RUNNING_PROCESS_ADMIN
+ : ContextMenuKind.PROCESS_ADMIN
: readonly
- ? msMenuResourceKind.READONLY_PROCESS_RESOURCE
+ ? ContextMenuKind.READONLY_PROCESS_RESOURCE
: resource && isProcessCancelable(getProcess(resource.uuid)(resources) as Process)
- ? msMenuResourceKind.RUNNING_PROCESS_RESOURCE
- : msMenuResourceKind.PROCESS_RESOURCE;
+ ? ContextMenuKind.RUNNING_PROCESS_RESOURCE
+ : ContextMenuKind.PROCESS_RESOURCE;
case ResourceKind.USER:
- return msMenuResourceKind.ROOT_PROJECT;
+ return ContextMenuKind.ROOT_PROJECT;
case ResourceKind.LINK:
- return msMenuResourceKind.LINK;
+ return ContextMenuKind.LINK;
case ResourceKind.WORKFLOW:
- return isEditable ? msMenuResourceKind.WORKFLOW : msMenuResourceKind.READONLY_WORKFLOW;
+ return isEditable ? ContextMenuKind.WORKFLOW : ContextMenuKind.READONLY_WORKFLOW;
default:
return;
}
};
-function selectActionsByKind(currentResourceKinds: Array<string>, filterSet: TMultiselectActionsFilters) {
+function selectActionsByKind(currentResourceKinds: Array<string>, filterSet: TMultiselectActionsFilters): MultiSelectMenuAction[] {
const rawResult: Set<MultiSelectMenuAction> = new Set();
const resultNames = new Set();
const allFiltersArray: MultiSelectMenuAction[][] = []
return true;
});
- return filteredResult.sort((a, b) => {
- const nameA = a.name || "";
- const nameB = b.name || "";
- if (nameA < nameB) {
- return -1;
- }
- if (nameA > nameB) {
- return 1;
- }
- return 0;
- });
+ return filteredResult;
}
executeMulti: (selectedAction: ContextMenuAction, checkedList: TCheckedList, resources: ResourcesState): void => {
const kindGroups = groupByKind(checkedList, resources);
switch (selectedAction.name) {
- case MultiSelectMenuActionNames.MOVE_TO:
- case MultiSelectMenuActionNames.REMOVE:
+ case ContextMenuActionNames.MOVE_TO:
+ case ContextMenuActionNames.REMOVE:
const firstResource = getResource(selectedToArray(checkedList)[0])(resources) as ContainerRequestResource | Resource;
const action = findActionByName(selectedAction.name as string, kindToActionSet[firstResource.kind]);
if (action) action.execute(dispatch, kindGroups[firstResource.kind]);
break;
- case MultiSelectMenuActionNames.COPY_TO_CLIPBOARD:
+ case ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD:
const selectedResources = selectedToArray(checkedList).map(uuid => getResource(uuid)(resources));
dispatch<any>(copyToClipboardAction(selectedResources));
break;
import { msProcessActionSet, msCommonProcessActionFilter, msAdminProcessActionFilter, msRunningProcessActionFilter } from 'views-components/multiselect-toolbar/ms-process-action-set';
import { msWorkflowActionSet, msWorkflowActionFilter, msReadOnlyWorkflowActionFilter } from 'views-components/multiselect-toolbar/ms-workflow-action-set';
import { ResourceKind } from 'models/resource';
-
-export enum msMenuResourceKind {
- API_CLIENT_AUTHORIZATION = 'ApiClientAuthorization',
- ROOT_PROJECT = 'RootProject',
- PROJECT = 'Project',
- FILTER_GROUP = 'FilterGroup',
- READONLY_PROJECT = 'ReadOnlyProject',
- FROZEN_PROJECT = 'FrozenProject',
- FROZEN_PROJECT_ADMIN = 'FrozenProjectAdmin',
- PROJECT_ADMIN = 'ProjectAdmin',
- FILTER_GROUP_ADMIN = 'FilterGroupAdmin',
- RESOURCE = 'Resource',
- FAVORITE = 'Favorite',
- TRASH = 'Trash',
- COLLECTION_FILES = 'CollectionFiles',
- COLLECTION_FILES_MULTIPLE = 'CollectionFilesMultiple',
- READONLY_COLLECTION_FILES = 'ReadOnlyCollectionFiles',
- READONLY_COLLECTION_FILES_MULTIPLE = 'ReadOnlyCollectionFilesMultiple',
- COLLECTION_FILES_NOT_SELECTED = 'CollectionFilesNotSelected',
- COLLECTION_FILE_ITEM = 'CollectionFileItem',
- COLLECTION_DIRECTORY_ITEM = 'CollectionDirectoryItem',
- READONLY_COLLECTION_FILE_ITEM = 'ReadOnlyCollectionFileItem',
- READONLY_COLLECTION_DIRECTORY_ITEM = 'ReadOnlyCollectionDirectoryItem',
- COLLECTION = 'Collection',
- COLLECTION_ADMIN = 'CollectionAdmin',
- READONLY_COLLECTION = 'ReadOnlyCollection',
- OLD_VERSION_COLLECTION = 'OldVersionCollection',
- TRASHED_COLLECTION = 'TrashedCollection',
- PROCESS = 'Process',
- RUNNING_PROCESS_ADMIN = 'RunningProcessAdmin',
- PROCESS_ADMIN = 'ProcessAdmin',
- RUNNING_PROCESS_RESOURCE = 'RunningProcessResource',
- PROCESS_RESOURCE = 'ProcessResource',
- READONLY_PROCESS_RESOURCE = 'ReadOnlyProcessResource',
- PROCESS_LOGS = 'ProcessLogs',
- REPOSITORY = 'Repository',
- SSH_KEY = 'SshKey',
- VIRTUAL_MACHINE = 'VirtualMachine',
- KEEP_SERVICE = 'KeepService',
- USER = 'User',
- GROUPS = 'Group',
- GROUP_MEMBER = 'GroupMember',
- PERMISSION_EDIT = 'PermissionEdit',
- LINK = 'Link',
- WORKFLOW = 'Workflow',
- READONLY_WORKFLOW = 'ReadOnlyWorkflow',
- SEARCH_RESULTS = 'SearchResults',
-}
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
const {
COLLECTION,
FILTER_GROUP_ADMIN,
WORKFLOW,
READONLY_WORKFLOW,
-} = msMenuResourceKind;
+} = ContextMenuKind;
export type TMultiselectActionsFilters = Record<string, [MultiSelectMenuActionSet, Set<string>]>;
>
{React.Children.map(children, (child: any) => {
if (!visibilityMap[child.props['data-targetid']]) {
- return (
- <MenuItem
+ return <MenuItem
key={child}
onClick={handleClose}
className={classes.menuItem}
className: classnames(classes.menuElement),
})}
</MenuItem>
- );
}
return null;
})}
visibilityMap={visibilityMap}
className={classes.overflowStyle}
>
- {children}
+ {children.filter((child) => !child.props['data-targetid'].includes("Divider"))}
</OverflowMenu>
)}
</div>
describe("<SearchInput />", () => {
- jest.useFakeTimers();
-
let onSearch: () => void;
beforeEach(() => {
+ jest.useFakeTimers();
onSearch = jest.fn();
});
setValue("");
clearTimeout(timeout);
};
- }, [props.value, props.label]); // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [props.value, props.label]);
useEffect(() => {
if (selfClearProp !== props.selfClearProp) {
setSelfClearProp(props.selfClearProp);
handleChange({ target: { value: "" } } as any);
}
- }, [props.selfClearProp]); // eslint-disable-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [props.selfClearProp]);
const handleSubmit = (event: React.FormEvent<HTMLElement>) => {
event.preventDefault();
// SPDX-License-Identifier: AGPL-3.0
import { CommandInputParameter } from 'models/workflow';
-import { require } from 'validators/require';
+import { fieldRequire } from 'validators/require';
import { CWLType } from '../../models/workflow';
}
}
}
- return require;
+ return fieldRequire;
};
import { CustomTheme } from "common/custom-theme";
import { fetchConfig } from "common/config";
import servicesProvider from "common/service-provider";
-import { addMenuActionSet, ContextMenuKind } from "views-components/context-menu/context-menu";
+import { addMenuActionSet } from "views-components/context-menu/context-menu";
+import { ContextMenuKind } from "views-components/context-menu/menu-item-sort";
import { rootProjectActionSet } from "views-components/context-menu/action-sets/root-project-action-set";
import {
filterGroupActionSet,
testCases.forEach(([inputURL, inputDisplayName, expectedURL, expectedName]) => {
// given
const collUUID = 'xxxxx-zzzzz-vvvvvvvvvvvvvvv';
- const xmlData = `
- <?xml version="1.0" encoding="UTF-8"?>
+ const xmlData = `<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/c=xxxxx-zzzzz-vvvvvvvvvvvvvvv/</D:href>
// SPDX-License-Identifier: AGPL-3.0
import { CollectionResource, defaultCollectionSelectedFields } from "models/collection";
-import { AxiosInstance } from "axios";
+import { AxiosInstance, AxiosResponse } from "axios";
import { CollectionFile, CollectionDirectory } from "models/collection-file";
import { WebDAV } from "common/webdav";
import { AuthService } from "../auth-service/auth-service";
| (Partial<CollectionResource> & Pick<CollectionResource, "uuid">)
| (Partial<CollectionResource> & Pick<CollectionResource, "ownerUuid">);
+type ReplaceFilesPayload = {
+ collection: Partial<CollectionResource>;
+ replace_files: {[key: string]: string};
+}
+
export const emptyCollectionPdh = "d41d8cd98f00b204e9800998ecf8427e+0";
export const SOURCE_DESTINATION_EQUAL_ERROR_MESSAGE = "Source and destination cannot be the same";
}
private replaceFiles(data: CollectionPartialUpdateOrCreate, fileMap: {}, showErrors?: boolean) {
- const payload = {
+ const payload: ReplaceFilesPayload = {
collection: {
preserve_version: true,
...CommonService.mapKeys(snakeCase)(data),
};
if (data.uuid) {
return CommonService.defaultResponse(
- this.serverApi.put<CollectionResource>(`/${this.resourceType}/${data.uuid}`, payload),
+ this.serverApi.put<ReplaceFilesPayload, AxiosResponse<CollectionResource>>(`/${this.resourceType}/${data.uuid}`, payload),
this.actions,
true, // mapKeys
showErrors
);
} else {
return CommonService.defaultResponse(
- this.serverApi.post<CollectionResource>(`/${this.resourceType}`, payload),
+ this.serverApi.post<ReplaceFilesPayload, AxiosResponse<CollectionResource>>(`/${this.resourceType}`, payload),
this.actions,
true, // mapKeys
showErrors
}
export function removeAuthorizationHeader(services: ServiceRepository) {
- delete services.apiClient.defaults.headers.common;
+ services.apiClient.defaults.headers.common = {};
+
services.keepWebdavClient.setAuthorization(undefined);
services.apiWebdavClient.setAuthorization(undefined);
}
it("handles LOGOUT action", () => {
localStorage.setItem(API_TOKEN_KEY, 'someToken');
- window.location.assign = jest.fn();
+ Object.defineProperty(window, 'location', {
+ value: { assign: jest.fn(), href: 'http://localhost', protocol: 'http:', host: 'localhost'}
+ });
const next = jest.fn();
const middleware = authMiddleware(services)(store)(next);
middleware(authActions.LOGOUT({deleteLinkData: false, preservePath: false}));
dispatch(bannerReducerActions.CLOSE_BANNER());
};
-export default {
+const bannerActions = {
openBanner,
closeBanner
};
+
+export default bannerActions;
\ No newline at end of file
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuKind } from 'views-components/context-menu/context-menu';
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { resourceUuidToContextMenuKind } from './context-menu-actions';
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { unionize, ofType, UnionOf } from "common/unionize";
import { ContextMenuPosition } from "./context-menu-reducer";
-import { ContextMenuKind } from "views-components/context-menu/context-menu";
+import { ContextMenuKind } from "views-components/context-menu/menu-item-sort";
import { Dispatch } from "redux";
import { RootState } from "store/store";
import { getResource, getResourceWithEditableStatus } from "../resources/resources";
import { snackbarActions, SnackbarKind } from "../snackbar/snackbar-actions";
import { ServiceRepository } from "services/services";
import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { addDisabledButton, removeDisabledButton } from "store/multiselect/multiselect-actions";
import { loadFavoritesTree} from "store/side-panel-tree/side-panel-tree-actions";
return Promise.reject("No user");
}
dispatch(progressIndicatorActions.START_WORKING("toggleFavorite"));
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.ADD_TO_FAVORITES))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.ADD_TO_FAVORITES))
dispatch(favoritesActions.TOGGLE_FAVORITE({ resourceUuid: resource.uuid }));
const isFavorite = checkFavorite(resource.uuid, getState().favorites);
dispatch(snackbarActions.OPEN_SNACKBAR({
hideDuration: 2000,
kind: SnackbarKind.SUCCESS
}));
- dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.ADD_TO_FAVORITES))
+ dispatch<any>(removeDisabledButton(ContextMenuActionNames.ADD_TO_FAVORITES))
dispatch(progressIndicatorActions.STOP_WORKING("toggleFavorite"));
dispatch<any>(loadFavoritesTree())
})
};
export const copyToClipboardAction = (resources: Array<any>) => (dispatch: Dispatch, getState: () => RootState) => {
- // Copy to clipboard omits token to avoid accidental sharing
+ // Copy link to clipboard omits token to avoid accidental sharing
let url = getNavUrl(resources[0].uuid, getState().auth, false);
let wasCopied;
]);
export const formatInputData = (inputs: CommandInputParameter[], auth: AuthState): ProcessIOParameter[] => {
- return inputs.map(input => {
- return {
- id: getIOParamId(input),
- label: input.label || "",
- value: getIOParamDisplayValue(auth, input),
- };
+ return inputs.flatMap((input): ProcessIOParameter[] => {
+ const processValues = getIOParamDisplayValue(auth, input);
+ return processValues.map((thisValue, i) => ({
+ id: i === 0 ? getIOParamId(input) : "",
+ label: i === 0 ? input.label || "" : "",
+ value: thisValue,
+ }));
});
};
pdh: string | undefined,
auth: AuthState
): ProcessIOParameter[] => {
- return definitions.map(output => {
- return {
- id: getIOParamId(output),
- label: output.label || "",
- value: getIOParamDisplayValue(auth, Object.assign(output, { value: values[getIOParamId(output)] || [] }), pdh),
- };
+ return definitions.flatMap((output): ProcessIOParameter[] => {
+ const processValues = getIOParamDisplayValue(auth, Object.assign(output, { value: values[getIOParamId(output)] || [] }), pdh);
+ return processValues.map((thisValue, i) => ({
+ id: i === 0 ? getIOParamId(output) : "",
+ label: i === 0 ? output.label || "" : "",
+ value: thisValue,
+ }));
});
};
import { selectedFieldsOfGroup } from "models/group";
import { defaultCollectionSelectedFields } from "models/collection";
import { containerRequestFieldsNoMounts } from "models/container-request";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { removeDisabledButton } from "store/multiselect/multiselect-actions";
import { dataExplorerActions } from "store/data-explorer/data-explorer-action";
} finally {
if (!background) {
api.dispatch(progressIndicatorActions.PERSIST_STOP_WORKING(this.getId()));
- api.dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.MOVE_TO_TRASH))
+ api.dispatch<any>(removeDisabledButton(ContextMenuActionNames.MOVE_TO_TRASH))
}
}
}
import { projectPanelActions } from "store/project-panel/project-panel-action-bind";
import { loadResource } from "store/resources/resources-actions";
import { RootState } from "store/store";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { addDisabledButton, removeDisabledButton } from "store/multiselect/multiselect-actions";
export const freezeProject = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.FREEZE_PROJECT))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.FREEZE_PROJECT))
const userUUID = getState().auth.user!.uuid;
const updatedProject = await services.projectService.update(uuid, {
dispatch(projectPanelActions.REQUEST_ITEMS());
dispatch<any>(loadResource(uuid, false));
- dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.FREEZE_PROJECT))
+ dispatch<any>(removeDisabledButton(ContextMenuActionNames.FREEZE_PROJECT))
return updatedProject;
};
export const unfreezeProject = (uuid: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.FREEZE_PROJECT))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.FREEZE_PROJECT))
const updatedProject = await services.projectService.update(uuid, {
frozenByUuid: null,
});
dispatch(projectPanelActions.REQUEST_ITEMS());
dispatch<any>(loadResource(uuid, false));
- dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.FREEZE_PROJECT))
+ dispatch<any>(removeDisabledButton(ContextMenuActionNames.FREEZE_PROJECT))
return updatedProject;
};
import { ServiceRepository } from "services/services";
import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions";
import { addDisabledButton, removeDisabledButton } from "store/multiselect/multiselect-actions";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { loadPublicFavoritesTree } from "store/side-panel-tree/side-panel-tree-actions";
export const publicFavoritesActions = unionize({
export const togglePublicFavorite = (resource: { uuid: string; name: string }) =>
(dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
dispatch(progressIndicatorActions.START_WORKING("togglePublicFavorite"));
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.ADD_TO_PUBLIC_FAVORITES))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES))
const uuidPrefix = getState().auth.config.uuidPrefix;
const uuid = `${uuidPrefix}-j7d0g-publicfavorites`;
dispatch(publicFavoritesActions.TOGGLE_PUBLIC_FAVORITE({ resourceUuid: resource.uuid }));
hideDuration: 2000,
kind: SnackbarKind.SUCCESS
}));
- dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.ADD_TO_PUBLIC_FAVORITES))
+ dispatch<any>(removeDisabledButton(ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES))
dispatch(progressIndicatorActions.STOP_WORKING("togglePublicFavorite"));
dispatch<any>(loadPublicFavoritesTree())
})
import { getDataExplorerColumnFilters } from 'store/data-explorer/data-explorer-middleware-service';
import { joinFilters } from 'services/api/filter-builder';
import { CollectionResource } from "models/collection";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { removeDisabledButton } from "store/multiselect/multiselect-actions";
export class TrashPanelMiddlewareService extends DataExplorerMiddlewareService {
constructor(private services: ServiceRepository, id: string) {
}));
api.dispatch(couldNotFetchTrashContents());
}
- api.dispatch<any>(removeDisabledButton(MultiSelectMenuActionNames.MOVE_TO_TRASH))
+ api.dispatch<any>(removeDisabledButton(ContextMenuActionNames.MOVE_TO_TRASH))
}
}
import { ResourceKind } from "models/resource";
import { navigateTo, navigateToTrash } from "store/navigation/navigation-action";
import { matchCollectionRoute, matchSharedWithMeRoute } from "routes/routes";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { addDisabledButton } from "store/multiselect/multiselect-actions";
export const toggleProjectTrashed =
let errorMessage = "";
let successMessage = "";
let untrashedResource;
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.MOVE_TO_TRASH))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.MOVE_TO_TRASH))
try {
if (isTrashed) {
errorMessage = "Could not restore project from trash";
async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
let errorMessage = "";
let successMessage = "";
- dispatch<any>(addDisabledButton(MultiSelectMenuActionNames.MOVE_TO_TRASH))
+ dispatch<any>(addDisabledButton(ContextMenuActionNames.MOVE_TO_TRASH))
try {
if (isTrashed) {
const { location } = getState().router;
export const ERROR_MESSAGE = 'This field is required.';
-export const require: any = (value: string) => {
+export const fieldRequire: any = (value: string) => {
return value && value.length > 0 ? undefined : ERROR_MESSAGE;
};
//
// SPDX-License-Identifier: AGPL-3.0
-import { require } from './require';
+import { fieldRequire } from './require';
import { maxLength } from './max-length';
import { isRsaKey } from './is-rsa-key';
import { isRemoteHost } from "./is-remote-host";
export const TAG_KEY_VALIDATION = [maxLength(255)];
export const TAG_VALUE_VALIDATION = [maxLength(255)];
-export const PROJECT_NAME_VALIDATION = [require, validName, maxLength(255)];
-export const PROJECT_NAME_VALIDATION_ALLOW_SLASH = [require, validNameAllowSlash, maxLength(255)];
+export const PROJECT_NAME_VALIDATION = [fieldRequire, validName, maxLength(255)];
+export const PROJECT_NAME_VALIDATION_ALLOW_SLASH = [fieldRequire, validNameAllowSlash, maxLength(255)];
-export const COLLECTION_NAME_VALIDATION = [require, validName, maxLength(255)];
-export const COLLECTION_NAME_VALIDATION_ALLOW_SLASH = [require, validNameAllowSlash, maxLength(255)];
+export const COLLECTION_NAME_VALIDATION = [fieldRequire, validName, maxLength(255)];
+export const COLLECTION_NAME_VALIDATION_ALLOW_SLASH = [fieldRequire, validNameAllowSlash, maxLength(255)];
export const COLLECTION_DESCRIPTION_VALIDATION = [maxLength(255)];
-export const COLLECTION_PROJECT_VALIDATION = [require];
+export const COLLECTION_PROJECT_VALIDATION = [fieldRequire];
-export const COPY_NAME_VALIDATION = [require, maxLength(255)];
-export const COPY_FILE_VALIDATION = [require];
-export const RENAME_FILE_VALIDATION = [require, validFilePath];
+export const COPY_NAME_VALIDATION = [fieldRequire, maxLength(255)];
+export const COPY_FILE_VALIDATION = [fieldRequire];
+export const RENAME_FILE_VALIDATION = [fieldRequire, validFilePath];
-export const MOVE_TO_VALIDATION = [require];
+export const MOVE_TO_VALIDATION = [fieldRequire];
-export const PROCESS_NAME_VALIDATION = [require, maxLength(255)];
+export const PROCESS_NAME_VALIDATION = [fieldRequire, maxLength(255)];
export const PROCESS_DESCRIPTION_VALIDATION = [maxLength(255)];
-export const REPOSITORY_NAME_VALIDATION = [require, maxLength(255)];
+export const REPOSITORY_NAME_VALIDATION = [fieldRequire, maxLength(255)];
-export const USER_EMAIL_VALIDATION = [require, maxLength(255)];
+export const USER_EMAIL_VALIDATION = [fieldRequire, maxLength(255)];
export const PROFILE_EMAIL_VALIDATION = [maxLength(255)];
export const PROFILE_URL_VALIDATION = [maxLength(255)];
export const USER_LENGTH_VALIDATION = [maxLength(255)];
-export const SSH_KEY_PUBLIC_VALIDATION = [require, isRsaKey, maxLength(1024)];
-export const SSH_KEY_NAME_VALIDATION = [require, maxLength(255)];
+export const SSH_KEY_PUBLIC_VALIDATION = [fieldRequire, isRsaKey, maxLength(1024)];
+export const SSH_KEY_NAME_VALIDATION = [fieldRequire, maxLength(255)];
-export const SITE_MANAGER_REMOTE_HOST_VALIDATION = [require, isRemoteHost, maxLength(255)];
+export const SITE_MANAGER_REMOTE_HOST_VALIDATION = [fieldRequire, isRemoteHost, maxLength(255)];
-export const MY_ACCOUNT_VALIDATION = [require];
+export const MY_ACCOUNT_VALIDATION = [fieldRequire];
-export const CHOOSE_VM_VALIDATION = [require];
+export const CHOOSE_VM_VALIDATION = [fieldRequire];
const sessionIdleTimeout = 300;
const lastWarningDuration = 60;
const eventListeners = {};
- jest.useFakeTimers();
- beforeAll(() => {
+ beforeEach(() => {
+ jest.useFakeTimers();
window.addEventListener = jest.fn((event, cb) => {
eventListeners[event] = cb;
});
- });
-
- beforeEach(() => {
props = {
sessionIdleTimeout: sessionIdleTimeout,
lastWarningDuration: lastWarningDuration,
import { RootState } from "store/store";
import { Dispatch } from "redux";
import { collectionPanelFilesAction } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
-import { ContextMenuKind } from "../context-menu/context-menu";
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { openContextMenu, openCollectionFilesContextMenu } from 'store/context-menu/context-menu-actions';
import { openUploadCollectionFilesDialog } from 'store/collections/collection-upload-actions';
import { ResourceKind } from "models/resource";
openApiClientAuthorizationRemoveDialog,
} from "store/api-client-authorizations/api-client-authorizations-actions";
import { openAdvancedTabDialog } from "store/advanced-tab/advanced-tab";
-import { ContextMenuActionSet } from "views-components/context-menu/context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { AdvancedIcon, RemoveIcon, AttributesIcon } from "components/icon/icon";
export const apiClientAuthorizationActionSet: ContextMenuActionSet = [
[
{
- name: "Attributes",
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openApiClientAuthorizationAttributesDialog(resources[0].uuid));
},
},
{
- name: "API Details",
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: "Remove",
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openApiClientAuthorizationRemoveDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuAction, ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuAction, ContextMenuActionSet, ContextMenuActionNames } from "../context-menu-action-set";
import { ToggleFavoriteAction } from "../actions/favorite-action";
import { toggleFavorite } from "store/favorites/favorites-actions";
import {
const toggleFavoriteAction: ContextMenuAction = {
component: ToggleFavoriteAction,
- name: "ToggleFavoriteAction",
+ name: ContextMenuActionNames.ADD_TO_FAVORITES,
execute: (dispatch, resources) => {
for (const resource of [...resources]) {
dispatch<any>(toggleFavorite(resource)).then(() => {
[
{
icon: OpenIcon,
- name: "Open in new tab",
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: (dispatch, resources) => {
dispatch<any>(openInNewTabAction(resources[0]));
},
},
{
icon: Link,
- name: "Copy to clipboard",
+ name: ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
execute: (dispatch, resources) => {
dispatch<any>(copyToClipboardAction(resources));
},
},
{
icon: CopyIcon,
- name: "Make a copy",
+ name: ContextMenuActionNames.MAKE_A_COPY,
execute: (dispatch, resources) => {
if (resources[0].fromContextMenu || resources.length === 1) dispatch<any>(openCollectionCopyDialog(resources[0]));
else dispatch<any>(openMultiCollectionCopyDialog(resources[0]));
},
{
icon: DetailsIcon,
- name: "View details",
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: dispatch => {
dispatch<any>(toggleDetailsPanel());
},
},
{
icon: AdvancedIcon,
- name: "API Details",
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
toggleFavoriteAction,
{
icon: FolderSharedIcon,
- name: "Open with 3rd party client",
+ name: ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
execute: (dispatch, resources) => {
dispatch<any>(openWebDavS3InfoDialog(resources[0].uuid));
},
...readOnlyCollectionActionSet.reduce((prev, next) => prev.concat(next), []),
{
icon: RenameIcon,
- name: "Edit collection",
+ name: ContextMenuActionNames.EDIT_COLLECTION,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionUpdateDialog(resources[0]));
},
},
{
icon: ShareIcon,
- name: "Share",
+ name: ContextMenuActionNames.SHARE,
execute: (dispatch, resources) => {
dispatch<any>(openSharingDialog(resources[0].uuid));
},
},
{
icon: MoveToIcon,
- name: "Move to",
+ name: ContextMenuActionNames.MOVE_TO,
execute: (dispatch, resources) => dispatch<any>(openMoveCollectionDialog(resources[0])),
},
{
component: ToggleTrashAction,
- name: "ToggleTrashAction",
+ name: ContextMenuActionNames.MOVE_TO_TRASH,
execute: (dispatch, resources: ContextMenuResource[]) => {
for (const resource of [...resources]) {
dispatch<any>(toggleCollectionTrashed(resource.uuid, resource.isTrashed!!));
...collectionActionSet.reduce((prev, next) => prev.concat(next), []),
{
component: TogglePublicFavoriteAction,
- name: "TogglePublicFavoriteAction",
+ name: ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
execute: (dispatch, resources) => {
for (const resource of [...resources]) {
dispatch<any>(togglePublicFavorite(resource)).then(() => {
...commonActionSet.reduce((prev, next) => prev.concat(next), []),
{
icon: RestoreVersionIcon,
- name: "Restore version",
+ name: ContextMenuActionNames.RESTORE_VERSION,
execute: (dispatch, resources) => {
for (const resource of [...resources]) {
dispatch<any>(openRestoreCollectionVersionDialog(resource.uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuAction, ContextMenuActionSet } from "views-components/context-menu/context-menu-action-set";
+import { ContextMenuAction, ContextMenuActionSet, ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { collectionPanelFilesAction, openMultipleFilesRemoveDialog } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
import {
openCollectionPartialCopyMultipleToNewCollectionDialog,
const copyActions: ContextMenuAction[] = [
{
- name: "Copy selected into new collection",
+ name: ContextMenuActionNames.COPY_SELECTED_INTO_NEW_COLLECTION,
icon: FileCopyIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialCopyMultipleToNewCollectionDialog());
}
},
{
- name: "Copy selected into existing collection",
+ name: ContextMenuActionNames.COPY_SELECTED_INTO_EXISTING_COLLECTION,
icon: FileCopyIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialCopyMultipleToExistingCollectionDialog());
const copyActionsMultiple: ContextMenuAction[] = [
...copyActions,
{
- name: "Copy selected into separate collections",
+ name: ContextMenuActionNames.COPY_SELECTED_INTO_SEPARATE_COLLECTIONS,
icon: FileCopyIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialCopyToSeparateCollectionsDialog());
const moveActions: ContextMenuAction[] = [
{
- name: "Move selected into new collection",
+ name: ContextMenuActionNames.MOVE_SELECTED_INTO_NEW_COLLECTION,
icon: FileMoveIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialMoveMultipleToNewCollectionDialog());
}
},
{
- name: "Move selected into existing collection",
+ name: ContextMenuActionNames.MOVE_SELECTED_INTO_EXISTING_COLLECTION,
icon: FileMoveIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialMoveMultipleToExistingCollectionDialog());
const moveActionsMultiple: ContextMenuAction[] = [
...moveActions,
{
- name: "Move selected into separate collections",
+ name: ContextMenuActionNames.MOVE_SELECTED_INTO_SEPARATE_COLLECTIONS,
icon: FileMoveIcon,
execute: dispatch => {
dispatch<any>(openCollectionPartialMoveToSeparateCollectionsDialog());
const selectActions: ContextMenuAction[] = [
{
- name: "Select all",
+ name: ContextMenuActionNames.SELECT_ALL,
icon: SelectAllIcon,
execute: dispatch => {
dispatch(collectionPanelFilesAction.SELECT_ALL_COLLECTION_FILES());
}
},
{
- name: "Unselect all",
+ name: ContextMenuActionNames.UNSELECT_ALL,
icon: SelectNoneIcon,
execute: dispatch => {
dispatch(collectionPanelFilesAction.UNSELECT_ALL_COLLECTION_FILES());
];
const removeAction: ContextMenuAction = {
- name: "Remove selected",
+ name: ContextMenuActionNames.REMOVE_SELECTED,
icon: RemoveIcon,
execute: dispatch => {
dispatch(openMultipleFilesRemoveDialog());
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "../context-menu-action-set";
import { FileCopyIcon, FileMoveIcon, RemoveIcon, RenameIcon } from "components/icon/icon";
import { DownloadCollectionFileAction } from "../actions/download-collection-file-action";
import { openFileRemoveDialog, openRenameFileDialog } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
export const readOnlyCollectionDirectoryItemActionSet: ContextMenuActionSet = [
[
{
- name: "Copy item into new collection",
+ name: ContextMenuActionNames.COPY_ITEM_INTO_NEW_COLLECTION,
icon: FileCopyIcon,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionPartialCopyToNewCollectionDialog(resources[0]));
},
},
{
- name: "Copy item into existing collection",
+ name: ContextMenuActionNames.COPY_ITEM_INTO_EXISTING_COLLECTION,
icon: FileCopyIcon,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionPartialCopyToExistingCollectionDialog(resources[0]));
},
{
component: CollectionFileViewerAction,
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: () => {
return;
},
},
{
component: CollectionCopyToClipboardAction,
+ name: ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
execute: () => {
return;
},
[
{
component: DownloadCollectionFileAction,
+ name: ContextMenuActionNames.DOWNLOAD,
execute: () => {
return;
},
const writableActionSet: ContextMenuActionSet = [
[
{
- name: "Move item into new collection",
+ name: ContextMenuActionNames.MOVE_ITEM_INTO_NEW_COLLECTION,
icon: FileMoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionPartialMoveToNewCollectionDialog(resources[0]));
},
},
{
- name: "Move item into existing collection",
+ name: ContextMenuActionNames.MOVE_ITEM_INTO_EXISTING_COLLECTION,
icon: FileMoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionPartialMoveToExistingCollectionDialog(resources[0]));
},
},
{
- name: "Rename",
+ name: ContextMenuActionNames.RENAME,
icon: RenameIcon,
execute: (dispatch, resources) => {
dispatch<any>(
},
},
{
- name: "Remove",
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openFileRemoveDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "views-components/context-menu/context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { collectionPanelFilesAction } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
import { SelectAllIcon } from "components/icon/icon";
export const collectionFilesNotSelectedActionSet: ContextMenuActionSet = [[{
- name: "Select all",
+ name: ContextMenuActionNames.SELECT_ALL,
icon: SelectAllIcon,
execute: dispatch => {
dispatch(collectionPanelFilesAction.SELECT_ALL_COLLECTION_FILES());
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { ToggleFavoriteAction } from '../actions/favorite-action';
import { toggleFavorite } from 'store/favorites/favorites-actions';
import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
[
{
component: ToggleFavoriteAction,
+ name: ContextMenuActionNames.ADD_TO_FAVORITES,
execute: (dispatch, resources) => {
resources.forEach((resource) =>
dispatch<any>(toggleFavorite(resource)).then(() => {
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { RenameIcon, AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { openGroupAttributes, openRemoveGroupDialog, openGroupUpdateDialog } from 'store/groups-panel/groups-panel-actions';
export const groupActionSet: ContextMenuActionSet = [
[
{
- name: 'Rename',
+ name: ContextMenuActionNames.RENAME,
icon: RenameIcon,
execute: (dispatch, resources) => {
dispatch<any>(openGroupUpdateDialog(resources[0]))
},
},
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openGroupAttributes(resources[0].uuid))
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRemoveGroupDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { openGroupMemberAttributes, openRemoveGroupMemberDialog } from 'store/group-details-panel/group-details-panel-actions';
export const groupMemberActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openGroupMemberAttributes(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRemoveGroupMemberDialog(resources[0].uuid));
import { openKeepServiceAttributesDialog, openKeepServiceRemoveDialog } from 'store/keep-services/keep-services-actions';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
export const keepServiceActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openKeepServiceAttributesDialog(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openKeepServiceRemoveDialog(resources[0].uuid));
import { openLinkAttributesDialog, openLinkRemoveDialog } from 'store/link-panel/link-panel-actions';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
export const linkActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openLinkAttributesDialog(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openLinkRemoveDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { CanReadIcon, CanManageIcon, CanWriteIcon } from 'components/icon/icon';
import { editPermissionLevel } from 'store/group-details-panel/group-details-panel-actions';
import { PermissionLevel } from 'models/permission';
export const permissionEditActionSet: ContextMenuActionSet = [
[
{
- name: 'Read',
+ name: ContextMenuActionNames.READ,
icon: CanReadIcon,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(editPermissionLevel(resource.uuid, PermissionLevel.CAN_READ)));
},
},
{
- name: 'Write',
+ name: ContextMenuActionNames.WRITE,
icon: CanWriteIcon,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(editPermissionLevel(resource.uuid, PermissionLevel.CAN_WRITE)));
},
},
{
- name: 'Manage',
+ name: ContextMenuActionNames.MANAGE,
icon: CanManageIcon,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(editPermissionLevel(resource.uuid, PermissionLevel.CAN_MANAGE)));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "../context-menu-action-set";
import { ToggleFavoriteAction } from "../actions/favorite-action";
import { toggleFavorite } from "store/favorites/favorites-actions";
import {
RenameIcon,
- ShareIcon,
- MoveToIcon,
DetailsIcon,
RemoveIcon,
ReRunProcessIcon,
StopIcon,
} from "components/icon/icon";
import { favoritePanelActions } from "store/favorite-panel/favorite-panel-action";
-import { openMoveProcessDialog } from "store/processes/process-move-actions";
import { openProcessUpdateDialog } from "store/processes/process-update-actions";
import { openCopyProcessDialog } from "store/processes/process-copy-actions";
-import { openSharingDialog } from "store/sharing-dialog/sharing-dialog-actions";
import { openRemoveProcessDialog } from "store/processes/processes-actions";
import { toggleDetailsPanel } from "store/details-panel/details-panel-action";
import { navigateToOutput } from "store/process-panel/process-panel-actions";
[
{
component: ToggleFavoriteAction,
+ name: ContextMenuActionNames.ADD_TO_FAVORITES,
execute: (dispatch, resources) => {
dispatch<any>(toggleFavorite(resources[0])).then(() => {
dispatch<any>(favoritePanelActions.REQUEST_ITEMS());
},
{
icon: OpenIcon,
- name: "Open in new tab",
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: (dispatch, resources) => {
dispatch<any>(openInNewTabAction(resources[0]));
},
},
{
icon: ReRunProcessIcon,
- name: "Copy and re-run process",
+ name: ContextMenuActionNames.COPY_AND_RERUN_PROCESS,
execute: (dispatch, resources) => {
dispatch<any>(openCopyProcessDialog(resources[0]));
},
},
{
icon: OutputIcon,
- name: "Outputs",
+ name: ContextMenuActionNames.OUTPUTS,
execute: (dispatch, resources) => {
if (resources[0]) {
dispatch<any>(navigateToOutput(resources[0]));
},
{
icon: DetailsIcon,
- name: "View details",
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: dispatch => {
dispatch<any>(toggleDetailsPanel());
},
},
{
icon: AdvancedIcon,
- name: "API Details",
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
...readOnlyProcessResourceActionSet.reduce((prev, next) => prev.concat(next), []),
{
icon: RenameIcon,
- name: "Edit process",
+ name: ContextMenuActionNames.EDIT_PROCESS,
execute: (dispatch, resources) => {
dispatch<any>(openProcessUpdateDialog(resources[0]));
},
},
+ // removed until auto-move children is implemented
+ // {
+ // icon: MoveToIcon,
+ // name: ContextMenuActionNames.MOVE_TO,
+ // execute: (dispatch, resources) => {
+ // dispatch<any>(openMoveProcessDialog(resources[0]));
+ // },
+ // },
{
- icon: ShareIcon,
- name: "Share",
- execute: (dispatch, resources) => {
- dispatch<any>(openSharingDialog(resources[0].uuid));
- },
- },
- {
- icon: MoveToIcon,
- name: "Move to",
- execute: (dispatch, resources) => {
- dispatch<any>(openMoveProcessDialog(resources[0]));
- },
- },
- {
- name: "Remove",
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRemoveProcessDialog(resources[0], resources.length));
const runningProcessOnlyActionSet: ContextMenuActionSet = [
[
{
- name: "CANCEL",
+ name: ContextMenuActionNames.CANCEL,
icon: StopIcon,
execute: (dispatch, resources) => {
dispatch<any>(cancelRunningWorkflow(resources[0].uuid));
...processResourceActionSet.reduce((prev, next) => prev.concat(next), []),
{
component: TogglePublicFavoriteAction,
- name: "Add to public favorites",
+ name: ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
execute: (dispatch, resources) => {
dispatch<any>(togglePublicFavorite(resources[0])).then(() => {
dispatch<any>(publicFavoritePanelActions.REQUEST_ITEMS());
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "../context-menu-action-set";
import { NewProjectIcon, RenameIcon, MoveToIcon, DetailsIcon, AdvancedIcon, OpenIcon, Link, FolderSharedIcon } from "components/icon/icon";
import { ToggleFavoriteAction } from "../actions/favorite-action";
import { toggleFavorite } from "store/favorites/favorites-actions";
export const toggleFavoriteAction = {
component: ToggleFavoriteAction,
- name: "ToggleFavoriteAction",
+ name: ContextMenuActionNames.ADD_TO_FAVORITES,
execute: (dispatch, resources) => {
dispatch(toggleFavorite(resources[0])).then(() => {
dispatch(favoritePanelActions.REQUEST_ITEMS());
export const openInNewTabMenuAction = {
icon: OpenIcon,
- name: "Open in new tab",
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: (dispatch, resources) => {
dispatch(openInNewTabAction(resources[0]));
},
export const copyToClipboardMenuAction = {
icon: Link,
- name: "Copy to clipboard",
+ name: ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
execute: (dispatch, resources) => {
dispatch(copyToClipboardAction(resources));
},
export const viewDetailsAction = {
icon: DetailsIcon,
- name: "View details",
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: dispatch => {
dispatch(toggleDetailsPanel());
},
export const advancedAction = {
icon: AdvancedIcon,
- name: "API Details",
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch(openAdvancedTabDialog(resources[0].uuid));
},
export const openWith3rdPartyClientAction = {
icon: FolderSharedIcon,
- name: "Open with 3rd party client",
+ name: ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
execute: (dispatch, resources) => {
dispatch(openWebDavS3InfoDialog(resources[0].uuid));
},
export const editProjectAction = {
icon: RenameIcon,
- name: "Edit project",
+ name: ContextMenuActionNames.EDIT_PROJECT,
execute: (dispatch, resources) => {
dispatch(openProjectUpdateDialog(resources[0]));
},
export const shareAction = {
icon: ShareIcon,
- name: "Share",
+ name: ContextMenuActionNames.SHARE,
execute: (dispatch, resources) => {
dispatch(openSharingDialog(resources[0].uuid));
},
export const moveToAction = {
icon: MoveToIcon,
- name: "Move to",
+ name: ContextMenuActionNames.MOVE_TO,
execute: (dispatch, resource) => {
dispatch(openMoveProjectDialog(resource[0]));
},
export const toggleTrashAction = {
component: ToggleTrashAction,
- name: "ToggleTrashAction",
+ name: ContextMenuActionNames.MOVE_TO_TRASH,
execute: (dispatch, resources) => {
dispatch(toggleProjectTrashed(resources[0].uuid, resources[0].ownerUuid, resources[0].isTrashed!!, resources.length > 1));
},
export const freezeProjectAction = {
component: ToggleLockAction,
- name: "ToggleLockAction",
+ name: ContextMenuActionNames.FREEZE_PROJECT,
execute: (dispatch, resources) => {
if (resources[0].isFrozen) {
dispatch(unfreezeProject(resources[0].uuid));
export const newProjectAction: any = {
icon: NewProjectIcon,
- name: "New project",
+ name: ContextMenuActionNames.NEW_PROJECT,
execute: (dispatch, resources): void => {
dispatch(openProjectCreateDialog(resources[0].uuid));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "../context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "../context-menu-action-set";
import { TogglePublicFavoriteAction } from "views-components/context-menu/actions/public-favorite-action";
import { togglePublicFavorite } from "store/public-favorites/public-favorites-actions";
import { publicFavoritePanelActions } from "store/public-favorites-panel/public-favorites-action";
export const togglePublicFavoriteAction = {
component: TogglePublicFavoriteAction,
- name: "TogglePublicFavoriteAction",
+ name: ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
execute: (dispatch, resources) => {
dispatch(togglePublicFavorite(resources[0])).then(() => {
dispatch(publicFavoritePanelActions.REQUEST_ITEMS());
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, ShareIcon, AttributesIcon } from 'components/icon/icon';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { openRepositoryAttributes, openRemoveRepositoryDialog } from 'store/repositories/repositories-actions';
export const repositoryActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRepositoryAttributes(resources[0].uuid));
},
},
{
- name: 'Share',
+ name: ContextMenuActionNames.SHARE,
icon: ShareIcon,
execute: (dispatch, resources) => {
dispatch<any>(openSharingDialog(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRemoveRepositoryDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { ToggleFavoriteAction } from '../actions/favorite-action';
import { toggleFavorite } from 'store/favorites/favorites-actions';
[
{
component: ToggleFavoriteAction,
+ name: ContextMenuActionNames.ADD_TO_FAVORITES,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(toggleFavorite(resource)));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { openCollectionCreateDialog } from 'store/collections/collection-create-actions';
import { NewProjectIcon, CollectionIcon } from 'components/icon/icon';
import { openProjectCreateDialog } from 'store/projects/project-create-actions';
[
{
icon: NewProjectIcon,
- name: 'New project',
+ name: ContextMenuActionNames.NEW_PROJECT,
execute: (dispatch, resources) => {
dispatch<any>(openProjectCreateDialog(resources[0].uuid));
},
},
{
icon: CollectionIcon,
- name: 'New Collection',
+ name: ContextMenuActionNames.NEW_COLLECTION,
execute: (dispatch, resources) => {
dispatch<any>(openCollectionCreateDialog(resources[0].uuid));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { DetailsIcon, AdvancedIcon, OpenIcon, Link } from 'components/icon/icon';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
[
{
icon: OpenIcon,
- name: 'Open in new tab',
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(openInNewTabAction(resource)));
},
},
{
icon: Link,
- name: 'Copy to clipboard',
+ name: ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
execute: (dispatch, resources) => {
dispatch<any>(copyToClipboardAction(resources));
},
},
{
icon: DetailsIcon,
- name: 'View details',
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: (dispatch) => {
dispatch<any>(toggleDetailsPanel());
},
},
{
icon: AdvancedIcon,
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
import { openSshKeyRemoveDialog, openSshKeyAttributesDialog } from 'store/auth/auth-action-ssh';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
export const sshKeyActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openSshKeyAttributesDialog(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openSshKeyRemoveDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { ToggleTrashAction } from 'views-components/context-menu/actions/trash-action';
import { toggleTrashed } from 'store/trash/trash-actions';
[
{
component: ToggleTrashAction,
+ name: ContextMenuActionNames.MOVE_TO_TRASH,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(toggleTrashed(resource.kind, resource.uuid, resource.ownerUuid, resource.isTrashed!!)));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from '../context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from '../context-menu-action-set';
import { DetailsIcon, ProvenanceGraphIcon, AdvancedIcon, RestoreFromTrashIcon } from 'components/icon/icon';
import { toggleCollectionTrashed } from 'store/trash/trash-actions';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
[
{
icon: DetailsIcon,
- name: 'View details',
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: (dispatch) => {
dispatch<any>(toggleDetailsPanel());
},
},
{
icon: ProvenanceGraphIcon,
- name: 'Provenance graph',
+ name: ContextMenuActionNames.PROVENANCE_GRAPH,
execute: (dispatch, resource) => {
// add code
},
},
{
icon: AdvancedIcon,
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
icon: RestoreFromTrashIcon,
- name: 'Restore',
+ name: ContextMenuActionNames.RESTORE,
execute: (dispatch, resources) => {
resources.forEach((resource) => dispatch<any>(toggleCollectionTrashed(resource.uuid, true)));
},
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import {
AdvancedIcon,
ProjectIcon,
export const userActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openUserAttributes(resources[0].uuid));
},
},
{
- name: 'Project',
+ name: ContextMenuActionNames.HOME_PROJECT,
icon: ProjectIcon,
execute: (dispatch, resources) => {
dispatch<any>(openUserProjects(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Account Settings',
+ name: ContextMenuActionNames.ACCOUNT_SETTINGS,
icon: UserPanelIcon,
execute: (dispatch, resources) => {
dispatch<any>(navigateToUserProfile(resources[0].uuid));
],
[
{
- name: 'Activate User',
+ name: ContextMenuActionNames.ACTIVATE_USER,
icon: ActiveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openActivateDialog(resources[0].uuid));
filters: [isAdmin, canActivateUser],
},
{
- name: 'Setup User',
+ name: ContextMenuActionNames.SETUP_USER,
icon: AdminMenuIcon,
execute: (dispatch, resources) => {
dispatch<any>(openSetupDialog(resources[0].uuid));
filters: [isAdmin, canSetupUser],
},
{
- name: 'Deactivate User',
+ name: ContextMenuActionNames.DEACTIVATE_USER,
icon: DeactivateUserIcon,
execute: (dispatch, resources) => {
dispatch<any>(openDeactivateDialog(resources[0].uuid));
filters: [isAdmin, canDeactivateUser],
},
{
- name: 'Login As User',
+ name: ContextMenuActionNames.LOGIN_AS_USER,
icon: LoginAsIcon,
execute: (dispatch, resources) => {
dispatch<any>(loginAs(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from 'views-components/context-menu/context-menu-action-set';
+import { ContextMenuActionSet, ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { AdvancedIcon, RemoveIcon, AttributesIcon } from 'components/icon/icon';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
import { openVirtualMachineAttributes, openRemoveVirtualMachineDialog } from 'store/virtual-machines/virtual-machines-actions';
export const virtualMachineActionSet: ContextMenuActionSet = [
[
{
- name: 'Attributes',
+ name: ContextMenuActionNames.ATTRIBUTES,
icon: AttributesIcon,
execute: (dispatch, resources) => {
dispatch<any>(openVirtualMachineAttributes(resources[0].uuid));
},
},
{
- name: 'API Details',
+ name: ContextMenuActionNames.API_DETAILS,
icon: AdvancedIcon,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
- name: 'Remove',
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
execute: (dispatch, resources) => {
dispatch<any>(openRemoveVirtualMachineDialog(resources[0].uuid));
//
// SPDX-License-Identifier: AGPL-3.0
-import { ContextMenuActionSet } from "views-components/context-menu/context-menu-action-set";
+import { ContextMenuActionSet, ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { openRunProcess, deleteWorkflow } from "store/workflow-panel/workflow-panel-actions";
import { DetailsIcon, AdvancedIcon, OpenIcon, Link, StartIcon, TrashIcon } from "components/icon/icon";
import { copyToClipboardAction, openInNewTabAction } from "store/open-in-new-tab/open-in-new-tab.actions";
[
{
icon: OpenIcon,
- name: "Open in new tab",
+ name: ContextMenuActionNames.OPEN_IN_NEW_TAB,
execute: (dispatch, resources) => {
dispatch<any>(openInNewTabAction(resources[0]));
},
},
{
icon: Link,
- name: "Copy to clipboard",
+ name: ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
execute: (dispatch, resources) => {
dispatch<any>(copyToClipboardAction(resources));
},
},
{
icon: DetailsIcon,
- name: "View details",
+ name: ContextMenuActionNames.VIEW_DETAILS,
execute: dispatch => {
dispatch<any>(toggleDetailsPanel());
},
},
{
icon: AdvancedIcon,
- name: "API Details",
+ name: ContextMenuActionNames.API_DETAILS,
execute: (dispatch, resources) => {
dispatch<any>(openAdvancedTabDialog(resources[0].uuid));
},
},
{
icon: StartIcon,
- name: "Run Workflow",
+ name: ContextMenuActionNames.RUN_WORKFLOW,
execute: (dispatch, resources) => {
dispatch<any>(openRunProcess(resources[0].uuid, resources[0].ownerUuid, resources[0].name));
},
...readOnlyWorkflowActionSet[0],
{
icon: TrashIcon,
- name: "Delete Workflow",
+ name: ContextMenuActionNames.DELETE_WORKFLOW,
execute: (dispatch, resources) => {
dispatch<any>(deleteWorkflow(resources[0].uuid, resources[0].ownerUuid));
},
import { connect } from "react-redux";
import { RootState } from "../../../store/store";
import { getNodeValue } from "models/tree";
-import { ContextMenuKind } from 'views-components/context-menu/context-menu';
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { CopyToClipboardAction } from "./copy-to-clipboard-action";
const mapStateToProps = (state: RootState) => {
import configureMockStore from 'redux-mock-store'
import { Provider } from 'react-redux';
import { CollectionFileViewerAction } from './collection-file-viewer-action';
-import { ContextMenuKind } from 'views-components/context-menu/context-menu';
+import { ContextMenuKind } from '../menu-item-sort';
import { createTree, initTreeNode, setNode, getNodeValue } from "models/tree";
import { getInlineFileUrl, sanitizeToken } from "./helpers";
import { RootState } from "../../../store/store";
import { FileViewerAction } from 'views-components/context-menu/actions/file-viewer-action';
import { getNodeValue } from "models/tree";
-import { ContextMenuKind } from 'views-components/context-menu/context-menu';
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { getInlineFileUrl, sanitizeToken, isInlineFileUrlSafe } from "./helpers";
const mapStateToProps = (state: RootState) => {
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import React from 'react';
+import { ContextMenuAction } from '../context-menu-action-set';
+import { Divider as DividerComponent, StyleRulesCallback, withStyles } from '@material-ui/core';
+import { WithStyles } from '@material-ui/core/styles';
+import { ArvadosTheme } from 'common/custom-theme';
+import { VerticalLineDivider } from 'components/icon/icon';
+
+type CssRules = 'horizontal' | 'vertical';
+
+const styles:StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
+ horizontal: {
+ backgroundColor: 'black',
+ },
+ vertical: {
+ color: theme.palette.grey["400"],
+ margin: 'auto 0',
+ transform: 'scaleY(1.25)',
+ },
+});
+
+export const VerticalLine = withStyles(styles)((props: WithStyles<CssRules>) => {
+ return <VerticalLineDivider className={props.classes.vertical} />;
+});
+
+export const HorizontalLine = withStyles(styles)((props: WithStyles<CssRules>) => {
+ return <DividerComponent variant='middle' className={props.classes.horizontal} />;
+});
+
+export const horizontalMenuDivider: ContextMenuAction = {
+ name: 'Divider',
+ icon: () => null,
+ component: VerticalLine,
+ execute: () => null,
+};
+
+export const verticalMenuDivider: ContextMenuAction = {
+ name: 'Divider',
+ icon: () => null,
+ component: HorizontalLine,
+ execute: () => null,
+};
\ No newline at end of file
<Link />
</ListItemIcon>
<ListItemText>
- Copy to clipboard
+ Copy link to clipboard
</ListItemText>
</ListItem>
: null;
generateAsync: jest.fn().mockImplementation(() => Promise.resolve('test')),
};
-jest.mock('jszip', () => jest.fn().mockImplementation(() => mock));
-
describe('<DownloadAction />', () => {
let props;
let zip;
import { RootState } from "../../../store/store";
import { DownloadAction } from "./download-action";
import { getNodeValue } from "../../../models/tree";
-import { ContextMenuKind } from '../context-menu';
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { filterCollectionFilesBySelection } from "store/collection-panel/collection-panel-files/collection-panel-files-state";
import { sanitizeToken } from "./helpers";
style={{ textDecoration: 'none' }}
href={props.href}
target="_blank"
- rel="noopener"
+ rel="noopener noreferrer"
onClick={props.onClick}>
<ListItem button>
<ListItemIcon>
import { ContextMenuItem } from "components/context-menu/context-menu";
import { ContextMenuResource } from "store/context-menu/context-menu-actions";
+export enum ContextMenuActionNames {
+ ACCOUNT_SETTINGS = 'Account settings',
+ ACTIVATE_USER = 'Activate user',
+ ADD_TO_FAVORITES = 'Add to favorites',
+ ADD_TO_PUBLIC_FAVORITES = 'Add to public favorites',
+ ATTRIBUTES = 'Attributes',
+ API_DETAILS = 'API Details',
+ CANCEL = 'CANCEL',
+ COPY_AND_RERUN_PROCESS = 'Copy and re-run process',
+ COPY_ITEM_INTO_EXISTING_COLLECTION = 'Copy item into existing collection',
+ COPY_ITEM_INTO_NEW_COLLECTION = 'Copy item into new collection',
+ COPY_SELECTED_INTO_EXISTING_COLLECTION = 'Copy selected into existing collection',
+ COPY_SELECTED_INTO_SEPARATE_COLLECTIONS = 'Copy selected into separate collections',
+ COPY_SELECTED_INTO_NEW_COLLECTION = 'Copy selected into new collection',
+ COPY_LINK_TO_CLIPBOARD = 'Copy link to clipboard',
+ DEACTIVATE_USER = 'Deactivate user',
+ DELETE_WORKFLOW = 'Delete Workflow',
+ DIVIDER = 'Divider',
+ DOWNLOAD = 'Download',
+ EDIT_COLLECTION = 'Edit collection',
+ EDIT_PROCESS = 'Edit process',
+ EDIT_PROJECT = 'Edit project',
+ FREEZE_PROJECT = 'Freeze project',
+ HOME_PROJECT = 'Home project',
+ LOGIN_AS_USER = 'Login as user',
+ MAKE_A_COPY = 'Make a copy',
+ MANAGE = 'Manage',
+ MOVE_ITEM_INTO_EXISTING_COLLECTION = 'Move item into existing collection',
+ MOVE_ITEM_INTO_NEW_COLLECTION = 'Move item into new collection',
+ MOVE_SELECTED_INTO_EXISTING_COLLECTION = 'Move selected into existing collection',
+ MOVE_SELECTED_INTO_NEW_COLLECTION = 'Move selected into new collection',
+ MOVE_SELECTED_INTO_SEPARATE_COLLECTIONS = 'Move selected into separate collections',
+ MOVE_TO = 'Move to',
+ MOVE_TO_TRASH = 'Move to trash',
+ NEW_COLLECTION = 'New collection',
+ NEW_PROJECT = 'New project',
+ OPEN_IN_NEW_TAB = 'Open in new tab',
+ OPEN_WITH_3RD_PARTY_CLIENT = 'Open with 3rd party client',
+ OUTPUTS = 'Outputs',
+ PROVENANCE_GRAPH = 'Provenance graph',
+ READ = 'Read',
+ REMOVE = 'Remove',
+ REMOVE_SELECTED = 'Remove selected',
+ RENAME = 'Rename',
+ RESTORE = 'Restore',
+ RESTORE_VERSION = 'Restore version',
+ RUN_WORKFLOW = 'Run Workflow',
+ SELECT_ALL = 'Select all',
+ SETUP_USER = 'Setup user',
+ SHARE = 'Share',
+ UNSELECT_ALL = 'Unselect all',
+ VIEW_DETAILS = 'View details',
+ WRITE = 'Write',
+}
+
export interface ContextMenuAction extends ContextMenuItem {
execute(dispatch: Dispatch, resources: ContextMenuResource[], state?: any): void;
}
import { ContextMenuActionSet, ContextMenuAction } from "./context-menu-action-set";
import { Dispatch } from "redux";
import { memoize } from "lodash";
-import { sortByProperty } from "common/array-utils";
+import { sortMenuItems, ContextMenuKind, menuDirection } from "./menu-item-sort";
type DataProps = Pick<ContextMenuProps, "anchorEl" | "items" | "open"> & { resource?: ContextMenuResource };
const menuActionSets = new Map<string, ContextMenuActionSet>();
-export const addMenuActionSet = (name: string, itemSet: ContextMenuActionSet) => {
- const sorted = itemSet.map(items => items.sort(sortByProperty("name")));
+export const addMenuActionSet = (name: ContextMenuKind, itemSet: ContextMenuActionSet) => {
+ const sorted = itemSet.map(items => sortMenuItems(name, items, menuDirection.VERTICAL));
menuActionSets.set(name, sorted);
};
const emptyActionSet: ContextMenuActionSet = [];
const getMenuActionSet = (resource?: ContextMenuResource): ContextMenuActionSet =>
resource ? menuActionSets.get(resource.menuKind) || emptyActionSet : emptyActionSet;
-
-export enum ContextMenuKind {
- API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
- ROOT_PROJECT = "RootProject",
- PROJECT = "Project",
- FILTER_GROUP = "FilterGroup",
- READONLY_PROJECT = "ReadOnlyProject",
- FROZEN_PROJECT = "FrozenProject",
- FROZEN_PROJECT_ADMIN = "FrozenProjectAdmin",
- PROJECT_ADMIN = "ProjectAdmin",
- FILTER_GROUP_ADMIN = "FilterGroupAdmin",
- RESOURCE = "Resource",
- FAVORITE = "Favorite",
- TRASH = "Trash",
- COLLECTION_FILES = "CollectionFiles",
- COLLECTION_FILES_MULTIPLE = "CollectionFilesMultiple",
- READONLY_COLLECTION_FILES = "ReadOnlyCollectionFiles",
- READONLY_COLLECTION_FILES_MULTIPLE = "ReadOnlyCollectionFilesMultiple",
- COLLECTION_FILES_NOT_SELECTED = "CollectionFilesNotSelected",
- COLLECTION_FILE_ITEM = "CollectionFileItem",
- COLLECTION_DIRECTORY_ITEM = "CollectionDirectoryItem",
- READONLY_COLLECTION_FILE_ITEM = "ReadOnlyCollectionFileItem",
- READONLY_COLLECTION_DIRECTORY_ITEM = "ReadOnlyCollectionDirectoryItem",
- COLLECTION = "Collection",
- COLLECTION_ADMIN = "CollectionAdmin",
- READONLY_COLLECTION = "ReadOnlyCollection",
- OLD_VERSION_COLLECTION = "OldVersionCollection",
- TRASHED_COLLECTION = "TrashedCollection",
- PROCESS = "Process",
- RUNNING_PROCESS_ADMIN = "RunningProcessAdmin",
- PROCESS_ADMIN = "ProcessAdmin",
- RUNNING_PROCESS_RESOURCE = "RunningProcessResource",
- PROCESS_RESOURCE = "ProcessResource",
- READONLY_PROCESS_RESOURCE = "ReadOnlyProcessResource",
- PROCESS_LOGS = "ProcessLogs",
- REPOSITORY = "Repository",
- SSH_KEY = "SshKey",
- VIRTUAL_MACHINE = "VirtualMachine",
- KEEP_SERVICE = "KeepService",
- USER = "User",
- GROUPS = "Group",
- GROUP_MEMBER = "GroupMember",
- PERMISSION_EDIT = "PermissionEdit",
- LINK = "Link",
- WORKFLOW = "Workflow",
- READONLY_WORKFLOW = "ReadOnlyWorkflow",
- SEARCH_RESULTS = "SearchResults",
-}
--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { ContextMenuAction } from './context-menu-action-set';
+import { ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
+import { sortByProperty } from 'common/array-utils';
+import { horizontalMenuDivider, verticalMenuDivider } from './actions/context-menu-divider';
+import { MultiSelectMenuAction } from 'views-components/multiselect-toolbar/ms-menu-actions';
+
+export enum ContextMenuKind {
+ API_CLIENT_AUTHORIZATION = "ApiClientAuthorization",
+ ROOT_PROJECT = "RootProject",
+ PROJECT = "Project",
+ FILTER_GROUP = "FilterGroup",
+ READONLY_PROJECT = "ReadOnlyProject",
+ FROZEN_PROJECT = "FrozenProject",
+ FROZEN_PROJECT_ADMIN = "FrozenProjectAdmin",
+ PROJECT_ADMIN = "ProjectAdmin",
+ FILTER_GROUP_ADMIN = "FilterGroupAdmin",
+ RESOURCE = "Resource",
+ FAVORITE = "Favorite",
+ TRASH = "Trash",
+ COLLECTION_FILES = "CollectionFiles",
+ COLLECTION_FILES_MULTIPLE = "CollectionFilesMultiple",
+ READONLY_COLLECTION_FILES = "ReadOnlyCollectionFiles",
+ READONLY_COLLECTION_FILES_MULTIPLE = "ReadOnlyCollectionFilesMultiple",
+ COLLECTION_FILES_NOT_SELECTED = "CollectionFilesNotSelected",
+ COLLECTION_FILE_ITEM = "CollectionFileItem",
+ COLLECTION_DIRECTORY_ITEM = "CollectionDirectoryItem",
+ READONLY_COLLECTION_FILE_ITEM = "ReadOnlyCollectionFileItem",
+ READONLY_COLLECTION_DIRECTORY_ITEM = "ReadOnlyCollectionDirectoryItem",
+ COLLECTION = "Collection",
+ COLLECTION_ADMIN = "CollectionAdmin",
+ READONLY_COLLECTION = "ReadOnlyCollection",
+ OLD_VERSION_COLLECTION = "OldVersionCollection",
+ TRASHED_COLLECTION = "TrashedCollection",
+ PROCESS = "Process",
+ RUNNING_PROCESS_ADMIN = "RunningProcessAdmin",
+ PROCESS_ADMIN = "ProcessAdmin",
+ RUNNING_PROCESS_RESOURCE = "RunningProcessResource",
+ PROCESS_RESOURCE = "ProcessResource",
+ READONLY_PROCESS_RESOURCE = "ReadOnlyProcessResource",
+ PROCESS_LOGS = "ProcessLogs",
+ REPOSITORY = "Repository",
+ SSH_KEY = "SshKey",
+ VIRTUAL_MACHINE = "VirtualMachine",
+ KEEP_SERVICE = "KeepService",
+ USER = "User",
+ GROUPS = "Group",
+ GROUP_MEMBER = "GroupMember",
+ PERMISSION_EDIT = "PermissionEdit",
+ LINK = "Link",
+ WORKFLOW = "Workflow",
+ READONLY_WORKFLOW = "ReadOnlyWorkflow",
+ SEARCH_RESULTS = "SearchResults",
+ MULTI = "Multi",
+}
+
+
+
+const processOrder = [
+ ContextMenuActionNames.VIEW_DETAILS,
+ ContextMenuActionNames.OPEN_IN_NEW_TAB,
+ ContextMenuActionNames.OUTPUTS,
+ ContextMenuActionNames.API_DETAILS,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.EDIT_PROCESS,
+ ContextMenuActionNames.COPY_AND_RERUN_PROCESS,
+ ContextMenuActionNames.CANCEL,
+ ContextMenuActionNames.REMOVE,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.ADD_TO_FAVORITES,
+ ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
+];
+
+const projectOrder = [
+ ContextMenuActionNames.VIEW_DETAILS,
+ ContextMenuActionNames.OPEN_IN_NEW_TAB,
+ ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
+ ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
+ ContextMenuActionNames.API_DETAILS,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.SHARE,
+ ContextMenuActionNames.NEW_PROJECT,
+ ContextMenuActionNames.EDIT_PROJECT,
+ ContextMenuActionNames.MOVE_TO,
+ ContextMenuActionNames.MOVE_TO_TRASH,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.FREEZE_PROJECT,
+ ContextMenuActionNames.ADD_TO_FAVORITES,
+ ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
+];
+
+const collectionOrder = [
+ ContextMenuActionNames.VIEW_DETAILS,
+ ContextMenuActionNames.OPEN_IN_NEW_TAB,
+ ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
+ ContextMenuActionNames.OPEN_WITH_3RD_PARTY_CLIENT,
+ ContextMenuActionNames.API_DETAILS,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.SHARE,
+ ContextMenuActionNames.EDIT_COLLECTION,
+ ContextMenuActionNames.MOVE_TO,
+ ContextMenuActionNames.MAKE_A_COPY,
+ ContextMenuActionNames.MOVE_TO_TRASH,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.ADD_TO_FAVORITES,
+ ContextMenuActionNames.ADD_TO_PUBLIC_FAVORITES,
+];
+
+const workflowOrder = [
+ ContextMenuActionNames.VIEW_DETAILS,
+ ContextMenuActionNames.OPEN_IN_NEW_TAB,
+ ContextMenuActionNames.COPY_LINK_TO_CLIPBOARD,
+ ContextMenuActionNames.API_DETAILS,
+ ContextMenuActionNames.DIVIDER,
+ ContextMenuActionNames.RUN_WORKFLOW,
+ ContextMenuActionNames.DELETE_WORKFLOW,
+]
+
+const defaultMultiOrder = [
+ ContextMenuActionNames.MOVE_TO,
+ ContextMenuActionNames.MAKE_A_COPY,
+ ContextMenuActionNames.MOVE_TO_TRASH,
+];
+
+const kindToOrder: Record<string, ContextMenuActionNames[]> = {
+ [ContextMenuKind.MULTI]: defaultMultiOrder,
+
+ [ContextMenuKind.PROCESS]: processOrder,
+ [ContextMenuKind.PROCESS_ADMIN]: processOrder,
+ [ContextMenuKind.PROCESS_RESOURCE]: processOrder,
+ [ContextMenuKind.RUNNING_PROCESS_ADMIN]: processOrder,
+ [ContextMenuKind.RUNNING_PROCESS_RESOURCE]: processOrder,
+
+ [ContextMenuKind.PROJECT]: projectOrder,
+ [ContextMenuKind.PROJECT_ADMIN]: projectOrder,
+ [ContextMenuKind.FROZEN_PROJECT]: projectOrder,
+ [ContextMenuKind.FROZEN_PROJECT_ADMIN]: projectOrder,
+
+ [ContextMenuKind.COLLECTION]: collectionOrder,
+ [ContextMenuKind.COLLECTION_ADMIN]: collectionOrder,
+ [ContextMenuKind.READONLY_COLLECTION]: collectionOrder,
+ [ContextMenuKind.OLD_VERSION_COLLECTION]: collectionOrder,
+
+ [ContextMenuKind.WORKFLOW]: workflowOrder,
+ [ContextMenuKind.READONLY_WORKFLOW]: workflowOrder,
+};
+
+export const menuDirection = {
+ VERTICAL: 'vertical',
+ HORIZONTAL: 'horizontal'
+}
+
+export const sortMenuItems = (menuKind: ContextMenuKind, menuItems: ContextMenuAction[], orthagonality: string): ContextMenuAction[] | MultiSelectMenuAction[] => {
+
+ const preferredOrder = kindToOrder[menuKind];
+ //if no specified order, sort by name
+ if (!preferredOrder) return menuItems.sort(sortByProperty("name"));
+
+ const bucketMap = new Map();
+ const leftovers: ContextMenuAction[] = [];
+
+ // if we have multiple dividers, we need each of them to have a different "name" property
+ let count = 0;
+
+ preferredOrder.forEach((name) => {
+ if (name === ContextMenuActionNames.DIVIDER) {
+ count++;
+ bucketMap.set(`${name}-${count}`, orthagonality === menuDirection.VERTICAL ? verticalMenuDivider : horizontalMenuDivider)
+ } else {
+ bucketMap.set(name, null)
+ }
+ });
+ [...menuItems].forEach((item) => {
+ if (bucketMap.has(item.name)) bucketMap.set(item.name, item);
+ else leftovers.push(item);
+ });
+
+ return Array.from(bucketMap.values()).concat(leftovers).filter((item) => item !== null);
+};
import { WithDialogProps } from 'store/dialog/with-dialog';
import { CollectionCreateFormDialogData } from 'store/collections/collection-create-actions';
import { FormDialog } from 'components/form-dialog/form-dialog';
-import { require } from 'validators/require';
+import { fieldRequire } from 'validators/require';
import { FileUploaderField } from 'views-components/file-uploader/file-uploader';
import { WarningCollection } from 'components/warning-collection/warning-collection';
import { fileUploaderActions } from 'store/file-uploader/file-uploader-actions';
<WarningCollection text="Uploading new files will change content address." />
</>;
-const FILES_FIELD_VALIDATION = [require];
+const FILES_FIELD_VALIDATION = [fieldRequire];
import { saveApiToken } from 'store/auth/auth-action';
import { navigateToRootProject } from 'store/navigation/navigation-action';
import { replace } from 'react-router-redux';
+import { PasswordLoginResponse } from 'views/login-panel/login-panel';
type CssRules = 'root' | 'loginBtn' | 'card' | 'wrapper' | 'progress';
});
type LoginFormProps = DispatchProp<any> & WithStyles<CssRules> & {
- handleSubmit: (username: string, password: string) => AxiosPromise;
+ handleSubmit: (username: string, password: string) => AxiosPromise<PasswordLoginResponse>;
loginLabel?: string,
};
{
links.map(link =>
<MenuItem key={link.title}>
- <a href={link.link} target="_blank" rel="noopener" className={classes.link}>
+ <a href={link.link} target="_blank" rel="noopener noreferrer" className={classes.link}>
<ImportContactsIcon className={classes.icon} />
<Typography className={classes.linkTitle}>{link.title}</Typography>
</a>
//
// SPDX-License-Identifier: AGPL-3.0
-import { MoveToIcon, CopyIcon, RenameIcon } from "components/icon/icon";
+import { MoveToIcon, CopyIcon, RenameIcon, ShareIcon } from "components/icon/icon";
import { openMoveCollectionDialog } from "store/collections/collection-move-actions";
import { openCollectionCopyDialog, openMultiCollectionCopyDialog } from "store/collections/collection-copy-actions";
import { toggleCollectionTrashed } from "store/trash/trash-actions";
import { ContextMenuResource } from "store/context-menu/context-menu-actions";
import { msCommonActionSet, MultiSelectMenuActionSet, MultiSelectMenuAction } from "./ms-menu-actions";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { TrashIcon, Link, FolderSharedIcon } from "components/icon/icon";
import { openCollectionUpdateDialog } from "store/collections/collection-update-actions";
import { copyToClipboardAction } from "store/open-in-new-tab/open-in-new-tab.actions";
import { openWebDavS3InfoDialog } from "store/collections/collection-info-actions";
+import { openSharingDialog } from "store/sharing-dialog/sharing-dialog-actions";
-const { MAKE_A_COPY, MOVE_TO, MOVE_TO_TRASH, EDIT_COLLECTION, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, SHARE} = MultiSelectMenuActionNames;
+
+const { MAKE_A_COPY, MOVE_TO, MOVE_TO_TRASH, EDIT_COLLECTION, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, COPY_LINK_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, SHARE} = ContextMenuActionNames;
const msCopyCollection: MultiSelectMenuAction = {
name: MAKE_A_COPY,
}
const msEditCollection: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.EDIT_COLLECTION,
+ name: ContextMenuActionNames.EDIT_COLLECTION,
icon: RenameIcon,
hasAlts: false,
isForMulti: false,
}
const msCopyToClipboardMenuAction: MultiSelectMenuAction = {
- name: COPY_TO_CLIPBOARD,
+ name: COPY_LINK_TO_CLIPBOARD,
icon: Link,
hasAlts: false,
isForMulti: false,
};
const msOpenWith3rdPartyClientAction: MultiSelectMenuAction = {
- name: OPEN_W_3RD_PARTY_CLIENT,
+ name: OPEN_WITH_3RD_PARTY_CLIENT,
icon: FolderSharedIcon,
hasAlts: false,
isForMulti: false,
},
};
+const msShareAction: MultiSelectMenuAction = {
+ name: SHARE,
+ icon: ShareIcon,
+ hasAlts: false,
+ isForMulti: false,
+ execute: (dispatch, resources) => {
+ dispatch<any>(openSharingDialog(resources[0].uuid));
+ },
+};
+
export const msCollectionActionSet: MultiSelectMenuActionSet = [
[
...msCommonActionSet,
msToggleTrashAction,
msEditCollection,
msCopyToClipboardMenuAction,
- msOpenWith3rdPartyClientAction
+ msOpenWith3rdPartyClientAction,
+ msShareAction,
],
];
-export const msReadOnlyCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, OPEN_W_3RD_PARTY_CLIENT]);
-export const msCommonCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])
-export const msOldCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_W_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])
\ No newline at end of file
+export const msReadOnlyCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, ADD_TO_FAVORITES, OPEN_WITH_3RD_PARTY_CLIENT]);
+export const msCommonCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_WITH_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])
+export const msOldCollectionActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, MAKE_A_COPY, VIEW_DETAILS, API_DETAILS, OPEN_WITH_3RD_PARTY_CLIENT, EDIT_COLLECTION, SHARE, MOVE_TO, ADD_TO_FAVORITES, MOVE_TO_TRASH])
\ No newline at end of file
import { ResourcesState } from 'store/resources/resources';
import { FavoritesState } from 'store/favorites/favorites-reducer';
import { ContextMenuResource } from 'store/context-menu/context-menu-actions';
-import { AddFavoriteIcon, AdvancedIcon, DetailsIcon, OpenIcon, PublicFavoriteIcon, RemoveFavoriteIcon, ShareIcon } from 'components/icon/icon';
+import { AddFavoriteIcon, AdvancedIcon, DetailsIcon, OpenIcon, PublicFavoriteIcon, RemoveFavoriteIcon } from 'components/icon/icon';
import { checkFavorite } from 'store/favorites/favorites-reducer';
import { toggleFavorite } from 'store/favorites/favorites-actions';
import { favoritePanelActions } from 'store/favorite-panel/favorite-panel-action';
import { openInNewTabAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
import { toggleDetailsPanel } from 'store/details-panel/details-panel-action';
import { openAdvancedTabDialog } from 'store/advanced-tab/advanced-tab';
-import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
import { togglePublicFavorite } from "store/public-favorites/public-favorites-actions";
import { publicFavoritePanelActions } from "store/public-favorites-panel/public-favorites-action";
import { PublicFavoritesState } from 'store/public-favorites/public-favorites-reducer';
-
-export enum MultiSelectMenuActionNames {
- ADD_TO_FAVORITES = 'Add to Favorites',
- MOVE_TO_TRASH = 'Move to trash',
- ADD_TO_PUBLIC_FAVORITES = 'Add to public favorites',
- API_DETAILS = 'API Details',
- CANCEL = 'CANCEL',
- COPY_AND_RERUN_PROCESS = 'Copy and re-run process',
- COPY_TO_CLIPBOARD = 'Copy to clipboard',
- DELETE_WORKFLOW = 'Delete Workflow',
- EDIT_COLLECTION = 'Edit collection',
- EDIT_PROJECT = 'Edit project',
- EDIT_PROCESS = 'Edit process',
- FREEZE_PROJECT = 'Freeze Project',
- MAKE_A_COPY = 'Make a copy',
- MOVE_TO = 'Move to',
- NEW_PROJECT = 'New project',
- OPEN_IN_NEW_TAB = 'Open in new tab',
- OPEN_W_3RD_PARTY_CLIENT = 'Open with 3rd party client',
- OUTPUTS = 'Outputs',
- REMOVE = 'Remove',
- RUN_WORKFLOW = 'Run Workflow',
- SHARE = 'Share',
- VIEW_DETAILS = 'View details',
-};
+import { ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
export type MultiSelectMenuAction = {
name: string;
export type MultiSelectMenuActionSet = MultiSelectMenuAction[][];
-const { ADD_TO_FAVORITES, ADD_TO_PUBLIC_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE } = MultiSelectMenuActionNames;
+const { ADD_TO_FAVORITES, ADD_TO_PUBLIC_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS } = ContextMenuActionNames;
const msToggleFavoriteAction: MultiSelectMenuAction = {
name: ADD_TO_FAVORITES,
},
};
-const msShareAction: MultiSelectMenuAction = {
- name: SHARE,
- icon: ShareIcon,
- hasAlts: false,
- isForMulti: false,
- execute: (dispatch, resources) => {
- dispatch<any>(openSharingDialog(resources[0].uuid));
- },
-};
-
const msTogglePublicFavoriteAction: MultiSelectMenuAction = {
name: ADD_TO_PUBLIC_FAVORITES,
icon: PublicFavoriteIcon,
msOpenInNewTabMenuAction,
msViewDetailsAction,
msAdvancedAction,
- msShareAction,
msTogglePublicFavoriteAction
];
//
// SPDX-License-Identifier: AGPL-3.0
-import { MoveToIcon, RemoveIcon, ReRunProcessIcon, OutputIcon, RenameIcon, StopIcon } from "components/icon/icon";
-import { openMoveProcessDialog } from "store/processes/process-move-actions";
+import { RemoveIcon, ReRunProcessIcon, OutputIcon, RenameIcon, StopIcon } from "components/icon/icon";
import { openCopyProcessDialog } from "store/processes/process-copy-actions";
import { openRemoveProcessDialog } from "store/processes/processes-actions";
import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from "./ms-menu-actions";
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { openProcessUpdateDialog } from "store/processes/process-update-actions";
import { msNavigateToOutput } from "store/multiselect/multiselect-actions";
import { cancelRunningWorkflow } from "store/processes/processes-actions";
const msCopyAndRerunProcess: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.COPY_AND_RERUN_PROCESS,
+ name: ContextMenuActionNames.COPY_AND_RERUN_PROCESS,
icon: ReRunProcessIcon,
hasAlts: false,
isForMulti: false,
}
const msRemoveProcess: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.REMOVE,
+ name: ContextMenuActionNames.REMOVE,
icon: RemoveIcon,
hasAlts: false,
isForMulti: true,
},
}
-const msMoveTo: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.MOVE_TO,
- icon: MoveToIcon,
- hasAlts: false,
- isForMulti: true,
- execute: (dispatch, resources) => {
- dispatch<any>(openMoveProcessDialog(resources[0]));
- },
-}
+// removed until auto-move children is implemented
+// const msMoveTo: MultiSelectMenuAction = {
+// name: ContextMenuActionNames.MOVE_TO,
+// icon: MoveToIcon,
+// hasAlts: false,
+// isForMulti: true,
+// execute: (dispatch, resources) => {
+// dispatch<any>(openMoveProcessDialog(resources[0]));
+// },
+// }
const msViewOutputs: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.OUTPUTS,
+ name: ContextMenuActionNames.OUTPUTS,
icon: OutputIcon,
hasAlts: false,
isForMulti: false,
}
const msEditProcess: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.EDIT_PROCESS,
+ name: ContextMenuActionNames.EDIT_PROCESS,
icon: RenameIcon,
hasAlts: false,
isForMulti: false,
}
const msCancelProcess: MultiSelectMenuAction = {
- name: MultiSelectMenuActionNames.CANCEL,
+ name: ContextMenuActionNames.CANCEL,
icon: StopIcon,
hasAlts: false,
isForMulti: false,
...msCommonActionSet,
msCopyAndRerunProcess,
msRemoveProcess,
- msMoveTo,
+ // msMoveTo,
msViewOutputs,
msEditProcess,
msCancelProcess
]
];
-const { MOVE_TO, REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, ADD_TO_PUBLIC_FAVORITES, OUTPUTS, EDIT_PROCESS, CANCEL } = MultiSelectMenuActionNames
+const {REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, ADD_TO_PUBLIC_FAVORITES, OUTPUTS, EDIT_PROCESS, CANCEL } = ContextMenuActionNames
-export const msCommonProcessActionFilter = new Set([MOVE_TO, REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, OUTPUTS, EDIT_PROCESS ]);
-export const msRunningProcessActionFilter = new Set([MOVE_TO, REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, OUTPUTS, EDIT_PROCESS, CANCEL ]);
+export const msCommonProcessActionFilter = new Set([REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, OUTPUTS, EDIT_PROCESS ]);
+export const msRunningProcessActionFilter = new Set([REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, OUTPUTS, EDIT_PROCESS, CANCEL ]);
export const msReadOnlyProcessActionFilter = new Set([COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, OUTPUTS ]);
-export const msAdminProcessActionFilter = new Set([MOVE_TO, REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, ADD_TO_PUBLIC_FAVORITES, OUTPUTS, EDIT_PROCESS ]);
+export const msAdminProcessActionFilter = new Set([REMOVE, COPY_AND_RERUN_PROCESS, ADD_TO_FAVORITES, OPEN_IN_NEW_TAB, VIEW_DETAILS, API_DETAILS, SHARE, ADD_TO_PUBLIC_FAVORITES, OUTPUTS, EDIT_PROCESS ]);
// SPDX-License-Identifier: AGPL-3.0
import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from 'views-components/multiselect-toolbar/ms-menu-actions';
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from "views-components/context-menu/context-menu-action-set";
import { openMoveProjectDialog } from 'store/projects/project-move-actions';
import { toggleProjectTrashed } from 'store/trash/trash-actions';
import {
NewProjectIcon,
RenameIcon,
UnfreezeIcon,
+ ShareIcon,
} from 'components/icon/icon';
import { RestoreFromTrashIcon, TrashIcon, FolderSharedIcon, Link } from 'components/icon/icon';
import { getResource } from 'store/resources/resources';
import { freezeProject, unfreezeProject } from 'store/projects/project-lock-actions';
import { openWebDavS3InfoDialog } from 'store/collections/collection-info-actions';
import { copyToClipboardAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
+import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
const {
ADD_TO_FAVORITES,
ADD_TO_PUBLIC_FAVORITES,
OPEN_IN_NEW_TAB,
- COPY_TO_CLIPBOARD,
+ COPY_LINK_TO_CLIPBOARD,
VIEW_DETAILS,
API_DETAILS,
- OPEN_W_3RD_PARTY_CLIENT,
+ OPEN_WITH_3RD_PARTY_CLIENT,
EDIT_PROJECT,
SHARE,
MOVE_TO,
MOVE_TO_TRASH,
FREEZE_PROJECT,
NEW_PROJECT,
-} = MultiSelectMenuActionNames;
+} = ContextMenuActionNames;
const msCopyToClipboardMenuAction: MultiSelectMenuAction = {
- name: COPY_TO_CLIPBOARD,
+ name: COPY_LINK_TO_CLIPBOARD,
icon: Link,
hasAlts: false,
isForMulti: false,
};
const msOpenWith3rdPartyClientAction: MultiSelectMenuAction = {
- name: OPEN_W_3RD_PARTY_CLIENT,
+ name: OPEN_WITH_3RD_PARTY_CLIENT,
icon: FolderSharedIcon,
hasAlts: false,
isForMulti: false,
},
};
+const msShareAction: MultiSelectMenuAction = {
+ name: SHARE,
+ icon: ShareIcon,
+ hasAlts: false,
+ isForMulti: false,
+ execute: (dispatch, resources) => {
+ dispatch<any>(openSharingDialog(resources[0].uuid));
+ },
+};
+
export const msProjectActionSet: MultiSelectMenuActionSet = [
[
...msCommonActionSet,
msNewProjectAction,
msFreezeProjectAction,
msOpenWith3rdPartyClientAction,
- msCopyToClipboardMenuAction
+ msCopyToClipboardMenuAction,
+ msShareAction,
],
];
ADD_TO_FAVORITES,
MOVE_TO_TRASH,
API_DETAILS,
- COPY_TO_CLIPBOARD,
+ COPY_LINK_TO_CLIPBOARD,
EDIT_PROJECT,
FREEZE_PROJECT,
MOVE_TO,
NEW_PROJECT,
OPEN_IN_NEW_TAB,
- OPEN_W_3RD_PARTY_CLIENT,
+ OPEN_WITH_3RD_PARTY_CLIENT,
SHARE,
VIEW_DETAILS,
]);
-export const msReadOnlyProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS,]);
-export const msFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT])
-export const msAdminFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT, ADD_TO_PUBLIC_FAVORITES])
+export const msReadOnlyProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_LINK_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, VIEW_DETAILS,]);
+export const msFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_LINK_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT])
+export const msAdminFrozenProjectActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_LINK_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, FREEZE_PROJECT, ADD_TO_PUBLIC_FAVORITES])
-export const msFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, MOVE_TO_TRASH, EDIT_PROJECT, MOVE_TO])
-export const msAdminFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_W_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, MOVE_TO_TRASH, EDIT_PROJECT, MOVE_TO, ADD_TO_PUBLIC_FAVORITES])
\ No newline at end of file
+export const msFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_LINK_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, MOVE_TO_TRASH, EDIT_PROJECT, MOVE_TO])
+export const msAdminFilterGroupActionFilter = new Set<string>([ADD_TO_FAVORITES, API_DETAILS, COPY_LINK_TO_CLIPBOARD, OPEN_IN_NEW_TAB, OPEN_WITH_3RD_PARTY_CLIENT, VIEW_DETAILS, SHARE, MOVE_TO_TRASH, EDIT_PROJECT, MOVE_TO, ADD_TO_PUBLIC_FAVORITES])
\ No newline at end of file
import { openRunProcess, deleteWorkflow } from 'store/workflow-panel/workflow-panel-actions';
import { StartIcon, TrashIcon, Link } from 'components/icon/icon';
import { MultiSelectMenuAction, MultiSelectMenuActionSet, msCommonActionSet } from './ms-menu-actions';
-import { MultiSelectMenuActionNames } from "views-components/multiselect-toolbar/ms-menu-actions";
+import { ContextMenuActionNames } from 'views-components/context-menu/context-menu-action-set';
import { copyToClipboardAction } from 'store/open-in-new-tab/open-in-new-tab.actions';
+import { openSharingDialog } from 'store/sharing-dialog/sharing-dialog-actions';
+import { ShareIcon } from 'components/icon/icon';
-const { OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW } = MultiSelectMenuActionNames;
+const { OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW, SHARE } = ContextMenuActionNames;
const msRunWorkflow: MultiSelectMenuAction = {
name: RUN_WORKFLOW,
};
const msCopyToClipboardMenuAction: MultiSelectMenuAction = {
- name: COPY_TO_CLIPBOARD,
+ name: COPY_LINK_TO_CLIPBOARD,
icon: Link,
hasAlts: false,
isForMulti: false,
},
};
-export const msWorkflowActionSet: MultiSelectMenuActionSet = [[...msCommonActionSet, msRunWorkflow, msDeleteWorkflow, msCopyToClipboardMenuAction]];
+const msShareAction: MultiSelectMenuAction = {
+ name: SHARE,
+ icon: ShareIcon,
+ hasAlts: false,
+ isForMulti: false,
+ execute: (dispatch, resources) => {
+ dispatch<any>(openSharingDialog(resources[0].uuid));
+ },
+};
+
+export const msWorkflowActionSet: MultiSelectMenuActionSet = [[...msCommonActionSet, msRunWorkflow, msDeleteWorkflow, msCopyToClipboardMenuAction, msShareAction]];
-export const msReadOnlyWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW ]);
-export const msWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW]);
+export const msReadOnlyWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW ]);
+export const msWorkflowActionFilter = new Set([OPEN_IN_NEW_TAB, COPY_LINK_TO_CLIPBOARD, VIEW_DETAILS, API_DETAILS, RUN_WORKFLOW, DELETE_WORKFLOW]);
lines={[snippetText(props.data.uuidPrefix)]} />
<Typography variant='body1' className={props.classes.spacing}>
See also:
- <div><a href="https://doc.arvados.org/user/getting_started/ssh-access-unix.html" className={props.classes.link} target="_blank" rel="noopener">SSH access</a></div>
- <div><a href="https://doc.arvados.org/user/tutorials/tutorial-firstscript.html" className={props.classes.link} target="_blank" rel="noopener">Writing a Crunch Script</a></div>
+ <div><a href="https://doc.arvados.org/user/getting_started/ssh-access-unix.html" className={props.classes.link} target="_blank" rel="noopener noreferrer">SSH access</a></div>
+ <div><a href="https://doc.arvados.org/user/tutorials/tutorial-firstscript.html" className={props.classes.link} target="_blank" rel="noopener noreferrer">Writing a Crunch Script</a></div>
</Typography>
</DialogContent>
<DialogActions>
export const PermissionSelect = (props: SelectProps) =>
<Select
{...props}
+ disableUnderline
renderValue={renderPermissionItem}>
<MenuItem value={PermissionSelectValue.READ}>
{renderPermissionItem(PermissionSelectValue.READ)}
import { Provider } from 'react-redux';
import { combineReducers, createStore } from 'redux';
-import SharingDialogComponent, {
+import {
+ SharingDialogComponent,
SharingDialogComponentProps,
} from './sharing-dialog-component';
import {
}
export type SharingDialogComponentProps = SharingDialogDataProps & SharingDialogActionProps;
-export default (props: SharingDialogComponentProps) => {
+export const SharingDialogComponent = (props: SharingDialogComponentProps) => {
const { open, loading, saveEnabled, sharedResourceUuid,
sharingURLsNr, privateAccess, sharingURLsDisabled,
onClose, onSave, onCreateSharingToken, refreshPermissions } = props;
fullWidth
maxWidth='sm'
disableBackdropClick={saveEnabled}
- disableEscapeKeyDown={saveEnabled}>
+ >
<DialogTitle>
Sharing settings
</DialogTitle>
{tabNr === SharingDialogTab.PERMISSIONS &&
<Grid container direction='column' spacing={24}>
<Grid item>
- <SharingInvitationForm onSave={onSave} saveEnabled={saveEnabled} />
+ <SharingInvitationForm onSave={onSave} />
</Grid>
<Grid item>
<SharingManagementForm onSave={onSave} />
<Button onClick={() => {
onClose();
setWithExpiration(false);
- }}>
- Close
+ }}
+ disabled={saveEnabled}
+ color='primary'
+ size='small'
+ style={{ marginLeft: '10px' }}
+ >
+ Close
+ </Button>
+ <Button onClick={() => {
+ onSave();
+ }}
+ data-cy="add-invited-people"
+ disabled={!saveEnabled}
+ color='primary'
+ variant='contained'
+ size='small'
+ style={{ marginLeft: '10px' }}
+ >
+ Save
</Button>
</Grid>
</Grid>
initializeManagementForm
} from 'store/sharing-dialog/sharing-dialog-actions';
import { WithDialogProps } from 'store/dialog/with-dialog';
-import SharingDialogComponent, {
+import {
+ SharingDialogComponent,
SharingDialogDataProps,
SharingDialogActionProps
} from './sharing-dialog-component';
import React from 'react';
import { Field, WrappedFieldProps, FieldArray, WrappedFieldArrayProps } from 'redux-form';
-import { Grid, FormControl, InputLabel, Tooltip, IconButton, StyleRulesCallback } from '@material-ui/core';
+import { Grid, FormControl, InputLabel, StyleRulesCallback } from '@material-ui/core';
import { PermissionSelect, parsePermissionLevel, formatPermissionLevel } from './permission-select';
import { ParticipantSelect, Participant } from './participant-select';
-import { AddIcon } from 'components/icon/icon';
import { WithStyles } from '@material-ui/core/styles';
import withStyles from '@material-ui/core/styles/withStyles';
import { ArvadosTheme } from 'common/custom-theme';
-type SharingStyles = 'root' | 'addButtonRoot' | 'addButtonPrimary' | 'addButtonDisabled';
+type SharingStyles = 'root';
const styles: StyleRulesCallback<SharingStyles> = (theme: ArvadosTheme) => ({
root: {
padding: `${theme.spacing.unit}px 0`,
},
- addButtonRoot: {
- height: "36px",
- width: "36px",
- marginRight: "6px",
- marginLeft: "6px",
- marginTop: "12px",
- },
- addButtonPrimary: {
- color: theme.palette.primary.contrastText,
- background: theme.palette.primary.main,
- "&:hover": {
- background: theme.palette.primary.dark,
- }
- },
- addButtonDisabled: {
- background: 'none',
- }
});
-const SharingInvitationFormComponent = (props: { onSave: () => void, saveEnabled: boolean }) => <StyledSharingInvitationFormComponent onSave={props.onSave} saveEnabled={props.saveEnabled} />
+const SharingInvitationFormComponent = (props: { onSave: () => void }) => <StyledSharingInvitationFormComponent onSave={props.onSave} />
export default SharingInvitationFormComponent;
const StyledSharingInvitationFormComponent = withStyles(styles)(
- ({ onSave, saveEnabled, classes }: { onSave: () => void, saveEnabled: boolean } & WithStyles<SharingStyles>) =>
+ ({ classes }: { onSave: () => void } & WithStyles<SharingStyles>) =>
<Grid container spacing={8} wrap='nowrap' className={classes.root} >
<Grid data-cy="invite-people-field" item xs={8}>
<InvitedPeopleField />
</Grid>
<Grid data-cy="permission-select-field" item xs={4} container wrap='nowrap'>
<PermissionSelectField />
- <IconButton onClick={onSave} disabled={!saveEnabled} color="primary" classes={{
- root: classes.addButtonRoot,
- colorPrimary: classes.addButtonPrimary,
- disabled: classes.addButtonDisabled
- }}
- data-cy='add-invited-people'>
- <Tooltip title="Add authorization">
- <AddIcon />
- </Tooltip>
- </IconButton>
</Grid>
</Grid >);
interface SaveProps {
onSave: () => void;
- saveEnabled: boolean;
}
export const SharingInvitationForm =
// SPDX-License-Identifier: AGPL-3.0
import React from 'react';
-import { Grid, StyleRulesCallback, Divider, IconButton, Typography } from '@material-ui/core';
+import { Grid, StyleRulesCallback, Divider, IconButton, Typography, Tooltip } from '@material-ui/core';
import {
Field,
WrappedFieldProps,
({ field, index, fields, classes, onSave }: { field: string, index: number, fields: FieldArrayFieldsProps<{ email: string }>, onSave: () => void; } & WithStyles<'root'>) =>
<>
<Grid container alignItems='center' spacing={8} wrap='nowrap' className={classes.root}>
- <Grid item xs={8}>
+ <Grid item xs={7}>
<Typography noWrap variant='subtitle1'>{fields.get(index).email}</Typography>
</Grid>
+ <Grid item xs={1} container wrap='nowrap'>
+ <Tooltip title='Remove access'>
+ <IconButton onClick={() => { fields.remove(index); onSave(); }}>
+ <CloseIcon />
+ </IconButton>
+ </Tooltip>
+ </Grid>
<Grid item xs={4} container wrap='nowrap'>
<Field
name={`${field}.permissions` as string}
parse={parsePermissionLevel}
onChange={onSave}
/>
- <IconButton onClick={() => { fields.remove(index); onSave(); }}>
- <CloseIcon />
- </IconButton>
+
</Grid>
</Grid>
<Divider />
({ classes, visibility, includePublic, onSave }: WithStyles<'root' | 'heading'> & AccessProps) =>
<>
<Typography className={classes.heading}>General access</Typography>
- <Grid container alignItems='center' spacing={8} className={classes.root}>
+ <Grid container alignItems='center' className={classes.root}>
<Grid item xs={8}>
<Typography variant='subtitle1'>
{renderVisibilityInfo(visibility)}
</Typography>
</Grid>
- <Grid item xs={4} container wrap='nowrap'>
+ <Grid item xs={4} wrap='nowrap'>
<Field<{ includePublic: boolean }> name='visibility' component={VisibilityLevelSelectComponent} includePublic={includePublic} onChange={onSave} />
</Grid>
</Grid>
</Grid>
<Grid item xs />
<Grid item>
- <span className={props.classes.sharingUrlButton}><Tooltip title='Copy to clipboard'>
+ <span className={props.classes.sharingUrlButton}><Tooltip title='Copy link to clipboard'>
<CopyToClipboard text={url} onCopy={() => props.onCopy('Sharing URL copied')}>
<CopyIcon />
</CopyToClipboard>
const VisibilityLevelSelectStyles: StyleRulesCallback<VisibilityLevelSelectClasses> = theme => ({
root: {
- marginLeft: theme.spacing.unit,
}
});
export const VisibilityLevelSelect = withStyles(VisibilityLevelSelectStyles)(
});
});
- describe('copy to clipboard button', () => {
+ describe('Copy link to clipboard button', () => {
beforeEach(() => {
wrapper = mount(
<Provider store={store}>
variant="contained"
className={classes.actionButton}
>
- COPY TO CLIPBOARD
+ Copy link to clipBOARD
</Button>
</CopyToClipboard>
<Typography>
<DetailsAttribute
label='Internet address'
- value={<a href={winDav.toString()} target="_blank" rel="noopener">{winDav.toString()}</a>}
+ value={<a href={winDav.toString()} target="_blank" rel="noopener noreferrer">{winDav.toString()}</a>}
copyValue={winDav.toString()} />
<DetailsAttribute
<TabPanel index={0} value={activeTab}>
<DetailsAttribute
label='Server'
- value={<a href={cyberDavStr} target="_blank" rel="noopener">{cyberDavStr}</a>}
+ value={<a href={cyberDavStr} target="_blank" rel="noopener noreferrer">{cyberDavStr}</a>}
copyValue={cyberDavStr} />
<DetailsAttribute
import { createTree } from 'models/tree';
import { GROUPS_PANEL_ID, openCreateGroupDialog } from 'store/groups-panel/groups-panel-actions';
import { noop } from 'lodash/fp';
-import { ContextMenuKind } from 'views-components/context-menu/context-menu';
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { getResource, ResourcesState } from 'store/resources/resources';
import { GroupResource } from 'models/group';
import { RootState } from 'store/store';
import { ArvadosTheme } from 'common/custom-theme';
import { RootState } from 'store/store';
import { LoginForm } from 'views-components/login-form/login-form';
-import Axios from 'axios';
+import Axios, { AxiosResponse } from 'axios';
import { Config } from 'common/config';
import { sanitizeHTML } from 'common/html-sanitize';
}
});
+export type PasswordLoginResponse = {
+ uuid?: string;
+ api_token?: string;
+ message?: string;
+};
+
const doPasswordLogin = (url: string) => (username: string, password: string) => {
const formData: string[] = [];
formData.push('username='+encodeURIComponent(username));
formData.push('password='+encodeURIComponent(password));
- return Axios.post(`${url}/arvados/v1/users/authenticate`, formData.join('&'), {
+ return Axios.post<string, AxiosResponse<PasswordLoginResponse>>(`${url}/arvados/v1/users/authenticate`, formData.join('&'), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
import { ArvadosTheme } from 'common/custom-theme';
import { CloseIcon, CommandIcon, CopyIcon } from 'components/icon/icon';
import { MPVPanelProps } from 'components/multi-panel-view/multi-panel-view';
-import { DefaultCodeSnippet } from 'components/default-code-snippet/default-code-snippet';
+import { DefaultVirtualCodeSnippet } from 'components/default-code-snippet/default-virtual-code-snippet';
import { Process } from 'store/processes/process';
import shellescape from 'shell-escape';
-import CopyToClipboard from 'react-copy-to-clipboard';
+import CopyResultToClipboard from 'components/copy-to-clipboard/copy-result-to-clipboard';
type CssRules = 'card' | 'content' | 'title' | 'header' | 'avatar' | 'iconHeader';
},
header: {
paddingTop: theme.spacing.unit,
- paddingBottom: theme.spacing.unit,
+ paddingBottom: 0,
},
iconHeader: {
fontSize: '1.875rem',
paddingTop: theme.spacing.unit * 0.5
},
content: {
+ height: `calc(100% - ${theme.spacing.unit * 6}px)`,
padding: theme.spacing.unit * 1.0,
- paddingTop: theme.spacing.unit * 0.5,
+ paddingTop: 0,
'&:last-child': {
paddingBottom: theme.spacing.unit * 1,
}
overflow: 'hidden',
paddingTop: theme.spacing.unit * 0.5,
color: theme.customs.colors.greyD,
- fontSize: '1.875rem'
+ fontSize: '1.875rem'
},
});
classes,
doHidePanel,
}: ProcessCmdCardProps) => {
- const command = process.containerRequest.command.map((v) =>
- shellescape([v]) // Escape each arg separately
- );
- let formattedCommand = [...command];
- formattedCommand.forEach((item, i, arr) => {
+ const formatLine = (lines: string[], index: number): string => {
+ // Escape each arg separately
+ let line = shellescape([lines[index]])
// Indent lines after the first
- const indent = i > 0 ? ' ' : '';
- // Escape newlines on every non-last arg when there are multiple lines
- const lineBreak = arr.length > 1 && i < arr.length - 1 ? ' \\' : '';
- arr[i] = `${indent}${item}${lineBreak}`;
- });
+ const indent = index > 0 ? ' ' : '';
+ // Add backslash "escaped linebreak"
+ const lineBreak = lines.length > 1 && index < lines.length - 1 ? ' \\' : '';
+
+ return `${indent}${line}${lineBreak}`;
+ };
+
+ const formatClipboardText = (command: string[]) => (): string => (
+ command.map((v) =>
+ shellescape([v]) // Escape each arg separately
+ ).join(' ')
+ );
return (
<Card className={classes.card}>
action={
<Grid container direction="row" alignItems="center">
<Grid item>
- <Tooltip title="Copy to clipboard" disableFocusListener>
+ <Tooltip title="Copy link to clipboard" disableFocusListener>
<IconButton>
- <CopyToClipboard
- text={command.join(" ")}
+ <CopyResultToClipboard
+ getText={formatClipboardText(process.containerRequest.command)}
onCopy={() => onCopy("Command copied to clipboard")}
>
<CopyIcon />
- </CopyToClipboard>
+ </CopyResultToClipboard>
</IconButton>
</Tooltip>
</Grid>
}
/>
<CardContent className={classes.content}>
- <DefaultCodeSnippet lines={formattedCommand} linked />
+ <DefaultVirtualCodeSnippet
+ lines={process.containerRequest.command}
+ lineFormatter={formatLine}
+ linked
+ />
</CardContent>
</Card>
);
import { Provider } from 'react-redux';
import { ProcessIOCard, ProcessIOCardType } from './process-io-card';
import { DefaultView } from "components/default-view/default-view";
-import { DefaultCodeSnippet } from "components/default-code-snippet/default-code-snippet";
+import { DefaultVirtualCodeSnippet } from "components/default-code-snippet/default-virtual-code-snippet";
import { ProcessOutputCollectionFiles } from './process-output-collection-files';
import { MemoryRouter } from 'react-router-dom';
-
+// Mock collection files component since it just needs to exist
jest.mock('views/process-panel/process-output-collection-files');
+// Mock autosizer for the io panel virtual list
+jest.mock('react-virtualized-auto-sizer', () => ({ children }: any) => children({ height: 600, width: 600 }));
+
configure({ adapter: new Adapter() });
describe('renderers', () => {
// then
expect(panel.find(CircularProgress).exists()).toBeFalsy();
expect(panel.find(Tab).length).toBe(1);
- expect(panel.find(DefaultCodeSnippet).text()).toContain(JSON.stringify(raw, null, 2));
+ expect(panel.find(DefaultVirtualCodeSnippet).text()).toContain(JSON.stringify(raw, null, 2).replace(/\n/g, ''));
});
it('shows main process with params', () => {
// when
- const parameters = [{id: 'someId', label: 'someLabel', value: [{display: 'someValue'}]}];
+ const parameters = [{id: 'someId', label: 'someLabel', value: {display: 'someValue'}}];
let panel = mount(
<Provider store={store}>
<MuiThemeProvider theme={CustomTheme}>
CircularProgress,
} from "@material-ui/core";
import { ArvadosTheme } from "common/custom-theme";
-import { CloseIcon, ImageIcon, InputIcon, ImageOffIcon, OutputIcon, MaximizeIcon, UnMaximizeIcon, InfoIcon } from "components/icon/icon";
+import { CloseIcon, InputIcon, OutputIcon, MaximizeIcon, UnMaximizeIcon, InfoIcon } from "components/icon/icon";
import { MPVPanelProps } from "components/multi-panel-view/multi-panel-view";
import {
BooleanCommandInputParameter,
import { Process } from "store/processes/process";
import { navigateTo } from "store/navigation/navigation-action";
import classNames from "classnames";
-import { DefaultCodeSnippet } from "components/default-code-snippet/default-code-snippet";
+import { DefaultVirtualCodeSnippet } from "components/default-code-snippet/default-virtual-code-snippet";
import { KEEP_URL_REGEX } from "models/resource";
+import { FixedSizeList } from 'react-window';
+import AutoSizer from "react-virtualized-auto-sizer";
+import { LinkProps } from "@material-ui/core/Link";
type CssRules =
| "card"
| "avatar"
| "iconHeader"
| "tableWrapper"
- | "tableRoot"
- | "paramValue"
+ | "paramTableRoot"
+ | "paramTableCellText"
+ | "mountsTableRoot"
+ | "jsonWrapper"
| "keepLink"
| "collectionLink"
- | "imagePreview"
- | "valArray"
| "secondaryVal"
- | "secondaryRow"
| "emptyValue"
| "noBorderRow"
| "symmetricTabs"
- | "imagePlaceholder"
- | "rowWithPreview"
- | "labelColumn"
- | "primaryRow";
+ | "wrapTooltip";
const styles: StyleRulesCallback<CssRules> = (theme: ArvadosTheme) => ({
card: {
alignSelf: "flex-start",
paddingTop: theme.spacing.unit * 0.5,
},
+ // Card content
content: {
- height: `calc(100% - ${theme.spacing.unit * 7}px - ${theme.spacing.unit * 1.5}px)`,
+ height: `calc(100% - ${theme.spacing.unit * 6}px)`,
padding: theme.spacing.unit * 1.0,
paddingTop: 0,
"&:last-child": {
paddingBottom: theme.spacing.unit * 1,
},
},
+ // Card title
title: {
overflow: "hidden",
paddingTop: theme.spacing.unit * 0.5,
color: theme.customs.colors.greyD,
fontSize: "1.875rem",
},
+ // Applies to table tab and collection table content
tableWrapper: {
height: "auto",
- maxHeight: `calc(100% - ${theme.spacing.unit * 3}px)`,
+ maxHeight: `calc(100% - ${theme.spacing.unit * 6}px)`,
overflow: "auto",
+ // Use flexbox to keep scrolling at the virtual list level
+ display: "flex",
+ flexDirection: "column",
+ alignItems: "stretch", // Stretches output collection to full width
+
},
- tableRoot: {
+
+ // Param table virtual list styles
+ paramTableRoot: {
+ display: "flex",
+ flexDirection: "column",
+ overflow: "hidden",
+ // Flex header
+ "& thead tr": {
+ alignItems: "end",
+ "& th": {
+ padding: "4px 25px 10px",
+ },
+ },
+ "& tbody": {
+ height: "100vh", // Must be constrained by panel maxHeight
+ },
+ // Flex header/body rows
+ "& thead tr, & > tbody tr": {
+ display: "flex",
+ // Flex header/body cells
+ "& th, & td": {
+ flexGrow: 1,
+ flexShrink: 1,
+ flexBasis: 0,
+ overflow: "hidden",
+ },
+ // Column width overrides
+ "& th:nth-of-type(1), & td:nth-of-type(1)": {
+ flexGrow: 0.7,
+ },
+ "& th:nth-last-of-type(1), & td:nth-last-of-type(1)": {
+ flexGrow: 2,
+ },
+ },
+ // Flex body rows
+ "& tbody tr": {
+ height: "40px",
+ // Flex body cells
+ "& td": {
+ padding: "2px 25px 2px",
+ overflow: "hidden",
+ display: "flex",
+ flexDirection: "row",
+ alignItems: "center",
+ whiteSpace: "nowrap",
+ },
+ },
+ },
+ // Param value cell typography styles
+ paramTableCellText: {
+ overflow: "hidden",
+ display: "flex",
+ // Every cell contents requires a wrapper for the ellipsis
+ // since adding ellipses to an anchor element parent results in misaligned tooltip
+ "& a, & span": {
+ overflow: "hidden",
+ textOverflow: "ellipsis",
+ },
+ '& pre': {
+ margin: 0,
+ overflow: "hidden",
+ textOverflow: "ellipsis",
+ },
+ },
+ mountsTableRoot: {
width: "100%",
"& thead th": {
verticalAlign: "bottom",
paddingRight: "25px",
},
},
- paramValue: {
- display: "flex",
- alignItems: "flex-start",
- flexDirection: "column",
+ // JSON tab wrapper
+ jsonWrapper: {
+ height: `calc(100% - ${theme.spacing.unit * 6}px)`,
},
keepLink: {
color: theme.palette.primary.main,
textDecoration: "none",
+ // Overflow wrap for mounts table
overflowWrap: "break-word",
cursor: "pointer",
},
+ // Output collection tab link
collectionLink: {
margin: "10px",
"& a": {
cursor: "pointer",
},
},
- imagePreview: {
- maxHeight: "15em",
- maxWidth: "15em",
- marginBottom: theme.spacing.unit,
- },
- valArray: {
- display: "flex",
- gap: "10px",
- flexWrap: "wrap",
- "& span": {
- display: "inline",
- },
- },
secondaryVal: {
paddingLeft: "20px",
},
- secondaryRow: {
- height: "24px",
- verticalAlign: "top",
- position: "relative",
- top: "-4px",
- },
emptyValue: {
color: theme.customs.colors.grey700,
},
flexBasis: "0",
},
},
- imagePlaceholder: {
- width: "60px",
- height: "60px",
- display: "flex",
- alignItems: "center",
- justifyContent: "center",
- backgroundColor: "#cecece",
- borderRadius: "10px",
- },
- rowWithPreview: {
- verticalAlign: "bottom",
- },
- labelColumn: {
- minWidth: "120px",
- },
- primaryRow: {
- height: "24px",
- "& td": {
- paddingTop: "2px",
- paddingBottom: "2px",
- },
+ wrapTooltip: {
+ maxWidth: "600px",
+ wordWrap: "break-word",
},
});
setSubProcTabState(value);
};
- const [showImagePreview, setShowImagePreview] = useState(false);
-
const PanelIcon = label === ProcessIOCardType.INPUT ? InputIcon : OutputIcon;
const mainProcess = !(process && process!.containerRequest.requestingContainerUuid);
const showParamTable = mainProcess || forceShowParams;
}
action={
<div>
- {mainProcess && (
- <Tooltip
- title={"Toggle Image Preview"}
- disableFocusListener
- >
- <IconButton
- data-cy="io-preview-image-toggle"
- onClick={() => {
- setShowImagePreview(!showImagePreview);
- }}
- >
- {showImagePreview ? <ImageIcon /> : <ImageOffIcon />}
- </IconButton>
- </Tooltip>
- )}
{doUnMaximizePanel && panelMaximized && (
<Tooltip
title={`Unmaximize ${panelName || "panel"}`}
</Grid>
)}
{/* Once loaded, either raw or params may still be empty
- * Raw when all params are empty
- * Params when raw is provided by containerRequest properties but workflow mount is absent for preview
- */}
+ * Raw when all params are empty
+ * Params when raw is provided by containerRequest properties but workflow mount is absent for preview
+ */}
{!loading && (hasRaw || hasParams) && (
<>
<Tabs
<div className={classes.tableWrapper}>
<ProcessIOPreview
data={params}
- showImagePreview={showImagePreview}
valueLabel={forceShowParams ? "Default value" : "Value"}
/>
</div>
)}
{(mainProcTabState === 1 || !hasParams) && (
- <div className={classes.tableWrapper}>
+ <div className={classes.jsonWrapper}>
<ProcessIORaw data={raw} />
</div>
)}
{hasOutputCollecton && <Tab label="Collection" />}
{isRawLoaded && <Tab label="JSON" />}
</Tabs>
- <div className={classes.tableWrapper}>
- {subProcTabState === 0 && hasInputMounts && <ProcessInputMounts mounts={mounts || []} />}
- {subProcTabState === 0 && hasOutputCollecton && (
+ {subProcTabState === 0 && hasInputMounts && <ProcessInputMounts mounts={mounts || []} />}
+ {subProcTabState === 0 && hasOutputCollecton && (
+ <div className={classes.tableWrapper}>
<>
{outputUuid && (
<Typography className={classes.collectionLink}>
currentItemUuid={outputUuid}
/>
</>
- )}
- {isRawLoaded && (subProcTabState === 1 || (!hasInputMounts && !hasOutputCollecton)) && (
- <div className={classes.tableWrapper}>
- <ProcessIORaw data={raw} />
- </div>
- )}
- </div>
+ </div>
+ )}
+ {isRawLoaded && (subProcTabState === 1 || (!hasInputMounts && !hasOutputCollecton)) && (
+ <div className={classes.jsonWrapper}>
+ <ProcessIORaw data={raw} />
+ </div>
+ )}
</>
) : (
<Grid
export type ProcessIOParameter = {
id: string;
label: string;
- value: ProcessIOValue[];
+ value: ProcessIOValue;
};
interface ProcessIOPreviewDataProps {
data: ProcessIOParameter[];
- showImagePreview: boolean;
valueLabel: string;
}
type ProcessIOPreviewProps = ProcessIOPreviewDataProps & WithStyles<CssRules>;
const ProcessIOPreview = memo(
- withStyles(styles)(({ classes, data, showImagePreview, valueLabel }: ProcessIOPreviewProps) => {
+ withStyles(styles)(({ classes, data, valueLabel }: ProcessIOPreviewProps) => {
const showLabel = data.some((param: ProcessIOParameter) => param.label);
+
+ const hasMoreValues = (index: number) => (
+ data[index+1] && !isMainRow(data[index+1])
+ );
+
+ const isMainRow = (param: ProcessIOParameter) => (
+ param &&
+ ((param.id || param.label) &&
+ !param.value.secondary)
+ );
+
+ const RenderRow = ({index, style}) => {
+ const param = data[index];
+
+ const rowClasses = {
+ [classes.noBorderRow]: hasMoreValues(index),
+ };
+
+ return <TableRow
+ style={style}
+ className={classNames(rowClasses)}
+ data-cy={isMainRow(param) ? "process-io-param" : ""}>
+ <TableCell>
+ <Tooltip title={param.id}>
+ <Typography className={classes.paramTableCellText}>
+ <span>
+ {param.id}
+ </span>
+ </Typography>
+ </Tooltip>
+ </TableCell>
+ {showLabel && <TableCell>
+ <Tooltip title={param.label}>
+ <Typography className={classes.paramTableCellText}>
+ <span>
+ {param.label}
+ </span>
+ </Typography>
+ </Tooltip>
+ </TableCell>}
+ <TableCell>
+ <ProcessValuePreview
+ value={param.value}
+ />
+ </TableCell>
+ <TableCell>
+ <Typography className={classes.paramTableCellText}>
+ {/** Collection is an anchor so doesn't require wrapper element */}
+ {param.value.collection}
+ </Typography>
+ </TableCell>
+ </TableRow>;
+ };
+
return (
<Table
- className={classes.tableRoot}
+ className={classes.paramTableRoot}
aria-label="Process IO Preview"
>
<TableHead>
<TableRow>
<TableCell>Name</TableCell>
- {showLabel && <TableCell className={classes.labelColumn}>Label</TableCell>}
+ {showLabel && <TableCell>Label</TableCell>}
<TableCell>{valueLabel}</TableCell>
<TableCell>Collection</TableCell>
</TableRow>
</TableHead>
<TableBody>
- {data.map((param: ProcessIOParameter) => {
- const firstVal = param.value.length > 0 ? param.value[0] : undefined;
- const rest = param.value.slice(1);
- const mainRowClasses = {
- [classes.noBorderRow]: rest.length > 0,
- [classes.primaryRow]: true
- };
-
- return (
- <React.Fragment key={param.id}>
- <TableRow
- className={classNames(mainRowClasses)}
- data-cy="process-io-param"
- >
- <TableCell>{param.id}</TableCell>
- {showLabel && <TableCell>{param.label}</TableCell>}
- <TableCell>
- {firstVal && (
- <ProcessValuePreview
- value={firstVal}
- showImagePreview={showImagePreview}
- />
- )}
- </TableCell>
- <TableCell className={firstVal?.imageUrl ? classes.rowWithPreview : undefined}>
- <Typography className={classes.paramValue}>{firstVal?.collection}</Typography>
- </TableCell>
- </TableRow>
- {rest.map((val, i) => {
- const rowClasses = {
- [classes.noBorderRow]: i < rest.length - 1,
- [classes.secondaryRow]: val.secondary,
- [classes.primaryRow]: !val.secondary,
- };
- return (
- <TableRow
- className={classNames(rowClasses)}
- key={i}
- >
- <TableCell />
- {showLabel && <TableCell />}
- <TableCell>
- <ProcessValuePreview
- value={val}
- showImagePreview={showImagePreview}
- />
- </TableCell>
- <TableCell className={firstVal?.imageUrl ? classes.rowWithPreview : undefined}>
- <Typography className={classes.paramValue}>{val.collection}</Typography>
- </TableCell>
- </TableRow>
- );
- })}
- </React.Fragment>
- );
- })}
+ <AutoSizer>
+ {({ height, width }) =>
+ <FixedSizeList
+ height={height}
+ itemCount={data.length}
+ itemSize={40}
+ width={width}
+ >
+ {RenderRow}
+ </FixedSizeList>
+ }
+ </AutoSizer>
</TableBody>
</Table>
);
interface ProcessValuePreviewProps {
value: ProcessIOValue;
- showImagePreview: boolean;
}
-const ProcessValuePreview = withStyles(styles)(({ value, showImagePreview, classes }: ProcessValuePreviewProps & WithStyles<CssRules>) => (
- <Typography className={classes.paramValue}>
- {value.imageUrl && showImagePreview ? (
- <img
- className={classes.imagePreview}
- src={value.imageUrl}
- alt="Inline Preview"
- />
- ) : (
- ""
- )}
- {value.imageUrl && !showImagePreview ? <ImagePlaceholder /> : ""}
- <span className={classNames(classes.valArray, value.secondary && classes.secondaryVal)}>{value.display}</span>
+const ProcessValuePreview = withStyles(styles)(({ value, classes }: ProcessValuePreviewProps & WithStyles<CssRules>) => (
+ <Typography className={classNames(classes.paramTableCellText, value.secondary && classes.secondaryVal)}>
+ {value.display}
</Typography>
));
}
const ProcessIORaw = withStyles(styles)(({ data }: ProcessIORawDataProps) => (
- <Paper elevation={0}>
- <DefaultCodeSnippet
- lines={[JSON.stringify(data, null, 2)]}
+ <Paper elevation={0} style={{minWidth: "100%", height: "100%"}}>
+ <DefaultVirtualCodeSnippet
+ lines={JSON.stringify(data, null, 2).split('\n')}
linked
/>
</Paper>
auth: state.auth,
}))(({ mounts, classes, auth }: ProcessInputMountsProps & { auth: AuthState }) => (
<Table
- className={classes.tableRoot}
+ className={classes.mountsTableRoot}
aria-label="Process Input Mounts"
>
<TableHead>
case isPrimitiveOfType(input, CWLType.BOOLEAN):
const boolValue = (input as BooleanCommandInputParameter).value;
return boolValue !== undefined && !(Array.isArray(boolValue) && boolValue.length === 0)
- ? [{ display: renderPrimitiveValue(boolValue, false) }]
+ ? [{ display: <PrimitiveTooltip data={boolValue}>{renderPrimitiveValue(boolValue, false)}</PrimitiveTooltip> }]
: [{ display: <EmptyValue /> }];
case isPrimitiveOfType(input, CWLType.INT):
return intValue !== undefined &&
// Missing values are empty array
!(Array.isArray(intValue) && intValue.length === 0)
- ? [{ display: renderPrimitiveValue(intValue, false) }]
+ ? [{ display: <PrimitiveTooltip data={intValue}>{renderPrimitiveValue(intValue, false)}</PrimitiveTooltip> }]
: [{ display: <EmptyValue /> }];
case isPrimitiveOfType(input, CWLType.FLOAT):
case isPrimitiveOfType(input, CWLType.DOUBLE):
const floatValue = (input as FloatCommandInputParameter).value;
return floatValue !== undefined && !(Array.isArray(floatValue) && floatValue.length === 0)
- ? [{ display: renderPrimitiveValue(floatValue, false) }]
+ ? [{ display: <PrimitiveTooltip data={floatValue}>{renderPrimitiveValue(floatValue, false)}</PrimitiveTooltip> }]
: [{ display: <EmptyValue /> }];
case isPrimitiveOfType(input, CWLType.STRING):
const stringValue = (input as StringCommandInputParameter).value || undefined;
return stringValue !== undefined && !(Array.isArray(stringValue) && stringValue.length === 0)
- ? [{ display: renderPrimitiveValue(stringValue, false) }]
+ ? [{ display: <PrimitiveTooltip data={stringValue}>{renderPrimitiveValue(stringValue, false)}</PrimitiveTooltip> }]
: [{ display: <EmptyValue /> }];
case isPrimitiveOfType(input, CWLType.FILE):
case getEnumType(input) !== null:
const enumValue = (input as EnumCommandInputParameter).value;
- return enumValue !== undefined && enumValue ? [{ display: <pre>{enumValue}</pre> }] : [{ display: <EmptyValue /> }];
+ return enumValue !== undefined && enumValue ? [{ display: <PrimitiveTooltip data={enumValue}>{enumValue}</PrimitiveTooltip> }] : [{ display: <EmptyValue /> }];
case isArrayOfType(input, CWLType.STRING):
const strArray = (input as StringArrayCommandInputParameter).value || [];
- return strArray.length ? [{ display: <>{strArray.map(val => renderPrimitiveValue(val, true))}</> }] : [{ display: <EmptyValue /> }];
+ return strArray.length ? [{ display: <PrimitiveArrayTooltip data={strArray}>{strArray.map(val => renderPrimitiveValue(val, true))}</PrimitiveArrayTooltip> }] : [{ display: <EmptyValue /> }];
case isArrayOfType(input, CWLType.INT):
case isArrayOfType(input, CWLType.LONG):
const intArray = (input as IntArrayCommandInputParameter).value || [];
- return intArray.length ? [{ display: <>{intArray.map(val => renderPrimitiveValue(val, true))}</> }] : [{ display: <EmptyValue /> }];
+ return intArray.length ? [{ display: <PrimitiveArrayTooltip data={intArray}>{intArray.map(val => renderPrimitiveValue(val, true))}</PrimitiveArrayTooltip> }] : [{ display: <EmptyValue /> }];
case isArrayOfType(input, CWLType.FLOAT):
case isArrayOfType(input, CWLType.DOUBLE):
const floatArray = (input as FloatArrayCommandInputParameter).value || [];
- return floatArray.length ? [{ display: <>{floatArray.map(val => renderPrimitiveValue(val, true))}</> }] : [{ display: <EmptyValue /> }];
+ return floatArray.length ? [{ display: <PrimitiveArrayTooltip data={floatArray}>{floatArray.map(val => renderPrimitiveValue(val, true))}</PrimitiveArrayTooltip> }] : [{ display: <EmptyValue /> }];
case isArrayOfType(input, CWLType.FILE):
const fileArrayMainFiles = (input as FileArrayCommandInputParameter).value || [];
}
};
+interface PrimitiveTooltipProps {
+ data: boolean | number | string;
+}
+
+const PrimitiveTooltip = (props: React.PropsWithChildren<PrimitiveTooltipProps>) => (
+ <Tooltip title={typeof props.data !== 'object' ? String(props.data) : ""}>
+ <pre>{props.children}</pre>
+ </Tooltip>
+);
+
+interface PrimitiveArrayTooltipProps {
+ data: string[];
+}
+
+const PrimitiveArrayTooltip = (props: React.PropsWithChildren<PrimitiveArrayTooltipProps>) => (
+ <Tooltip title={props.data.join(', ')}>
+ <span>{props.children}</span>
+ </Tooltip>
+);
+
+
const renderPrimitiveValue = (value: any, asChip: boolean) => {
const isObject = typeof value === "object";
if (!isObject) {
<Chip
key={value}
label={String(value)}
+ style={{marginRight: "10px"}}
/>
) : (
- <pre key={value}>{String(value)}</pre>
+ <>{String(value)}</>
);
} else {
return asChip ? <UnsupportedValueChip /> : <UnsupportedValue />;
// Passing a pdh always returns a relative wb2 collection url
const pdhWbPath = getNavUrl(pdhUrl, auth);
return pdhUrl && pdhWbPath ? (
- <Tooltip title={"View collection in Workbench"}>
+ <Tooltip title={<>View collection in Workbench<br />{pdhUrl}</>}>
<RouterLink
to={pdhWbPath}
className={classes.keepLink}
const keepUrlPathNav = getKeepNavUrl(auth, res, pdh);
return keepUrlPathNav ? (
- <Tooltip title={"View in keep-web"}>
+ <Tooltip classes={{tooltip: classes.wrapTooltip}} title={<>View in keep-web<br />{keepUrlPath || "/"}</>}>
<a
className={classes.keepLink}
href={keepUrlPathNav}
target="_blank"
- rel="noopener"
+ rel="noopener noreferrer"
>
{keepUrlPath || "/"}
</a>
};
};
+type MuiLinkWithTooltipProps = WithStyles<CssRules> & React.PropsWithChildren<LinkProps>;
+
+const MuiLinkWithTooltip = withStyles(styles)((props: MuiLinkWithTooltipProps) => (
+ <Tooltip title={props.title} classes={{tooltip: props.classes.wrapTooltip}}>
+ <MuiLink {...props}>
+ {props.children}
+ </MuiLink>
+ </Tooltip>
+));
+
const fileToProcessIOValue = (file: File, secondary: boolean, auth: AuthState, pdh: string | undefined, mainFilePdh: string): ProcessIOValue => {
if (isExternalValue(file)) {
return { display: <UnsupportedValue /> };
if (isFileUrl(file.location)) {
return {
display: (
- <MuiLink
+ <MuiLinkWithTooltip
href={file.location}
target="_blank"
rel="noopener"
+ title={file.location}
>
{file.location}
- </MuiLink>
+ </MuiLinkWithTooltip>
),
secondary,
};
label={"Cannot display value"}
/>
));
-
-const ImagePlaceholder = withStyles(styles)(({ classes }: WithStyles<CssRules>) => (
- <span className={classes.imagePlaceholder}>
- <ImageIcon />
- </span>
-));
</Tooltip>
</Grid>
<Grid item>
- <Tooltip title="Copy to clipboard" disableFocusListener>
+ <Tooltip title="Copy link to clipboard" disableFocusListener>
<IconButton>
<CopyToClipboard text={lines.join()} onCopy={() => onCopy("Log copied to clipboard")}>
<CopyIcon />
} from "components/collection-panel-files/collection-panel-files";
import { Dispatch } from "redux";
import { collectionPanelFilesAction } from "store/collection-panel/collection-panel-files/collection-panel-files-actions";
-import { ContextMenuKind } from "views-components/context-menu/context-menu";
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { openContextMenu, openCollectionFilesContextMenu } from 'store/context-menu/context-menu-actions';
import { openUploadCollectionFilesDialog } from 'store/collections/collection-upload-actions';
import { ResourceKind } from "models/resource";
import { ContainerRequestResource } from "models/container-request";
import { OutputDetails, NodeInstanceType } from "store/process-panel/process-panel";
import { NotFoundView } from 'views/not-found-panel/not-found-panel';
-import { CollectionFile } from 'models/collection-file';
type CssRules = "root";
<MPVPanelContent
forwardProps
xs="auto"
+ maxHeight={"50%"}
data-cy="process-cmd">
<ProcessCmdCard
onCopy={props.onCopyToClipboard}
Typography,
Grid,
Link,
- Button
} from '@material-ui/core';
import { ArvadosTheme } from 'common/custom-theme';
import {
import React from 'react';
import { Field } from 'redux-form';
import { memoize } from 'lodash/fp';
-import { require } from 'validators/require';
+import { fieldRequire } from 'validators/require';
import { Select, MenuItem } from '@material-ui/core';
import { EnumCommandInputParameter, CommandInputEnumSchema, isRequiredInput, getEnumType } from 'models/workflow';
import { GenericInputProps, GenericInput } from './generic-input';
const getValidation = memoize(
(input: EnumCommandInputParameter) => ([
isRequiredInput(input)
- ? require
+ ? fieldRequire
: () => undefined,
]));
export type ProjectCommandInputParameter = GenericCommandInputParameter<ProjectResource, ProjectResource>;
-const require: any = (value?: ProjectResource) => (value === undefined);
+const isUndefined: any = (value?: ProjectResource) => (value === undefined);
export interface ProjectInputProps {
required: boolean;
commandInput={input}
component={ProjectInputComponent as any}
format={format}
- validate={required ? require : undefined}
+ validate={required ? isUndefined : undefined}
{...{
options,
required
import { memoize } from 'lodash/fp';
import { isRequiredInput, StringCommandInputParameter } from 'models/workflow';
import { Field } from 'redux-form';
-import { require } from 'validators/require';
+import { fieldRequire } from 'validators/require';
import { GenericInputProps, GenericInput } from 'views/run-process-panel/inputs/generic-input';
import { Input as MaterialInput } from '@material-ui/core';
const getValidation = memoize(
(input: StringCommandInputParameter) => ([
isRequiredInput(input)
- ? require
+ ? fieldRequire
: () => undefined,
]));
setItemPath(tmpPath);
}
})();
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, [selectedItem]);
const onItemClick = useCallback((uuid) => {
setSelectedItem(uuid);
props.onItemClick(uuid);
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, [props.onItemClick]);
return <span data-cy='search-results' className={props.classes.searchResults}>
import { navigateTo } from "store/navigation/navigation-action";
import { loadDetailsPanel } from "store/details-panel/details-panel-action";
import { toggleTrashed } from "store/trash/trash-actions";
-import { ContextMenuKind } from "views-components/context-menu/context-menu";
+import { ContextMenuKind } from 'views-components/context-menu/menu-item-sort';
import { Dispatch } from "redux";
import { createTree } from 'models/tree';
import {
{virtualMachineSendRequest(props)}
</div>
<div className={props.classes.icon}>
- <a href="https://doc.arvados.org/user/getting_started/vm-login-with-webshell.html" target="_blank" rel="noopener" className={props.classes.linkIcon}>
+ <a href="https://doc.arvados.org/user/getting_started/vm-login-with-webshell.html" target="_blank" rel="noopener noreferrer" className={props.classes.linkIcon}>
<Tooltip title="Access VM using webshell">
<HelpIcon />
</Tooltip>
</TableCell>
<TableCell>
{command}
- <Tooltip title="Copy to clipboard">
+ <Tooltip title="Copy link to clipboard">
<span className={props.classes.copyIcon}>
<CopyToClipboard text={command || ""} onCopy={() => props.onCopy!("Copied")}>
<CopyIcon />
useEffect(()=>{
if (isTransitioning) applyCollapsedState(savedWidth);
- // eslint-disable-next-line react-hooks/exhaustive-deps
+ // eslint-disable-next-line react-hooks/exhaustive-deps
}, [isTransitioning, savedWidth])
applyCollapsedState(savedWidth);
],
"sourceMap": true,
"allowJs": true,
- "jsx": "preserve",
+ "jsx": "react-jsx",
"moduleResolution": "node",
"rootDir": "src",
"baseUrl": "src",
"alwaysStrict": false,
"strictFunctionTypes": false,
"strictPropertyInitialization": false,
+ "noFallthroughCasesInSwitch": false
},
"exclude": [
"node_modules",
version: 6
cacheKey: 8
-"@babel/code-frame@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/code-frame@npm:7.8.3"
+"@aashutoshrathi/word-wrap@npm:^1.2.3":
+ version: 1.2.6
+ resolution: "@aashutoshrathi/word-wrap@npm:1.2.6"
+ checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd
+ languageName: node
+ linkType: hard
+
+"@ampproject/remapping@npm:^2.2.0":
+ version: 2.3.0
+ resolution: "@ampproject/remapping@npm:2.3.0"
+ dependencies:
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0
+ languageName: node
+ linkType: hard
+
+"@babel/code-frame@npm:7.10.4":
+ version: 7.10.4
+ resolution: "@babel/code-frame@npm:7.10.4"
+ dependencies:
+ "@babel/highlight": ^7.10.4
+ checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019
+ languageName: node
+ linkType: hard
+
+"@babel/code-frame@npm:7.12.11":
+ version: 7.12.11
+ resolution: "@babel/code-frame@npm:7.12.11"
dependencies:
- "@babel/highlight": ^7.8.3
- checksum: 5f3172b0c8d5db625fb88c9f6ab909cb164645152176dfa14c927c19c0774c41fa9ba494cb19cb5d152a414bd6732c41eae708f9f635e02a4ed0889ac239fe4c
+ "@babel/highlight": ^7.10.4
+ checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.14.5, @babel/code-frame@npm:^7.8.3":
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/code-frame@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.14.5, @babel/compat-data@npm:^7.14.7, @babel/compat-data@npm:^7.9.0":
+"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.5.5":
+ version: 7.24.2
+ resolution: "@babel/code-frame@npm:7.24.2"
+ dependencies:
+ "@babel/highlight": ^7.24.2
+ picocolors: ^1.0.0
+ checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8
+ languageName: node
+ linkType: hard
+
+"@babel/compat-data@npm:^7.14.5":
version: 7.14.7
resolution: "@babel/compat-data@npm:7.14.7"
checksum: dcf7a72cb650206857a98cce1ab0973e67689f19afc3b30cabff6dbddf563f188d54d3b3f92a70c6bc1feb9049d8b2e601540e1d435b6866c77bffad0a441c9f
languageName: node
linkType: hard
-"@babel/core@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/core@npm:7.9.0"
+"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5, @babel/compat-data@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/compat-data@npm:7.24.4"
+ checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4
+ languageName: node
+ linkType: hard
+
+"@babel/core@npm:7.12.3":
+ version: 7.12.3
+ resolution: "@babel/core@npm:7.12.3"
dependencies:
- "@babel/code-frame": ^7.8.3
- "@babel/generator": ^7.9.0
- "@babel/helper-module-transforms": ^7.9.0
- "@babel/helpers": ^7.9.0
- "@babel/parser": ^7.9.0
- "@babel/template": ^7.8.6
- "@babel/traverse": ^7.9.0
- "@babel/types": ^7.9.0
+ "@babel/code-frame": ^7.10.4
+ "@babel/generator": ^7.12.1
+ "@babel/helper-module-transforms": ^7.12.1
+ "@babel/helpers": ^7.12.1
+ "@babel/parser": ^7.12.3
+ "@babel/template": ^7.10.4
+ "@babel/traverse": ^7.12.1
+ "@babel/types": ^7.12.1
convert-source-map: ^1.7.0
debug: ^4.1.0
gensync: ^1.0.0-beta.1
json5: ^2.1.2
- lodash: ^4.17.13
+ lodash: ^4.17.19
resolve: ^1.3.2
semver: ^5.4.1
source-map: ^0.5.0
- checksum: 0886b35c9cda80628bc61e47172c79d51ab1d1e693f95c037df371bf0a84ca5cd72c0183fb3d01f47c59395d7805d2e79d46660488d73b9966db5fb726ad561c
+ checksum: 29ee14dd7ae66c1af84d1b2864e1e9e1bec23b89f41e414917b10151ae1fcb6d3b6a8a25d028a7e22dba3bb7b69eb1f7f0d844797341357e36fa71ff967fb4a5
languageName: node
linkType: hard
-"@babel/core@npm:^7.1.0, @babel/core@npm:^7.4.5":
+"@babel/core@npm:^7.0.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.16.0, @babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4, @babel/core@npm:^7.9.0":
+ version: 7.24.4
+ resolution: "@babel/core@npm:7.24.4"
+ dependencies:
+ "@ampproject/remapping": ^2.2.0
+ "@babel/code-frame": ^7.24.2
+ "@babel/generator": ^7.24.4
+ "@babel/helper-compilation-targets": ^7.23.6
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helpers": ^7.24.4
+ "@babel/parser": ^7.24.4
+ "@babel/template": ^7.24.0
+ "@babel/traverse": ^7.24.1
+ "@babel/types": ^7.24.0
+ convert-source-map: ^2.0.0
+ debug: ^4.1.0
+ gensync: ^1.0.0-beta.2
+ json5: ^2.2.3
+ semver: ^6.3.1
+ checksum: 15ecad7581f3329995956ba461961b1af7bed48901f14fe962ccd3217edca60049e9e6ad4ce48134618397e6c90230168c842e2c28e47ef1f16c97dbbf663c61
+ languageName: node
+ linkType: hard
+
+"@babel/core@npm:^7.1.0":
version: 7.14.6
resolution: "@babel/core@npm:7.14.6"
dependencies:
languageName: node
linkType: hard
-"@babel/generator@npm:^7.14.5, @babel/generator@npm:^7.4.0, @babel/generator@npm:^7.9.0":
+"@babel/generator@npm:^7.12.1, @babel/generator@npm:^7.24.1, @babel/generator@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/generator@npm:7.24.4"
+ dependencies:
+ "@babel/types": ^7.24.0
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ jsesc: ^2.5.1
+ checksum: 1b6146c31386c9df3eb594a2c36b5c98da4f67f7c06edb3d68a442b92516b21bb5ba3ad7dbe0058fe76625ed24d66923e15c95b0df75ef1907d4068921a699b8
+ languageName: node
+ linkType: hard
+
+"@babel/generator@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/generator@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/helper-annotate-as-pure@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-annotate-as-pure@npm:7.14.5"
+"@babel/helper-annotate-as-pure@npm:^7.18.6, @babel/helper-annotate-as-pure@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/helper-annotate-as-pure@npm:7.22.5"
dependencies:
- "@babel/types": ^7.14.5
- checksum: 18cefedda60003c2551dabe0e4ad278ef0507682680892c60e9f7cb75ae1dc9a065cddb3ce9964da76f220bf972af5262619eeac4b84c2b8aba1b031961215cc
+ "@babel/types": ^7.22.5
+ checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d
languageName: node
linkType: hard
-"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.14.5"
+"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15":
+ version: 7.22.15
+ resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15"
dependencies:
- "@babel/helper-explode-assignable-expression": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: 0d3571edff0a96d625503a3fd79643f66f8a5204e75c4351276c0d194240e1debe322a70ef9ff47952bd77ac76792f42d732922b00b5bd8b6e2c99909dc4f49b
+ "@babel/types": ^7.22.15
+ checksum: 639c697a1c729f9fafa2dd4c9af2e18568190299b5907bd4c2d0bc818fcbd1e83ffeecc2af24327a7faa7ac4c34edd9d7940510a5e66296c19bad17001cf5c7a
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.14.5, @babel/helper-compilation-targets@npm:^7.8.7":
+"@babel/helper-compilation-targets@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-compilation-targets@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/helper-create-class-features-plugin@npm:^7.14.5, @babel/helper-create-class-features-plugin@npm:^7.14.6, @babel/helper-create-class-features-plugin@npm:^7.8.3":
- version: 7.14.6
- resolution: "@babel/helper-create-class-features-plugin@npm:7.14.6"
+"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.23.6":
+ version: 7.23.6
+ resolution: "@babel/helper-compilation-targets@npm:7.23.6"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-member-expression-to-functions": ^7.14.5
- "@babel/helper-optimise-call-expression": ^7.14.5
- "@babel/helper-replace-supers": ^7.14.5
- "@babel/helper-split-export-declaration": ^7.14.5
+ "@babel/compat-data": ^7.23.5
+ "@babel/helper-validator-option": ^7.23.5
+ browserslist: ^4.22.2
+ lru-cache: ^5.1.1
+ semver: ^6.3.1
+ checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590
+ languageName: node
+ linkType: hard
+
+"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.24.4"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-member-expression-to-functions": ^7.23.0
+ "@babel/helper-optimise-call-expression": ^7.22.5
+ "@babel/helper-replace-supers": ^7.24.1
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 9d9c3c6f469bc5da4e5819979d0f70bf8a824967661743800741b5560cfa3cf811d52ab14dc00dd6e839814f8db39cf3118c08d550c487680969c40c9ccf2e2a
+ checksum: 75b0a51ae1f7232932559779b78711c271404d02d069156d1bd9a7982c165c5134058d2ec2d8b5f2e42026ee4f52ba2a30c86a7aa3bce6b5fd0991eb721abc8c
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.14.5"
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5":
+ version: 7.22.15
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- regexpu-core: ^4.7.1
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ regexpu-core: ^5.3.1
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: c2636d0a6ea6d57eb3603ba9b223fd6ec273a3d8171eb8d84a357ff028cd747ab383b1d7cef84a4df5f9aebb321d43599895f562f3c8aa96314d4847aa59710e
+ checksum: 0243b8d4854f1dc8861b1029a46d3f6393ad72f366a5a08e36a4648aa682044f06da4c6e87a456260e1e1b33c999f898ba591a0760842c1387bcc93fbf2151a6
languageName: node
linkType: hard
-"@babel/helper-define-polyfill-provider@npm:^0.2.2":
- version: 0.2.3
- resolution: "@babel/helper-define-polyfill-provider@npm:0.2.3"
+"@babel/helper-define-polyfill-provider@npm:^0.6.1":
+ version: 0.6.1
+ resolution: "@babel/helper-define-polyfill-provider@npm:0.6.1"
dependencies:
- "@babel/helper-compilation-targets": ^7.13.0
- "@babel/helper-module-imports": ^7.12.13
- "@babel/helper-plugin-utils": ^7.13.0
- "@babel/traverse": ^7.13.0
+ "@babel/helper-compilation-targets": ^7.22.6
+ "@babel/helper-plugin-utils": ^7.22.5
debug: ^4.1.1
lodash.debounce: ^4.0.8
resolve: ^1.14.2
- semver: ^6.1.2
peerDependencies:
- "@babel/core": ^7.4.0-0
- checksum: 797699fe870e45bdbc7c4128963427f7d6240609b700b3f2c0a2f2f187e5f848ba704bcfe58d7d91796cabc5001fae01746b3efda113beb5b5b824927cf59fdb
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: b45deb37ce1342d862422e81a3d25ff55f9c7ca52fe303405641e2add8db754091aaaa2119047a0f0b85072221fbddaa92adf53104274661d2795783b56bea2c
languageName: node
linkType: hard
-"@babel/helper-explode-assignable-expression@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-explode-assignable-expression@npm:7.14.5"
+"@babel/helper-environment-visitor@npm:^7.22.20":
+ version: 7.22.20
+ resolution: "@babel/helper-environment-visitor@npm:7.22.20"
+ checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69
+ languageName: node
+ linkType: hard
+
+"@babel/helper-function-name@npm:^7.22.5, @babel/helper-function-name@npm:^7.23.0":
+ version: 7.23.0
+ resolution: "@babel/helper-function-name@npm:7.23.0"
dependencies:
- "@babel/types": ^7.14.5
- checksum: f3b34c54ad26e48e1409f21aaac8ee5b5fa3bd2917ce4df496f57daec12b6132b2d5c2618da807458e97bc2d7894c5bf505cc96789e0c289dcc9948d7844bb03
+ "@babel/template": ^7.22.15
+ "@babel/types": ^7.23.0
+ checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10
languageName: node
linkType: hard
-"@babel/helper-function-name@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-function-name@npm:7.14.5"
+"@babel/helper-hoist-variables@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/helper-hoist-variables@npm:7.22.5"
dependencies:
- "@babel/helper-get-function-arity": ^7.14.5
- "@babel/template": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: fd8ffa82f7622b6e9a6294fb3b98b42e743ab2a8e3c329367667a960b5b98b48bc5ebf8be7308981f1985b9f3c69e1a3b4a91c8944ae97c31803240da92fb3c8
+ "@babel/types": ^7.22.5
+ checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc
languageName: node
linkType: hard
-"@babel/helper-get-function-arity@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-get-function-arity@npm:7.14.5"
+"@babel/helper-member-expression-to-functions@npm:^7.14.5":
+ version: 7.14.7
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.14.7"
dependencies:
"@babel/types": ^7.14.5
- checksum: a60779918b677a35e177bb4f46babfd54e9790587b6a4f076092a9eff2a940cbeacdeb10c94331b26abfe838769554d72293d16df897246cfccd1444e5e27cb7
+ checksum: 1768b849224002d7a8553226ad73e1e957fb6184b68234d5df7a45cf8e4453ed1208967c1cace1a4d973b223ddc881d105e372945ec688f09485dff0e8ed6180
languageName: node
linkType: hard
-"@babel/helper-hoist-variables@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-hoist-variables@npm:7.14.5"
+"@babel/helper-member-expression-to-functions@npm:^7.23.0":
+ version: 7.23.0
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0"
dependencies:
- "@babel/types": ^7.14.5
- checksum: 35af58eebffca10988de7003e044ce2d27212aea72ac6d2c4604137da7f1e193cc694d8d60805d0d0beaf3d990f6f2dcc2622c52e3d3148e37017a29cacf2e56
+ "@babel/types": ^7.23.0
+ checksum: 494659361370c979ada711ca685e2efe9460683c36db1b283b446122596602c901e291e09f2f980ecedfe6e0f2bd5386cb59768285446530df10c14df1024e75
languageName: node
linkType: hard
-"@babel/helper-member-expression-to-functions@npm:^7.14.5":
- version: 7.14.7
- resolution: "@babel/helper-member-expression-to-functions@npm:7.14.7"
+"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3":
+ version: 7.24.3
+ resolution: "@babel/helper-module-imports@npm:7.24.3"
dependencies:
- "@babel/types": ^7.14.5
- checksum: 1768b849224002d7a8553226ad73e1e957fb6184b68234d5df7a45cf8e4453ed1208967c1cace1a4d973b223ddc881d105e372945ec688f09485dff0e8ed6180
+ "@babel/types": ^7.24.0
+ checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.8.3":
+"@babel/helper-module-imports@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-module-imports@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.14.5, @babel/helper-module-transforms@npm:^7.9.0":
+"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/helper-module-transforms@npm:7.23.3"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-module-imports": ^7.22.15
+ "@babel/helper-simple-access": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/helper-validator-identifier": ^7.22.20
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 5d0895cfba0e16ae16f3aa92fee108517023ad89a855289c4eb1d46f7aef4519adf8e6f971e1d55ac20c5461610e17213f1144097a8f932e768a9132e2278d71
+ languageName: node
+ linkType: hard
+
+"@babel/helper-module-transforms@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-module-transforms@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+"@babel/helper-optimise-call-expression@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/helper-optimise-call-expression@npm:7.22.5"
+ dependencies:
+ "@babel/types": ^7.22.5
+ checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c
+ languageName: node
+ linkType: hard
+
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.14.5
resolution: "@babel/helper-plugin-utils@npm:7.14.5"
checksum: fe20e90a24d02770a60ebe80ab9f0dfd7258503cea8006c71709ac9af1aa3e47b0de569499673f11ea6c99597f8c0e4880ae1d505986e61101b69716820972fe
languageName: node
linkType: hard
-"@babel/helper-remap-async-to-generator@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-remap-async-to-generator@npm:7.14.5"
+"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0":
+ version: 7.24.0
+ resolution: "@babel/helper-plugin-utils@npm:7.24.0"
+ checksum: e2baa0eede34d2fa2265947042aa84d444aa48dc51e9feedea55b67fc1bc3ab051387e18b33ca7748285a6061390831ab82f8a2c767d08470b93500ec727e9b9
+ languageName: node
+ linkType: hard
+
+"@babel/helper-remap-async-to-generator@npm:^7.22.20":
+ version: 7.22.20
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-wrap-function": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: 022594a15caed0d3bbac52e27eef0f20f9dceb85921b682df55f3bb21dee6fea645b03663e84fdfaadc6b88f4b83b012858520813c15e88728bbc5e16bf3fa29
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-wrap-function": ^7.22.20
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 2fe6300a6f1b58211dffa0aed1b45d4958506d096543663dba83bd9251fe8d670fa909143a65b45e72acb49e7e20fbdb73eae315d9ddaced467948c3329986e7
languageName: node
linkType: hard
languageName: node
linkType: hard
+"@babel/helper-replace-supers@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/helper-replace-supers@npm:7.24.1"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-member-expression-to-functions": ^7.23.0
+ "@babel/helper-optimise-call-expression": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: c04182c34a3195c6396de2f2945f86cb60daa94ca7392db09bd8b0d4e7a15b02fbe1947c70f6062c87eadaea6d7135207129efa35cf458ea0987bab8c0f02d5a
+ languageName: node
+ linkType: hard
+
"@babel/helper-simple-access@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-simple-access@npm:7.14.5"
languageName: node
linkType: hard
-"@babel/helper-skip-transparent-expression-wrappers@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.14.5"
+"@babel/helper-simple-access@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/helper-simple-access@npm:7.22.5"
dependencies:
- "@babel/types": ^7.14.5
- checksum: d16937eb08d57d2577902fa6d05ac4b1695602babd9dff9890fa8e56b593fdc997ad24de13fdaf15617036bfacf3493ea569898a5ac0538c2a831aa163f18985
+ "@babel/types": ^7.22.5
+ checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2
+ languageName: node
+ linkType: hard
+
+"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5"
+ dependencies:
+ "@babel/types": ^7.22.5
+ checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244
languageName: node
linkType: hard
languageName: node
linkType: hard
+"@babel/helper-split-export-declaration@npm:^7.22.6":
+ version: 7.22.6
+ resolution: "@babel/helper-split-export-declaration@npm:7.22.6"
+ dependencies:
+ "@babel/types": ^7.22.5
+ checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921
+ languageName: node
+ linkType: hard
+
+"@babel/helper-string-parser@npm:^7.23.4":
+ version: 7.24.1
+ resolution: "@babel/helper-string-parser@npm:7.24.1"
+ checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-identifier@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-validator-identifier@npm:7.14.5"
languageName: node
linkType: hard
+"@babel/helper-validator-identifier@npm:^7.22.20":
+ version: 7.22.20
+ resolution: "@babel/helper-validator-identifier@npm:7.22.20"
+ checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-option@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/helper-validator-option@npm:7.14.5"
languageName: node
linkType: hard
-"@babel/helper-wrap-function@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/helper-wrap-function@npm:7.14.5"
+"@babel/helper-validator-option@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/helper-validator-option@npm:7.23.5"
+ checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e
+ languageName: node
+ linkType: hard
+
+"@babel/helper-wrap-function@npm:^7.22.20":
+ version: 7.22.20
+ resolution: "@babel/helper-wrap-function@npm:7.22.20"
dependencies:
- "@babel/helper-function-name": ^7.14.5
- "@babel/template": ^7.14.5
- "@babel/traverse": ^7.14.5
- "@babel/types": ^7.14.5
- checksum: d5c4bec02396f00d305ae2b60cfa5f3ec27d196a71b88107745b6be4fe257ebe54deedb6ee3997c8c9a2cc5c2571d567c22e9b866109490a2aa7f79a1a2272e2
+ "@babel/helper-function-name": ^7.22.5
+ "@babel/template": ^7.22.15
+ "@babel/types": ^7.22.19
+ checksum: 221ed9b5572612aeb571e4ce6a256f2dee85b3c9536f1dd5e611b0255e5f59a3d0ec392d8d46d4152149156a8109f92f20379b1d6d36abb613176e0e33f05fca
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.14.6, @babel/helpers@npm:^7.9.0":
+"@babel/helpers@npm:^7.12.1, @babel/helpers@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/helpers@npm:7.24.4"
+ dependencies:
+ "@babel/template": ^7.24.0
+ "@babel/traverse": ^7.24.1
+ "@babel/types": ^7.24.0
+ checksum: ecd2dc0b3b32e24b97fa3bcda432dd3235b77c2be1e16eafc35b8ef8f6c461faa99796a8bc2431a408c98b4aabfd572c160e2b67ecea4c5c9dd3a8314a97994a
+ languageName: node
+ linkType: hard
+
+"@babel/helpers@npm:^7.14.6":
version: 7.14.6
resolution: "@babel/helpers@npm:7.14.6"
dependencies:
languageName: node
linkType: hard
-"@babel/highlight@npm:^7.14.5, @babel/highlight@npm:^7.8.3":
+"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.24.2":
+ version: 7.24.2
+ resolution: "@babel/highlight@npm:7.24.2"
+ dependencies:
+ "@babel/helper-validator-identifier": ^7.22.20
+ chalk: ^2.4.2
+ js-tokens: ^4.0.0
+ picocolors: ^1.0.0
+ checksum: 5f17b131cc3ebf3ab285a62cf98a404aef1bd71a6be045e748f8d5bf66d6a6e1aefd62f5972c84369472e8d9f22a614c58a89cd331eb60b7ba965b31b1bbeaf5
+ languageName: node
+ linkType: hard
+
+"@babel/highlight@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/highlight@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.5, @babel/parser@npm:^7.14.6, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.4.3, @babel/parser@npm:^7.7.0, @babel/parser@npm:^7.9.0":
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.5, @babel/parser@npm:^7.14.6, @babel/parser@npm:^7.7.0":
version: 7.14.7
resolution: "@babel/parser@npm:7.14.7"
bin:
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
- "@babel/plugin-proposal-optional-chaining": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.13.0
- checksum: 17331fd4c1de860ac78aa3195eb5bd058c4eb24a8f2c6e719f079f9c86cbdb53d9a8affc2f9f78b6fc257afef03811922c2d16addad5d5f6224d2820da1c9f45
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-async-generator-functions@npm:^7.14.7, @babel/plugin-proposal-async-generator-functions@npm:^7.8.3":
- version: 7.14.7
- resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.14.7"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-remap-async-to-generator": ^7.14.5
- "@babel/plugin-syntax-async-generators": ^7.8.4
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 09343a79385615f8d5f95aaef7c44af5e899c82f030f3d73546c2ffffa567c0949f0405052d7e32f643c0eb2a23590a5050f4606855b3506246d3d60e46f32e3
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-class-properties@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-proposal-class-properties@npm:7.8.3"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.8.3
- "@babel/helper-plugin-utils": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 5ac3435b0393b09162234f8e4c56c6321f038d205af447563f8389e7ed447904c4cdedf958e6a5ed092692fcc2eff980913efff19589c0969dd9846be4710867
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-class-properties@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-class-properties@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: fe2aa0a44f8ea121e10c856d6fb4fca418dc42451258ef6ed29321ca740080fba420ebd3d6700d0456c34c2ab2044f9ce4308498321f52a93184ff5adb015aae
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-class-static-block@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-class-static-block@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-class-static-block": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.12.0
- checksum: 0275d0643dacd08638c2d3c129158ad0c2dea6a26e78fa4b2129811a29460ff9a6459d1955a19bfa3b9ed67ba2bb3c88676823ad207b2de4f0c65e0c3751d75c
+"@babel/parser@npm:^7.12.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1, @babel/parser@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/parser@npm:7.24.4"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: 94c9e3e592894cd6fc57c519f4e06b65463df9be5f01739bb0d0bfce7ffcf99b3c2fdadd44dc59cc858ba2739ce6e469813a941c2f2dfacf333a3b2c9c5c8465
languageName: node
linkType: hard
-"@babel/plugin-proposal-decorators@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-proposal-decorators@npm:7.8.3"
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.4"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.8.3
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-syntax-decorators": ^7.8.3
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: f9aa852dd77657d29c19b16bc3a7d8c30e5964a9aa8eb541bf440f34659693631793d4c798c92e344e767c9ccc43baae9e595d86e589bfa4bb157fc07a5e0c05
+ "@babel/core": ^7.0.0
+ checksum: 0be3f41b1b865d7a4ed1a432337be48de67989d0b4e47def34a05097a804b6fc193115f97c954fd757339e0b80030ecf1d0a3d3fd6e7e91718644de0a5aae3d3
languageName: node
linkType: hard
-"@babel/plugin-proposal-dynamic-import@npm:^7.14.5, @babel/plugin-proposal-dynamic-import@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-dynamic-import@npm:7.14.5"
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-dynamic-import": ^7.8.3
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 47be4b5f8824f8690b47d99a34d52de0e6c19d0b99f26c1f9a2e4cc49e05082bcef7248c610bb3830ae84cec928713c7774f4929fca4fa72df570df7a76a9d2b
+ "@babel/core": ^7.0.0
+ checksum: ec5fddc8db6de0e0082a883f21141d6f4f9f9f0bc190d662a732b5e9a506aae5d7d2337049a1bf055d7cb7add6f128036db6d4f47de5e9ac1be29e043c8b7ca8
languageName: node
linkType: hard
-"@babel/plugin-proposal-export-namespace-from@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.14.5"
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-export-namespace-from": ^7.8.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/plugin-transform-optional-chaining": ^7.24.1
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: b3f4e0cc196f7ad9132816bb350124e8932bc047ab946e431f85bae9649b0de384c54261a60c050a2b8220703408fc089f90349ad008ed69a70944a6f3048d0e
+ "@babel/core": ^7.13.0
+ checksum: e18235463e716ac2443938aaec3c18b40c417a1746fba0fa4c26cf4d71326b76ef26c002081ab1b445abfae98e063d561519aa55672dddc1ef80b3940211ffbb
languageName: node
linkType: hard
-"@babel/plugin-proposal-json-strings@npm:^7.14.5, @babel/plugin-proposal-json-strings@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-json-strings@npm:7.14.5"
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-json-strings": ^7.8.3
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 51dafe70237860569c9c27dc6a0db83e149bf7babb0fcafa9dbcd55a960b443f7b5bb695956c6e116e46b3dbd2a6777ead62bcad843aff8c1916c1be56e2f504
+ "@babel/core": ^7.0.0
+ checksum: b5e5889ce5ef51e813e3063cd548f55eb3c88e925c3c08913f334e15d62496861e538ae52a3974e0c56a3044ed8fd5033faea67a64814324af56edc9865b7359
languageName: node
linkType: hard
-"@babel/plugin-proposal-logical-assignment-operators@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.14.5"
+"@babel/plugin-proposal-class-properties@npm:^7.16.0":
+ version: 7.18.6
+ resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
+ "@babel/helper-create-class-features-plugin": ^7.18.6
+ "@babel/helper-plugin-utils": ^7.18.6
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 08b6dbc991c4824b0d8bfabf46c8254fce02d2df04627b8849cf15a4b6de75629c10c7c83d1e6834cdcebfc98b16264ce2dd32aa9c0fae900ed2af807d5ac42b
+ checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422
languageName: node
linkType: hard
-"@babel/plugin-proposal-nullish-coalescing-operator@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.8.3"
+"@babel/plugin-proposal-decorators@npm:^7.16.4":
+ version: 7.24.1
+ resolution: "@babel/plugin-proposal-decorators@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.0
+ "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-decorators": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 36a87fa8f0ca709f66671ebd1af3f865fd1798e59cbf57f8db71cf69ef15ee8cf21ec54833b34c5e77b8a5a60d5b4e9ae949c00fec8eb320d5bc299bfcc3eae1
+ checksum: b9375c64656bf9ae6d2eeb965c40823e6447f0f4594979d037231884c0f3a92af97172087f35a05e90b8ca0ccb47551b013998e85853c1c634d47b341f4deece
languageName: node
linkType: hard
-"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.14.5, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.14.5"
+"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.0":
+ version: 7.18.6
+ resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.18.6
"@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 033d9483c2feb74928fbb83a73948eb1179c8852d2ae507fbfc37752d2dbf702c9ad0daaf1eaa029f81b12b7e2470061b4f611db88b7293f0e9a71eba288a430
+ checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d
languageName: node
linkType: hard
-"@babel/plugin-proposal-numeric-separator@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-proposal-numeric-separator@npm:7.8.3"
+"@babel/plugin-proposal-numeric-separator@npm:^7.16.0":
+ version: 7.18.6
+ resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6"
dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-syntax-numeric-separator": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: fd2d926e5bba27180e79c7511cb62d423a74690419f97ae1804b4a36632017ab2ef763ce2a84810b7c350a5d3e42a8e263780dadefa4ad6288923a2d13950170
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-numeric-separator@npm:^7.14.5, @babel/plugin-proposal-numeric-separator@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-numeric-separator@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.18.6
"@babel/plugin-syntax-numeric-separator": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 22093297ec9aed3938b39f4efa1b518252fe7b0835902c3066f0ae6a864ac253b986a4a21a6092aa068d0702d7b09bed74e56cf39f2da8b4f3f43e0747bffb62
+ checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec
languageName: node
linkType: hard
-"@babel/plugin-proposal-object-rest-spread@npm:^7.14.7, @babel/plugin-proposal-object-rest-spread@npm:^7.9.0":
- version: 7.14.7
- resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.14.7"
+"@babel/plugin-proposal-optional-chaining@npm:^7.16.0":
+ version: 7.21.0
+ resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0"
dependencies:
- "@babel/compat-data": ^7.14.7
- "@babel/helper-compilation-targets": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-object-rest-spread": ^7.8.3
- "@babel/plugin-transform-parameters": ^7.14.5
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: a35192868166fb5a62003a56ce2c266f74ae680f1d9589652c4495145240dd138a9505301bb5adca069cb874d6f0f733dc2f3d1d05f71a06019735c29c4d1a11
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-optional-catch-binding@npm:^7.14.5, @babel/plugin-proposal-optional-catch-binding@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.14.5"
- dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: f9c1b2b34fef1bde85feeb0b438131f526056161e10b6fb91c74a5828ad39d2a20521b5c3cefc7367a7e5fc792b7c7e607bf278d7999b5d89824c34af3174eae
- languageName: node
- linkType: hard
-
-"@babel/plugin-proposal-optional-chaining@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/plugin-proposal-optional-chaining@npm:7.9.0"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-syntax-optional-chaining": ^7.8.0
+ "@babel/helper-plugin-utils": ^7.20.2
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0
+ "@babel/plugin-syntax-optional-chaining": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: da2d4cbf6fe1b3579c83b83cd6b7deb1fa4f907b53eceed8906cf60b0ed02f3dde01bb891040dea67e316865bb8c890ca3272a422d359d2d0a7826c7250572d3
+ checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746
languageName: node
linkType: hard
-"@babel/plugin-proposal-optional-chaining@npm:^7.14.5, @babel/plugin-proposal-optional-chaining@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-optional-chaining@npm:7.14.5"
+"@babel/plugin-proposal-private-methods@npm:^7.16.0":
+ version: 7.18.6
+ resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
- "@babel/plugin-syntax-optional-chaining": ^7.8.3
+ "@babel/helper-create-class-features-plugin": ^7.18.6
+ "@babel/helper-plugin-utils": ^7.18.6
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 9e39e20d162bea2241b4c24ea8a339f872a04954a5155c606bf2437edaa1a15b8a517daee4b2b09cfd42d826b93c57f080aa9fbb13c60a8f3a7a72963badf2df
+ checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad
languageName: node
linkType: hard
-"@babel/plugin-proposal-private-methods@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-private-methods@npm:7.14.5"
- dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2":
+ version: 7.21.0-placeholder-for-preset-env.2
+ resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: badacc1d68c8cf92a7ba973e3c283bc3aebf586a6573b6d18a96461ce18039d4cdc0135edac1b810df8d92cfca628115d98a0ad83ed8f15bf15eaff21539bf32
+ checksum: d97745d098b835d55033ff3a7fb2b895b9c5295b08a5759e4f20df325aa385a3e0bc9bd5ad8f2ec554a44d4e6525acfc257b8c5848a1345cb40f26a30e277e91
languageName: node
linkType: hard
-"@babel/plugin-proposal-private-property-in-object@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.14.5"
+"@babel/plugin-proposal-private-property-in-object@npm:^7.16.0":
+ version: 7.21.11
+ resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.11"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-create-class-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-annotate-as-pure": ^7.18.6
+ "@babel/helper-create-class-features-plugin": ^7.21.0
+ "@babel/helper-plugin-utils": ^7.20.2
"@babel/plugin-syntax-private-property-in-object": ^7.14.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a11da6a52eb13d6dcb6ed36993a81e9746404f6e83d32be16142911b7e5768293d8c4c5373d182ef25cb94d0b18c0c27a07f4553be042ee2dc49f7179f8cbfe2
+ checksum: 1b880543bc5f525b360b53d97dd30807302bb82615cd42bf931968f59003cac75629563d6b104868db50abd22235b3271fdf679fea5db59a267181a99cc0c265
languageName: node
linkType: hard
-"@babel/plugin-proposal-unicode-property-regex@npm:^7.14.5, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4, @babel/plugin-proposal-unicode-property-regex@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.14.5"
+"@babel/plugin-syntax-async-generators@npm:^7.8.4":
+ version: 7.8.4
+ resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 58bd3277a972a33d101d29ab4f52e964b6e8ec218eb84f764b4ea67bf8ed362909760812d3f7451ee5e54dc273bd81bc5a00cd2c13e8fb64a47ec117cb69d51b
+ checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367
languageName: node
linkType: hard
-"@babel/plugin-syntax-async-generators@npm:^7.8.0, @babel/plugin-syntax-async-generators@npm:^7.8.4":
- version: 7.8.4
- resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
+"@babel/plugin-syntax-bigint@npm:^7.8.3":
+ version: 7.8.3
+ resolution: "@babel/plugin-syntax-bigint@npm:7.8.3"
dependencies:
"@babel/helper-plugin-utils": ^7.8.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367
+ checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648
languageName: node
linkType: hard
-"@babel/plugin-syntax-class-properties@npm:^7.12.13":
+"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3":
version: 7.12.13
resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-decorators@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-decorators@npm:7.14.5"
+"@babel/plugin-syntax-decorators@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-decorators@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7e725deeba3848e8e1b57bc8a74c1a852aa253b9ffd293aa0bc043b93e1e7b669414caae3d20c653d2fab907a9388e526f2138e3783b22e49272098566cf9734
+ checksum: 5933fdb1d8d2c0b4b80621ad65dacd4e1ccd836041557c2ddc4cb4c1f46a347fa72977fc519695a801c9cca8b9aaf90d7895ddd52cb4e510fbef5b9f03cb9568
languageName: node
linkType: hard
-"@babel/plugin-syntax-dynamic-import@npm:^7.8.0, @babel/plugin-syntax-dynamic-import@npm:^7.8.3":
+"@babel/plugin-syntax-dynamic-import@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-flow@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-flow@npm:7.14.5"
+"@babel/plugin-syntax-flow@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-flow@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 87dfe32f3a3ea77941034fb2a39fdfc9ea18a994b8df40c3659a11c8787b2bc5adea029259c4eafc03cd35f11628f6533aa2a06381db7fcbe3b2cc3c2a2bb54f
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-import-assertions@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.24.1"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ba6c81325930283bed75c59f92bd7f5873beb006e35fdb092f62498d1f1ecb90f3eaa3d586400ad48dd6d03c63d2bf59a72998e431bab2bd20b3137bd2b10ac0
+ checksum: 2a463928a63b62052e9fb8f8b0018aa11a926e94f32c168260ae012afe864875c6176c6eb361e13f300542c31316dad791b08a5b8ed92436a3095c7a0e4fce65
languageName: node
linkType: hard
-"@babel/plugin-syntax-json-strings@npm:^7.8.0, @babel/plugin-syntax-json-strings@npm:^7.8.3":
+"@babel/plugin-syntax-import-attributes@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.24.1"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 87c8aa4a5ef931313f956871b27f2c051556f627b97ed21e9a5890ca4906b222d89062a956cde459816f5e0dec185ff128d7243d3fdc389504522acb88f0464e
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3":
+ version: 7.10.4
+ resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.10.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-json-strings@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-jsx@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-jsx@npm:7.14.5"
+"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-jsx@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3a2ba87534b0f9ee70eba0754d2ae544825c25afd98efb8e42b41399e02de4cc5b1f70fc5ce444fb7a7e5b09972c289eed2f00917be5b88d67407f4cbde8e960
+ checksum: 712f7e7918cb679f106769f57cfab0bc99b311032665c428b98f4c3e2e6d567601d45386a4f246df6a80d741e1f94192b3f008800d66c4f1daae3ad825c243f0
languageName: node
linkType: hard
-"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4":
+"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.0, @babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
+"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.0, @babel/plugin-syntax-numeric-separator@npm:^7.8.3":
+"@babel/plugin-syntax-numeric-separator@npm:^7.10.4, @babel/plugin-syntax-numeric-separator@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
+"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.0, @babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
+"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-optional-chaining@npm:^7.8.0, @babel/plugin-syntax-optional-chaining@npm:^7.8.3":
+"@babel/plugin-syntax-optional-chaining@npm:^7.8.3":
version: 7.8.3
resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3"
dependencies:
languageName: node
linkType: hard
-"@babel/plugin-syntax-typescript@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-syntax-typescript@npm:7.14.5"
+"@babel/plugin-syntax-typescript@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-syntax-typescript@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5447d13b31aeeeaa5c2b945e60a598642dedca480f11d3232b0927aeb6a6bb8201a0025f509bc23851da4bf126f69b0522790edbd58f4560f0a4984cabd0d126
+ checksum: bf4bd70788d5456b5f75572e47a2e31435c7c4e43609bd4dffd2cc0c7a6cf90aabcf6cd389e351854de9a64412a07d30effef5373251fe8f6a4c9db0c0163bda
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.14.5, @babel/plugin-transform-arrow-functions@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-arrow-functions@npm:7.14.5"
+"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6":
+ version: 7.18.6
+ resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-create-regexp-features-plugin": ^7.18.6
+ "@babel/helper-plugin-utils": ^7.18.6
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: a651d700fe63ff0ddfd7186f4ebc24447ca734f114433139e3c027bc94a900d013cf1ef2e2db8430425ba542e39ae160c3b05f06b59fd4656273a3df97679e9c
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-arrow-functions@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.1"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 126196ea0107e97f711c0d48d8d1e01a30f5a5e127628f7367658b4c5832182c4e28914294408374690c5bfbb4ad4fe6560068d8bf370cafe8d4fe23599aaa95
+ checksum: 58f9aa9b0de8382f8cfa3f1f1d40b69d98cd2f52340e2391733d0af745fdddda650ba392e509bc056157c880a2f52834a38ab2c5aa5569af8c61bb6ecbf45f34
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:^7.14.5, @babel/plugin-transform-async-to-generator@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-async-to-generator@npm:7.14.5"
+"@babel/plugin-transform-async-generator-functions@npm:^7.24.3":
+ version: 7.24.3
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.24.3"
dependencies:
- "@babel/helper-module-imports": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-remap-async-to-generator": ^7.14.5
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-remap-async-to-generator": ^7.22.20
+ "@babel/plugin-syntax-async-generators": ^7.8.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4c47016c5f65adaa5836054fcc99402f1d295aedd7ebd44e6df128a90977952f2a8abdf3b3d0aa5a9e1186184da538452c4d9a3b1482376759c6962627201da5
+ checksum: 309af02610be65d937664435adb432a32d9b6eb42bb3d3232c377d27fbc57014774d931665a5bfdaff3d1841b72659e0ad7adcef84b709f251cb0b8444f19214
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoped-functions@npm:^7.14.5, @babel/plugin-transform-block-scoped-functions@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.14.5"
+"@babel/plugin-transform-async-to-generator@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-module-imports": ^7.24.1
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-remap-async-to-generator": ^7.22.20
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 9994d9f107308b21be043de115fe1d06956807d93a3039ddab54333d1fbb39ad50cc5f9eccaedf5317f4699230e923662254974f3a974c4f000e986837bc020a
+ checksum: 429004a6596aa5c9e707b604156f49a146f8d029e31a3152b1649c0b56425264fda5fd38e5db1ddaeb33c3fe45c97dc8078d7abfafe3542a979b49f229801135
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.14.5, @babel/plugin-transform-block-scoping@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-block-scoping@npm:7.14.5"
+"@babel/plugin-transform-block-scoped-functions@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d317d636d0475317302e9c8b01cf9214fac3ff9353b23d0d16285f196f5c7b95b7864a8e8eaf51a3e1b650649203855f80a58b7a2caef4b0ee9793e7349a0ec5
+ checksum: d8e18bd57b156da1cd4d3c1780ab9ea03afed56c6824ca8e6e74f67959d7989a0e953ec370fe9b417759314f2eef30c8c437395ce63ada2e26c2f469e4704f82
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.14.5, @babel/plugin-transform-classes@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-classes@npm:7.14.5"
+"@babel/plugin-transform-block-scoping@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.24.4"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-optimise-call-expression": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-replace-supers": ^7.14.5
- "@babel/helper-split-export-declaration": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 5229ffe1c55744b96f791521e2876b01ed05c81df67488a7453ce66c2faceb9d1d653089ce6f0abf512752e15e9acac0e75a797a860f24e05b4d36497c7c3183
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-class-properties@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-class-properties@npm:7.24.1"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 95779e9eef0c0638b9631c297d48aee53ffdbb2b1b5221bf40d7eccd566a8e34f859ff3571f8f20b9159b67f1bff7d7dc81da191c15d69fbae5a645197eae7e0
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-class-static-block@npm:^7.24.4":
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.24.4
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-class-static-block": ^7.14.5
+ peerDependencies:
+ "@babel/core": ^7.12.0
+ checksum: 3b1db3308b57ba21d47772a9f183804234c23fd64c9ca40915d2d65c5dc7a48b49a6de16b8b90b7a354eacbb51232a862f0fca3dbd23e27d34641f511decddab
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-classes@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-classes@npm:7.24.1"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.23.6
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-replace-supers": ^7.24.1
+ "@babel/helper-split-export-declaration": ^7.22.6
globals: ^11.1.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 42fc333a0d8a6a90b5c75e90d2ec21494f711ab7c58f2d074d95726cdd38f137e74653602a82d2d1a3e9bc504b5eff62418d70048514b672c9bd108bfb866e25
+ checksum: e5337e707d731c9f4dcc107d09c9a99b90786bc0da6a250165919587ed818818f6cae2bbcceea880abef975c0411715c0c7f3f361ecd1526bf2eaca5ad26bb00
languageName: node
linkType: hard
-"@babel/plugin-transform-computed-properties@npm:^7.14.5, @babel/plugin-transform-computed-properties@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-computed-properties@npm:7.14.5"
+"@babel/plugin-transform-computed-properties@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/template": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 87bd4c46255359ab8d53d0e9b5aa5e1ef218c1447874bd8c2eff759d3a2b5fe6b3ec55046babe0087f7e3890f6167524c729737e912080ea1c9758a559765130
+ checksum: f2832bcf100a70f348facbb395873318ef5b9ee4b0fb4104a420d9daaeb6003cc2ecc12fd8083dd2e4a7c2da873272ad73ff94de4497125a0cf473294ef9664e
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.14.7, @babel/plugin-transform-destructuring@npm:^7.8.3":
- version: 7.14.7
- resolution: "@babel/plugin-transform-destructuring@npm:7.14.7"
+"@babel/plugin-transform-destructuring@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-destructuring@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 0b0cf8ed9fb92c53e3888c17402c4f1e8f329f05a759829b559df883b19b442d3950b7f319df419d0cff122ea76fc8b3b55779fdbb9e394e5f058419a8d5ba14
+ checksum: 994fd3c513e40b8f1bdfdd7104ebdcef7c6a11a4e380086074496f586db3ac04cba0ae70babb820df6363b6700747b0556f6860783e046ace7c741a22f49ec5b
languageName: node
linkType: hard
-"@babel/plugin-transform-dotall-regex@npm:^7.14.5, @babel/plugin-transform-dotall-regex@npm:^7.4.4, @babel/plugin-transform-dotall-regex@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-dotall-regex@npm:7.14.5"
+"@babel/plugin-transform-dotall-regex@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4da3dac9580823c1fe8aaedf6109d3a26d17ad7ef7d1b278ddbcd7c148e02c465cf49250794529a34bac0bda6b53db558ae08d185a96b76efaaa17a5da3911df
+ checksum: 7f623d25b6f213b94ebc1754e9e31c1077c8e288626d8b7bfa76a97b067ce80ddcd0ede402a546706c65002c0ccf45cd5ec621511c2668eed31ebcabe8391d35
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-keys@npm:^7.14.5, @babel/plugin-transform-duplicate-keys@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-duplicate-keys@npm:7.14.5"
+"@babel/plugin-transform-duplicate-keys@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c6c951d2f7ed528a8103d08293d4aaf95efa38c697e7b2b27b7e6c9780280484373e2f7ef8d77daf17dffdc86748fbf75e776e0542b1c7b17e29308bc31ebd8c
+ checksum: a3b07c07cee441e185858a9bb9739bb72643173c18bf5f9f949dd2d4784ca124e56b01d0a270790fb1ff0cf75d436075db0a2b643fb4285ff9a21df9e8dc6284
languageName: node
linkType: hard
-"@babel/plugin-transform-exponentiation-operator@npm:^7.14.5, @babel/plugin-transform-exponentiation-operator@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.14.5"
+"@babel/plugin-transform-dynamic-import@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1"
dependencies:
- "@babel/helper-builder-binary-assignment-operator-visitor": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-dynamic-import": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7588a582d0bc5c80fda7f1c631354a35a9a7d284dd80ccaf2bbfd086a39a9d6461718dc7dd45a3ca59228593270a7c6a907a9cbe7ddc349d80c7342af0263c5c
+ checksum: 59fc561ee40b1a69f969c12c6c5fac206226d6642213985a569dd0f99f8e41c0f4eaedebd36936c255444a8335079842274c42a975a433beadb436d4c5abb79b
languageName: node
linkType: hard
-"@babel/plugin-transform-flow-strip-types@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/plugin-transform-flow-strip-types@npm:7.9.0"
+"@babel/plugin-transform-exponentiation-operator@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-syntax-flow": ^7.8.3
+ "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4bc74b721db01e91c6d591f927b53fa509d69d5c49911f31d9202df984cf2eda8397346826647cb660f72676dd3e5a2498187f587e7e181c0ca66b28b1252591
+ checksum: f90841fe1a1e9f680b4209121d3e2992f923e85efcd322b26e5901c180ef44ff727fb89790803a23fac49af34c1ce2e480018027c22b4573b615512ac5b6fc50
languageName: node
linkType: hard
-"@babel/plugin-transform-for-of@npm:^7.14.5, @babel/plugin-transform-for-of@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-for-of@npm:7.14.5"
+"@babel/plugin-transform-export-namespace-from@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-export-namespace-from": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: aeb76eb11d10b2390996001e2fd529bbaf3695edd306d24e4eba87b8137c10a6afda3896017f88fcf40fd2334cc424c0a111fad34e10c747e81e577e5957e328
+ checksum: bc710ac231919df9555331885748385c11c5e695d7271824fe56fba51dd637d48d3e5cd52e1c69f2b1a384fbbb41552572bc1ca3a2285ee29571f002e9bb2421
languageName: node
linkType: hard
-"@babel/plugin-transform-function-name@npm:^7.14.5, @babel/plugin-transform-function-name@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-function-name@npm:7.14.5"
+"@babel/plugin-transform-flow-strip-types@npm:^7.16.0":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1"
dependencies:
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-flow": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3db2fa1bcd21b76a91ce78db8ebca047fdadbf198f816e2621e531a751a0d40976cf2a25262dee9352fd0c53bff5b25fddefadebdbb4ba3da6d89b849ab075b6
+ checksum: 83faac90c934e15a8fe813d90cbfdf8aa2cb2cc9108f55e4a1ecda1c3097735af6a0b6623057f059153b572bc1dd088aeb2ff24217e9de82ad2390ab1210d01b
languageName: node
linkType: hard
-"@babel/plugin-transform-literals@npm:^7.14.5, @babel/plugin-transform-literals@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-literals@npm:7.14.5"
+"@babel/plugin-transform-for-of@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-for-of@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2341cfaaf8ac7199c578407ea4de41205d3d74c5a48899aa96c41b08c09d18c46d9018fdc6a2f69f0bccc2662223afc47b60130ae4ff36a79351fface71a61f3
+ checksum: 990adde96ea1766ed6008c006c7040127bef59066533bb2977b246ea4a596fe450a528d1881a0db5f894deaf1b81654dfb494b19ad405b369be942738aa9c364
languageName: node
linkType: hard
-"@babel/plugin-transform-member-expression-literals@npm:^7.14.5, @babel/plugin-transform-member-expression-literals@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-member-expression-literals@npm:7.14.5"
+"@babel/plugin-transform-function-name@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-function-name@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-compilation-targets": ^7.23.6
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a94ff910e8d0e28effd58c64f2d15c9772ea4c209644f116fd81dc5c93ce232304f42ef14d5ec2baf095c824786698fcf6c1d4c91952dc3762350f4ec0eb1f17
+ checksum: 31eb3c75297dda7265f78eba627c446f2324e30ec0124a645ccc3e9f341254aaa40d6787bd62b2280d77c0a5c9fbfce1da2c200ef7c7f8e0a1b16a8eb3644c6f
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-amd@npm:^7.14.5, @babel/plugin-transform-modules-amd@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-amd@npm:7.14.5"
+"@babel/plugin-transform-json-strings@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-json-strings@npm:7.24.1"
dependencies:
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- babel-plugin-dynamic-import-node: ^2.3.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-json-strings": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 963d9ebb11b282d5c5f462e3e1ad6991e60fb4d190b5a7aa0d9937e0fa83d89cf5f94268f0b0b343576f2cee0cf545bcaf40da40eb8b9dca5c79840fd86a65ed
+ checksum: f42302d42fc81ac00d14e9e5d80405eb80477d7f9039d7208e712d6bcd486a4e3b32fdfa07b5f027d6c773723d8168193ee880f93b0e430c828e45f104fb82a4
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.14.5, @babel/plugin-transform-modules-commonjs@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.14.5"
+"@babel/plugin-transform-literals@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-literals@npm:7.24.1"
dependencies:
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-simple-access": ^7.14.5
- babel-plugin-dynamic-import-node: ^2.3.3
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5cc41ee904e421c32f692ce10985190bc8f995df63ee1fd899ea80ce50b4b8408c7f2fddf16e01345244fc5702c8b9c0772afdd934e325c4e468840daa9bee04
+ checksum: 2df94e9478571852483aca7588419e574d76bde97583e78551c286f498e01321e7dbb1d0ef67bee16e8f950688f79688809cfde370c5c4b84c14d841a3ef217a
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-systemjs@npm:^7.14.5, @babel/plugin-transform-modules-systemjs@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-systemjs@npm:7.14.5"
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1"
dependencies:
- "@babel/helper-hoist-variables": ^7.14.5
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-identifier": ^7.14.5
- babel-plugin-dynamic-import-node: ^2.3.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3ca0bb1c0c22a3d705476186afa9fc86398ae4662afc259ff29c1942e3c8770f4bdadaf67418a21816964d4e1eaf07412eeabccccfaa9d45eac735f971ad148b
+ checksum: 895f2290adf457cbf327428bdb4fb90882a38a22f729bcf0629e8ad66b9b616d2721fbef488ac00411b647489d1dda1d20171bb3772d0796bb7ef5ecf057808a
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-umd@npm:^7.14.5, @babel/plugin-transform-modules-umd@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-modules-umd@npm:7.14.5"
+"@babel/plugin-transform-member-expression-literals@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.1"
dependencies:
- "@babel/helper-module-transforms": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 455ff383bed47e104d4b2b32f11bc5a44a25c797fad26b5eab9b8a81856f9945350b45ad28b9b20b0bbf324832c7a826c9c3d6f865e85c26a1771663132e4145
+ checksum: 4ea641cc14a615f9084e45ad2319f95e2fee01c77ec9789685e7e11a6c286238a426a98f9c1ed91568a047d8ac834393e06e8c82d1ff01764b7aa61bee8e9023
languageName: node
linkType: hard
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.14.7, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.8.3":
- version: 7.14.7
- resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.14.7"
+"@babel/plugin-transform-modules-amd@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.24.1"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 3d777c262f257e93f0405b13e178f9c4a0f31855b409f0191a76bb562a28c541326a027bfe6467fcb74752f3488c0333b5ff2de64feec1b3c4c6ace1747afa03
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-modules-commonjs@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-simple-access": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 11402b34c49f76aa921b43c2d76f3f129a32544a1dc4f0d1e48b310f9036ab75269a6d8684ed0198b7a0b07bd7898b12f0cacceb26fbb167999fd2a819aa0802
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-modules-systemjs@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1"
+ dependencies:
+ "@babel/helper-hoist-variables": ^7.22.5
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-validator-identifier": ^7.22.20
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 903766f6808f04278e887e4adec9b1efa741726279652dad255eaad0f5701df8f8ff0af25eb8541a00eb3c9eae2dccf337b085cfa011426ca33ed1f95d70bf75
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-modules-umd@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 4922f5056d34de6fd59a1ab1c85bc3472afa706c776aceeb886289c9ac9117e6eb8e22d06c537eb5bc0ede6c30f6bd85210bdcc150dc0ae2d2373f8252df9364
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
+ "@babel/helper-create-regexp-features-plugin": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 3c68bc77cce387750ecd32d33e9ad0f0968245fbe03b36ec8dddc52bee3ee84757205db3b3b4fc605e055f08769312ef4dbf4a0c8adb8f02eb04b142ffcdf265
+ checksum: 3ee564ddee620c035b928fdc942c5d17e9c4b98329b76f9cefac65c111135d925eb94ed324064cd7556d4f5123beec79abea1d4b97d1c8a2a5c748887a2eb623
languageName: node
linkType: hard
-"@babel/plugin-transform-new-target@npm:^7.14.5, @babel/plugin-transform-new-target@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-new-target@npm:7.14.5"
+"@babel/plugin-transform-new-target@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-new-target@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5b806c86926cd0b03fa2f22cf21a6d6a86e5831b80e8a1e898877acd3a03fd07078e45da33b671200ec98a5c7ac9be2f3592cd88933e262feffba248ca7ca4e7
+ checksum: f56159ba56e8824840b8073f65073434e4bc4ef20e366bc03aa6cae9a4389365574fa72390e48aed76049edbc6eba1181eb810e58fae22c25946c62f9da13db4
languageName: node
linkType: hard
-"@babel/plugin-transform-object-super@npm:^7.14.5, @babel/plugin-transform-object-super@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-object-super@npm:7.14.5"
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-replace-supers": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 88477a8b27e76042ffbff1345088422f5b3135346d69f264e71d90b3749a3d73d5a579c97a33cd11c61c5d499a655911c7cd97dbe68edb36e090dfd5f154d777
+ checksum: 74025e191ceb7cefc619c15d33753aab81300a03d81b96ae249d9b599bc65878f962d608f452462d3aad5d6e334b7ab2b09a6bdcfe8d101fe77ac7aacca4261e
languageName: node
linkType: hard
-"@babel/plugin-transform-parameters@npm:^7.14.5, @babel/plugin-transform-parameters@npm:^7.8.7":
- version: 7.14.5
- resolution: "@babel/plugin-transform-parameters@npm:7.14.5"
+"@babel/plugin-transform-numeric-separator@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-numeric-separator": ^7.10.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 932bc616be7b5542ba2371c85cfcc579a8556b9e5a5ea5535b7f0ec5b68284ed2a3724ae181f1a22719b5ea6539c82f5fcee37d9f45f08ed72eb9e43a0940b56
+ checksum: 3247bd7d409574fc06c59e0eb573ae7470d6d61ecf780df40b550102bb4406747d8f39dcbec57eb59406df6c565a86edd3b429e396ad02e4ce201ad92050832e
languageName: node
linkType: hard
-"@babel/plugin-transform-property-literals@npm:^7.14.5, @babel/plugin-transform-property-literals@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-property-literals@npm:7.14.5"
+"@babel/plugin-transform-object-rest-spread@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-compilation-targets": ^7.23.6
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-object-rest-spread": ^7.8.3
+ "@babel/plugin-transform-parameters": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 426e7b13a048220314e35bd4e6732640293c616173ef05ceca3a2bfadd043199e35ec693f1604f77178c3a88bea241b6d7ce92d8fc837faeb37117ad7866350f
+ checksum: d5d28b1f33c279a38299d34011421a4915e24b3846aa23a1aba947f1366ce673ddf8df09dd915e0f2c90c5327f798bf126dca013f8adff1fc8f09e18878b675a
languageName: node
linkType: hard
-"@babel/plugin-transform-react-constant-elements@npm:^7.0.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-constant-elements@npm:7.14.5"
+"@babel/plugin-transform-object-super@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-object-super@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-replace-supers": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7e4168535cd3ae1bae5acf8d7cc77a2bd885f8abed46672160631e23ded0c7e0be5152cefb1f87b123c4e3c38a542ca0ce06b3b0d8e7b7694f43687b63c0a9fb
+ checksum: d34d437456a54e2a5dcb26e9cf09ed4c55528f2a327c5edca92c93e9483c37176e228d00d6e0cf767f3d6fdbef45ae3a5d034a7c59337a009e20ae541c8220fa
languageName: node
linkType: hard
-"@babel/plugin-transform-react-display-name@npm:7.8.3":
- version: 7.8.3
- resolution: "@babel/plugin-transform-react-display-name@npm:7.8.3"
+"@babel/plugin-transform-optional-catch-binding@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2712345cdf6aa62ca4da3e749a247c99210658cd3c22ad7579052fb451ca6af482d4dee77ae295c3d12efc603aa0ee4a00399347d8e8ad962aa8715037a17e8e
+ checksum: ff7c02449d32a6de41e003abb38537b4a1ad90b1eaa4c0b578cb1b55548201a677588a8c47f3e161c72738400ae811a6673ea7b8a734344755016ca0ac445dac
languageName: node
linkType: hard
-"@babel/plugin-transform-react-display-name@npm:^7.14.5, @babel/plugin-transform-react-display-name@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-display-name@npm:7.14.5"
+"@babel/plugin-transform-optional-chaining@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/plugin-syntax-optional-chaining": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d7ca35d5e8d7d91ac82b17e1bd68dd4a7dcfae54da95b28d072907799503e2ec234f34dd869c9fee299a29e73e7b5ce3d4c748cf2a29c25d39f9523be130dba3
+ checksum: 0eb5f4abdeb1a101c0f67ef25eba4cce0978a74d8722f6222cdb179a28e60d21ab545eda231855f50169cd63d604ec8268cff44ae9370fd3a499a507c56c2bbd
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx-development@npm:^7.14.5, @babel/plugin-transform-react-jsx-development@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-jsx-development@npm:7.14.5"
+"@babel/plugin-transform-parameters@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-parameters@npm:7.24.1"
dependencies:
- "@babel/plugin-transform-react-jsx": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b49d6e703aeb4fbaacbb8449418dc3c599bcb3ce608cb900ed21a288c3bce42a33209524693b1978766b645aa2b751c15aa9da5337cc6ac2a79fd9b7c9ae9246
+ checksum: d183008e67b1a13b86c92fb64327a75cd8e13c13eb80d0b6952e15806f1b0c4c456d18360e451c6af73485b2c8f543608b0a29e5126c64eb625a31e970b65f80
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx-self@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-jsx-self@npm:7.14.5"
+"@babel/plugin-transform-private-methods@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-private-methods@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b1b19d3aa0d383fd06e085bcb5462a310dd844a073cc608115a3582ed88ca23d1511dc75cfa81369c2a254e14428b0e6482e6c48bdef346764d801882de8012f
+ checksum: 7208c30bb3f3fbc73fb3a88bdcb78cd5cddaf6d523eb9d67c0c04e78f6fc6319ece89f4a5abc41777ceab16df55b3a13a4120e0efc9275ca6d2d89beaba80aa0
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx-source@npm:^7.9.0":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-jsx-source@npm:7.14.5"
+"@babel/plugin-transform-private-property-in-object@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.24.1
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-private-property-in-object": ^7.14.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e7e7336bbd07d6c1a281bac1b242e8cb8172f3b1e1d9d214160ab220142fbefc5d79786d57bf197b18f4c694edfc7614dddae2f990adb4b7484146635b58dfe6
+ checksum: 47c123ca9975f7f6b20e6fe8fe89f621cd04b622539faf5ec037e2be7c3d53ce2506f7c785b1930dcdea11994eff79094a02715795218c7d6a0bdc11f2fb3ac2
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx@npm:^7.14.5, @babel/plugin-transform-react-jsx@npm:^7.9.1":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-jsx@npm:7.14.5"
+"@babel/plugin-transform-property-literals@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-property-literals@npm:7.24.1"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-module-imports": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-jsx": ^7.14.5
- "@babel/types": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4be6ba0a0303691ce7e16363da1ae446a5cd6eb63ba5729cd7af21b0e7927c07bb8595482836cbda0f41b39fa979c37f4504ef7c23729085f84fac1659615542
+ checksum: a73646d7ecd95b3931a3ead82c7d5efeb46e68ba362de63eb437d33531f294ec18bd31b6d24238cd3b6a3b919a6310c4a0ba4a2629927721d4d10b0518eb7715
languageName: node
linkType: hard
-"@babel/plugin-transform-react-pure-annotations@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.14.5"
+"@babel/plugin-transform-react-constant-elements@npm:^7.9.0":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-react-constant-elements@npm:7.24.1"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 3b62cc6af2c838eabc28c07473eab1392b41a5db2f0f326b1ba3ec52b95529e1c46098d6a259c7debb6a17489445828b89f7737a6fb85345ea5d27e4819a31fe
+ checksum: 37fd10113b786a2462cf15366aa3a11a2a5bdba9bf8881b2544941f5ad6175ebc31116be5a53549c9fce56a08ded6e0b57adb45d6e42efb55d3bc0ff7afdd433
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.14.5, @babel/plugin-transform-regenerator@npm:^7.8.7":
- version: 7.14.5
- resolution: "@babel/plugin-transform-regenerator@npm:7.14.5"
+"@babel/plugin-transform-react-display-name@npm:^7.16.0, @babel/plugin-transform-react-display-name@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-react-display-name@npm:7.24.1"
dependencies:
- regenerator-transform: ^0.14.2
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: f606bc04da7d0cfd651914cb144e85a0ea6fe20ee453ed21d002747cc47b09c853bc97166c32dc47e959581b772d9883f7d96d1c8e795c81ed21dbbb300e3aa7
+ checksum: d87ac36073f923a25de0ed3cffac067ec5abc4cde63f7f4366881388fbea6dcbced0e4fefd3b7e99edfe58a4ce32ea4d4c523a577d2b9f0515b872ed02b3d8c3
languageName: node
linkType: hard
-"@babel/plugin-transform-reserved-words@npm:^7.14.5, @babel/plugin-transform-reserved-words@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-reserved-words@npm:7.14.5"
+"@babel/plugin-transform-react-jsx-development@npm:^7.22.5":
+ version: 7.22.5
+ resolution: "@babel/plugin-transform-react-jsx-development@npm:7.22.5"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/plugin-transform-react-jsx": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 8a40d7b48e1b4a549272d603e7b28ead70213e12353d65edd07156b7169d7933cee8b79987b54f374f3c41b835d941aca4b13b8aa23a922c94113af2131ca686
+ checksum: 36bc3ff0b96bb0ef4723070a50cfdf2e72cfd903a59eba448f9fe92fea47574d6f22efd99364413719e1f3fb3c51b6c9b2990b87af088f8486a84b2a5f9e4560
languageName: node
linkType: hard
-"@babel/plugin-transform-runtime@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/plugin-transform-runtime@npm:7.9.0"
+"@babel/plugin-transform-react-jsx@npm:^7.22.5, @babel/plugin-transform-react-jsx@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-react-jsx@npm:7.23.4"
dependencies:
- "@babel/helper-module-imports": ^7.8.3
- "@babel/helper-plugin-utils": ^7.8.3
- resolve: ^1.8.1
- semver: ^5.5.1
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-module-imports": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-jsx": ^7.23.3
+ "@babel/types": ^7.23.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 48d6a6ada6bb0a08179ab23e7b63b7e5430abb1a6b21f3979524c5574cd0de033abe196c4ec0ff4470a13b87ee367acf4b21ed0ae9294659ee530b89278786fd
+ checksum: d8b8c52e8e22e833bf77c8d1a53b0a57d1fd52ba9596a319d572de79446a8ed9d95521035bc1175c1589d1a6a34600d2e678fa81d81bac8fac121137097f1f0a
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.14.5, @babel/plugin-transform-shorthand-properties@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-shorthand-properties@npm:7.14.5"
+"@babel/plugin-transform-react-pure-annotations@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 60cdd17e347a6a0973c8ea5c08ae4b3f8e59ce0e188453c4bda045d2a5c34495af8e0e9393631aa9f3fd51282455b9c5d6ba07e262576171dbe2b4094bdaf8ad
+ checksum: 06a6bfe80f1f36408d07dd80c48cf9f61177c8e5d814e80ddbe88cfad81a8b86b3110e1fe9d1ac943db77e74497daa7f874b5490c788707106ad26ecfbe44813
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.14.6, @babel/plugin-transform-spread@npm:^7.8.3":
- version: 7.14.6
- resolution: "@babel/plugin-transform-spread@npm:7.14.6"
+"@babel/plugin-transform-regenerator@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-regenerator@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-skip-transparent-expression-wrappers": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ regenerator-transform: ^0.15.2
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 20c11de962dd7ddab110d6c4ab9f3c0bea97393ce09cbe4e46be53182c3df0577eaf0e31aaa2d76344ae21ed3a3b7e779fe814b845d188e11a6031c619648b89
+ checksum: a04319388a0a7931c3f8e15715d01444c32519692178b70deccc86d53304e74c0f589a4268f6c68578d86f75e934dd1fe6e6ed9071f54ee8379f356f88ef6e42
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.14.5, @babel/plugin-transform-sticky-regex@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-sticky-regex@npm:7.14.5"
+"@babel/plugin-transform-reserved-words@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 6d77e0641c4c72203d592d54fdb11770de22a34d659d3335e4c537e95b930d03142b11f1d41d103da3de063c628a0f34bdd4c6534b591bc59d9ce67fafb836dc
+ checksum: 132c6040c65aabae2d98a39289efb5c51a8632546dc50d2ad032c8660aec307fbed74ef499856ea4f881fc8505905f49b48e0270585da2ea3d50b75e962afd89
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.14.5, @babel/plugin-transform-template-literals@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-template-literals@npm:7.14.5"
+"@babel/plugin-transform-runtime@npm:^7.16.4":
+ version: 7.24.3
+ resolution: "@babel/plugin-transform-runtime@npm:7.24.3"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-module-imports": ^7.24.3
+ "@babel/helper-plugin-utils": ^7.24.0
+ babel-plugin-polyfill-corejs2: ^0.4.10
+ babel-plugin-polyfill-corejs3: ^0.10.1
+ babel-plugin-polyfill-regenerator: ^0.6.1
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 56d273470c16e83bac1bfab5057a64f23191b51460a009b522b3b29806d7a9f64cbd94323836ceb997c4f331b85564f952eb5566c7bd140d0b278f0191a31985
+ checksum: 719112524e6fe3e665385ad4425530dadb2ddee839023381ed9d77edf5ce2748f32cc0e38dacda1990c56a7ae0af4de6cdca2413ffaf307e9f75f8d2200d09a2
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.14.5, @babel/plugin-transform-typeof-symbol@npm:^7.8.4":
- version: 7.14.5
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.14.5"
+"@babel/plugin-transform-shorthand-properties@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1e71ec00ea8b64522b8677c030f334cc5b3833a5b7269a152a2ba7a6b36f0e0a4333a61072e69113e4062e71554d4751ef2e3ddd5e81994978123323f266981c
+ checksum: 006a2032d1c57dca76579ce6598c679c2f20525afef0a36e9d42affe3c8cf33c1427581ad696b519cc75dfee46c5e8ecdf0c6a29ffb14250caa3e16dd68cb424
languageName: node
linkType: hard
-"@babel/plugin-transform-typescript@npm:^7.9.0":
- version: 7.14.6
- resolution: "@babel/plugin-transform-typescript@npm:7.14.6"
+"@babel/plugin-transform-spread@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-spread@npm:7.24.1"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.14.6
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/plugin-syntax-typescript": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: cb3117cfc9c8ebf9612b137eb660448e79a876a189fcad6b79641faa7200073bbfd08bf0e63c7ddb3a35b3d31457d6e90cf63565e64446a73866290dc97353fa
+ checksum: 622ef507e2b5120a9010b25d3df5186c06102ecad8751724a38ec924df8d3527688198fa490c47064eabba14ef2f961b3069855bd22a8c0a1e51a23eed348d02
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-escapes@npm:^7.14.5":
- version: 7.14.5
- resolution: "@babel/plugin-transform-unicode-escapes@npm:7.14.5"
+"@babel/plugin-transform-sticky-regex@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2a6979c5b886d9c7d9d3887374d75384542fe05a71eb7738b2cde659386089a930d37d1a34ffb4b87def98fbed3526d78b7cd5dd9bffde4d406b368faba81b7d
+ checksum: e326e96a9eeb6bb01dbc4d3362f989411490671b97f62edf378b8fb102c463a018b777f28da65344d41b22aa6efcdfa01ed43d2b11fdcf202046d3174be137c5
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.14.5, @babel/plugin-transform-unicode-regex@npm:^7.8.3":
- version: 7.14.5
- resolution: "@babel/plugin-transform-unicode-regex@npm:7.14.5"
+"@babel/plugin-transform-template-literals@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-template-literals@npm:7.24.1"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1b7a4c0dc6b07390f991e7cac8409f7a1ae74495d94b9e1fb5a716d5362a349a35717cfad883074e3f80e16bb630bbd1986a3436f739f6b01c30a96ef3f9ea9a
+ checksum: 4c9009c72321caf20e3b6328bbe9d7057006c5ae57b794cf247a37ca34d87dfec5e27284169a16df5a6235a083bf0f3ab9e1bfcb005d1c8b75b04aed75652621
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/preset-env@npm:7.9.0"
+"@babel/plugin-transform-typeof-symbol@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.1"
dependencies:
- "@babel/compat-data": ^7.9.0
- "@babel/helper-compilation-targets": ^7.8.7
- "@babel/helper-module-imports": ^7.8.3
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-proposal-async-generator-functions": ^7.8.3
- "@babel/plugin-proposal-dynamic-import": ^7.8.3
- "@babel/plugin-proposal-json-strings": ^7.8.3
- "@babel/plugin-proposal-nullish-coalescing-operator": ^7.8.3
- "@babel/plugin-proposal-numeric-separator": ^7.8.3
- "@babel/plugin-proposal-object-rest-spread": ^7.9.0
- "@babel/plugin-proposal-optional-catch-binding": ^7.8.3
- "@babel/plugin-proposal-optional-chaining": ^7.9.0
- "@babel/plugin-proposal-unicode-property-regex": ^7.8.3
- "@babel/plugin-syntax-async-generators": ^7.8.0
- "@babel/plugin-syntax-dynamic-import": ^7.8.0
- "@babel/plugin-syntax-json-strings": ^7.8.0
- "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.0
- "@babel/plugin-syntax-numeric-separator": ^7.8.0
- "@babel/plugin-syntax-object-rest-spread": ^7.8.0
- "@babel/plugin-syntax-optional-catch-binding": ^7.8.0
- "@babel/plugin-syntax-optional-chaining": ^7.8.0
- "@babel/plugin-syntax-top-level-await": ^7.8.3
- "@babel/plugin-transform-arrow-functions": ^7.8.3
- "@babel/plugin-transform-async-to-generator": ^7.8.3
- "@babel/plugin-transform-block-scoped-functions": ^7.8.3
- "@babel/plugin-transform-block-scoping": ^7.8.3
- "@babel/plugin-transform-classes": ^7.9.0
- "@babel/plugin-transform-computed-properties": ^7.8.3
- "@babel/plugin-transform-destructuring": ^7.8.3
- "@babel/plugin-transform-dotall-regex": ^7.8.3
- "@babel/plugin-transform-duplicate-keys": ^7.8.3
- "@babel/plugin-transform-exponentiation-operator": ^7.8.3
- "@babel/plugin-transform-for-of": ^7.9.0
- "@babel/plugin-transform-function-name": ^7.8.3
- "@babel/plugin-transform-literals": ^7.8.3
- "@babel/plugin-transform-member-expression-literals": ^7.8.3
- "@babel/plugin-transform-modules-amd": ^7.9.0
- "@babel/plugin-transform-modules-commonjs": ^7.9.0
- "@babel/plugin-transform-modules-systemjs": ^7.9.0
- "@babel/plugin-transform-modules-umd": ^7.9.0
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.8.3
- "@babel/plugin-transform-new-target": ^7.8.3
- "@babel/plugin-transform-object-super": ^7.8.3
- "@babel/plugin-transform-parameters": ^7.8.7
- "@babel/plugin-transform-property-literals": ^7.8.3
- "@babel/plugin-transform-regenerator": ^7.8.7
- "@babel/plugin-transform-reserved-words": ^7.8.3
- "@babel/plugin-transform-shorthand-properties": ^7.8.3
- "@babel/plugin-transform-spread": ^7.8.3
- "@babel/plugin-transform-sticky-regex": ^7.8.3
- "@babel/plugin-transform-template-literals": ^7.8.3
- "@babel/plugin-transform-typeof-symbol": ^7.8.4
- "@babel/plugin-transform-unicode-regex": ^7.8.3
- "@babel/preset-modules": ^0.1.3
- "@babel/types": ^7.9.0
- browserslist: ^4.9.1
- core-js-compat: ^3.6.2
- invariant: ^2.2.2
- levenary: ^1.1.1
- semver: ^5.5.0
+ "@babel/helper-plugin-utils": ^7.24.0
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 5578f6163488ed945c7c318402388d742aef91021ed4c080cba87e22975f0e32f0caadb309fe8687f7a44b2ad7153e4b00f69b7b665f2a2ffd6d43732317f877
+ checksum: 90251c02986aebe50937522a6e404cb83db1b1feda17c0244e97d6429ded1634340c8411536487d14c54495607e1b7c9dc4db4aed969d519f1ff1e363f9c2229
languageName: node
linkType: hard
-"@babel/preset-env@npm:^7.4.5":
- version: 7.14.7
- resolution: "@babel/preset-env@npm:7.14.7"
+"@babel/plugin-transform-typescript@npm:^7.24.1":
+ version: 7.24.4
+ resolution: "@babel/plugin-transform-typescript@npm:7.24.4"
dependencies:
- "@babel/compat-data": ^7.14.7
- "@babel/helper-compilation-targets": ^7.14.5
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-option": ^7.14.5
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.14.5
- "@babel/plugin-proposal-async-generator-functions": ^7.14.7
- "@babel/plugin-proposal-class-properties": ^7.14.5
- "@babel/plugin-proposal-class-static-block": ^7.14.5
- "@babel/plugin-proposal-dynamic-import": ^7.14.5
- "@babel/plugin-proposal-export-namespace-from": ^7.14.5
- "@babel/plugin-proposal-json-strings": ^7.14.5
- "@babel/plugin-proposal-logical-assignment-operators": ^7.14.5
- "@babel/plugin-proposal-nullish-coalescing-operator": ^7.14.5
- "@babel/plugin-proposal-numeric-separator": ^7.14.5
- "@babel/plugin-proposal-object-rest-spread": ^7.14.7
- "@babel/plugin-proposal-optional-catch-binding": ^7.14.5
- "@babel/plugin-proposal-optional-chaining": ^7.14.5
- "@babel/plugin-proposal-private-methods": ^7.14.5
- "@babel/plugin-proposal-private-property-in-object": ^7.14.5
- "@babel/plugin-proposal-unicode-property-regex": ^7.14.5
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.24.4
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/plugin-syntax-typescript": ^7.24.1
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 57a9a776b1910c706d28972e4b056ced3af8fc59c29b2a6205c2bb2a408141ddb59a8f2f6041f8467a7b260942818767f4ecabb9f63adf7fddf2afa25e774dfc
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-escapes@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.1"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: d4d7cfea91af7be2768fb6bed902e00d6e3190bda738b5149c3a788d570e6cf48b974ec9548442850308ecd8fc9a67681f4ea8403129e7867bcb85adaf6ec238
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-property-regex@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.1"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 276099b4483e707f80b054e2d29bc519158bfe52461ef5ff76f70727d592df17e30b1597ef4d8a0f04d810f6cb5a8dd887bdc1d0540af3744751710ef280090f
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-regex@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.1"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 400a0927bdb1425b4c0dc68a61b5b2d7d17c7d9f0e07317a1a6a373c080ef94be1dd65fdc4ac9a78fcdb58f89fd128450c7bc0d5b8ca0ae7eca3fbd98e50acba
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.24.1":
+ version: 7.24.1
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.24.1"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.24.0
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 364342fb8e382dfaa23628b88e6484dc1097e53fb7199f4d338f1e2cd71d839bb0a35a9b1380074f6a10adb2e98b79d53ca3ec78c0b8c557ca895ffff42180df
+ languageName: node
+ linkType: hard
+
+"@babel/preset-env@npm:^7.16.4, @babel/preset-env@npm:^7.8.4, @babel/preset-env@npm:^7.9.5":
+ version: 7.24.4
+ resolution: "@babel/preset-env@npm:7.24.4"
+ dependencies:
+ "@babel/compat-data": ^7.24.4
+ "@babel/helper-compilation-targets": ^7.23.6
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-validator-option": ^7.23.5
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.24.4
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.24.1
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.1
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.24.1
+ "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2
"@babel/plugin-syntax-async-generators": ^7.8.4
"@babel/plugin-syntax-class-properties": ^7.12.13
"@babel/plugin-syntax-class-static-block": ^7.14.5
"@babel/plugin-syntax-dynamic-import": ^7.8.3
"@babel/plugin-syntax-export-namespace-from": ^7.8.3
+ "@babel/plugin-syntax-import-assertions": ^7.24.1
+ "@babel/plugin-syntax-import-attributes": ^7.24.1
+ "@babel/plugin-syntax-import-meta": ^7.10.4
"@babel/plugin-syntax-json-strings": ^7.8.3
"@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
"@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
"@babel/plugin-syntax-optional-chaining": ^7.8.3
"@babel/plugin-syntax-private-property-in-object": ^7.14.5
"@babel/plugin-syntax-top-level-await": ^7.14.5
- "@babel/plugin-transform-arrow-functions": ^7.14.5
- "@babel/plugin-transform-async-to-generator": ^7.14.5
- "@babel/plugin-transform-block-scoped-functions": ^7.14.5
- "@babel/plugin-transform-block-scoping": ^7.14.5
- "@babel/plugin-transform-classes": ^7.14.5
- "@babel/plugin-transform-computed-properties": ^7.14.5
- "@babel/plugin-transform-destructuring": ^7.14.7
- "@babel/plugin-transform-dotall-regex": ^7.14.5
- "@babel/plugin-transform-duplicate-keys": ^7.14.5
- "@babel/plugin-transform-exponentiation-operator": ^7.14.5
- "@babel/plugin-transform-for-of": ^7.14.5
- "@babel/plugin-transform-function-name": ^7.14.5
- "@babel/plugin-transform-literals": ^7.14.5
- "@babel/plugin-transform-member-expression-literals": ^7.14.5
- "@babel/plugin-transform-modules-amd": ^7.14.5
- "@babel/plugin-transform-modules-commonjs": ^7.14.5
- "@babel/plugin-transform-modules-systemjs": ^7.14.5
- "@babel/plugin-transform-modules-umd": ^7.14.5
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.14.7
- "@babel/plugin-transform-new-target": ^7.14.5
- "@babel/plugin-transform-object-super": ^7.14.5
- "@babel/plugin-transform-parameters": ^7.14.5
- "@babel/plugin-transform-property-literals": ^7.14.5
- "@babel/plugin-transform-regenerator": ^7.14.5
- "@babel/plugin-transform-reserved-words": ^7.14.5
- "@babel/plugin-transform-shorthand-properties": ^7.14.5
- "@babel/plugin-transform-spread": ^7.14.6
- "@babel/plugin-transform-sticky-regex": ^7.14.5
- "@babel/plugin-transform-template-literals": ^7.14.5
- "@babel/plugin-transform-typeof-symbol": ^7.14.5
- "@babel/plugin-transform-unicode-escapes": ^7.14.5
- "@babel/plugin-transform-unicode-regex": ^7.14.5
- "@babel/preset-modules": ^0.1.4
- "@babel/types": ^7.14.5
- babel-plugin-polyfill-corejs2: ^0.2.2
- babel-plugin-polyfill-corejs3: ^0.2.2
- babel-plugin-polyfill-regenerator: ^0.2.2
- core-js-compat: ^3.15.0
- semver: ^6.3.0
+ "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
+ "@babel/plugin-transform-arrow-functions": ^7.24.1
+ "@babel/plugin-transform-async-generator-functions": ^7.24.3
+ "@babel/plugin-transform-async-to-generator": ^7.24.1
+ "@babel/plugin-transform-block-scoped-functions": ^7.24.1
+ "@babel/plugin-transform-block-scoping": ^7.24.4
+ "@babel/plugin-transform-class-properties": ^7.24.1
+ "@babel/plugin-transform-class-static-block": ^7.24.4
+ "@babel/plugin-transform-classes": ^7.24.1
+ "@babel/plugin-transform-computed-properties": ^7.24.1
+ "@babel/plugin-transform-destructuring": ^7.24.1
+ "@babel/plugin-transform-dotall-regex": ^7.24.1
+ "@babel/plugin-transform-duplicate-keys": ^7.24.1
+ "@babel/plugin-transform-dynamic-import": ^7.24.1
+ "@babel/plugin-transform-exponentiation-operator": ^7.24.1
+ "@babel/plugin-transform-export-namespace-from": ^7.24.1
+ "@babel/plugin-transform-for-of": ^7.24.1
+ "@babel/plugin-transform-function-name": ^7.24.1
+ "@babel/plugin-transform-json-strings": ^7.24.1
+ "@babel/plugin-transform-literals": ^7.24.1
+ "@babel/plugin-transform-logical-assignment-operators": ^7.24.1
+ "@babel/plugin-transform-member-expression-literals": ^7.24.1
+ "@babel/plugin-transform-modules-amd": ^7.24.1
+ "@babel/plugin-transform-modules-commonjs": ^7.24.1
+ "@babel/plugin-transform-modules-systemjs": ^7.24.1
+ "@babel/plugin-transform-modules-umd": ^7.24.1
+ "@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5
+ "@babel/plugin-transform-new-target": ^7.24.1
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.1
+ "@babel/plugin-transform-numeric-separator": ^7.24.1
+ "@babel/plugin-transform-object-rest-spread": ^7.24.1
+ "@babel/plugin-transform-object-super": ^7.24.1
+ "@babel/plugin-transform-optional-catch-binding": ^7.24.1
+ "@babel/plugin-transform-optional-chaining": ^7.24.1
+ "@babel/plugin-transform-parameters": ^7.24.1
+ "@babel/plugin-transform-private-methods": ^7.24.1
+ "@babel/plugin-transform-private-property-in-object": ^7.24.1
+ "@babel/plugin-transform-property-literals": ^7.24.1
+ "@babel/plugin-transform-regenerator": ^7.24.1
+ "@babel/plugin-transform-reserved-words": ^7.24.1
+ "@babel/plugin-transform-shorthand-properties": ^7.24.1
+ "@babel/plugin-transform-spread": ^7.24.1
+ "@babel/plugin-transform-sticky-regex": ^7.24.1
+ "@babel/plugin-transform-template-literals": ^7.24.1
+ "@babel/plugin-transform-typeof-symbol": ^7.24.1
+ "@babel/plugin-transform-unicode-escapes": ^7.24.1
+ "@babel/plugin-transform-unicode-property-regex": ^7.24.1
+ "@babel/plugin-transform-unicode-regex": ^7.24.1
+ "@babel/plugin-transform-unicode-sets-regex": ^7.24.1
+ "@babel/preset-modules": 0.1.6-no-external-plugins
+ babel-plugin-polyfill-corejs2: ^0.4.10
+ babel-plugin-polyfill-corejs3: ^0.10.4
+ babel-plugin-polyfill-regenerator: ^0.6.1
+ core-js-compat: ^3.31.0
+ semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ebebc20ada68c92b67375926021d576af3636a279aee7625c1e234880355c8669188483aecfff2d478c1caa9fcf18b569ea329060b479236b04baed2bdf796d5
+ checksum: 5a057a6463f92b02bfe66257d3f2c76878815bc7847f2a716b0539d9f547eae2a9d1f0fc62a5c0eff6ab0504bb52e815829ef893e4586b641f8dd6a609d114f3
languageName: node
linkType: hard
-"@babel/preset-modules@npm:^0.1.3, @babel/preset-modules@npm:^0.1.4":
- version: 0.1.4
- resolution: "@babel/preset-modules@npm:0.1.4"
+"@babel/preset-modules@npm:0.1.6-no-external-plugins":
+ version: 0.1.6-no-external-plugins
+ resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins"
dependencies:
"@babel/helper-plugin-utils": ^7.0.0
- "@babel/plugin-proposal-unicode-property-regex": ^7.4.4
- "@babel/plugin-transform-dotall-regex": ^7.4.4
"@babel/types": ^7.4.4
esutils: ^2.0.2
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 7c6500be06be9a341e377eb63292a4a22d0da2b4fb8c68714aff703ddb341cbd58e37d4119d64fc3e602f73801103af471fca2c60b4c1e48e08eea3e6b1afc93
+ "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0
+ checksum: 4855e799bc50f2449fb5210f78ea9e8fd46cf4f242243f1e2ed838e2bd702e25e73e822e7f8447722a5f4baa5e67a8f7a0e403f3e7ce04540ff743a9c411c375
languageName: node
linkType: hard
-"@babel/preset-react@npm:7.9.1":
- version: 7.9.1
- resolution: "@babel/preset-react@npm:7.9.1"
+"@babel/preset-react@npm:^7.16.0, @babel/preset-react@npm:^7.9.4":
+ version: 7.24.1
+ resolution: "@babel/preset-react@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-transform-react-display-name": ^7.8.3
- "@babel/plugin-transform-react-jsx": ^7.9.1
- "@babel/plugin-transform-react-jsx-development": ^7.9.0
- "@babel/plugin-transform-react-jsx-self": ^7.9.0
- "@babel/plugin-transform-react-jsx-source": ^7.9.0
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-validator-option": ^7.23.5
+ "@babel/plugin-transform-react-display-name": ^7.24.1
+ "@babel/plugin-transform-react-jsx": ^7.23.4
+ "@babel/plugin-transform-react-jsx-development": ^7.22.5
+ "@babel/plugin-transform-react-pure-annotations": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 68efd5246694927d513a27bf4bb4b3894f489b5dc9eea883e7eda82341d152a3f3d6187fb2ed1b080064fa6a111ef53182ec43049ad766fb10af4440ef9bc62b
+ checksum: 70e146a6de480cb4b6c5eb197003960a2d148d513e1f5b5d04ee954f255d68c935c2800da13e550267f47b894bd0214b2548181467b52a4bdc0a85020061b68c
languageName: node
linkType: hard
-"@babel/preset-react@npm:^7.0.0":
- version: 7.14.5
- resolution: "@babel/preset-react@npm:7.14.5"
+"@babel/preset-typescript@npm:^7.16.0":
+ version: 7.24.1
+ resolution: "@babel/preset-typescript@npm:7.24.1"
dependencies:
- "@babel/helper-plugin-utils": ^7.14.5
- "@babel/helper-validator-option": ^7.14.5
- "@babel/plugin-transform-react-display-name": ^7.14.5
- "@babel/plugin-transform-react-jsx": ^7.14.5
- "@babel/plugin-transform-react-jsx-development": ^7.14.5
- "@babel/plugin-transform-react-pure-annotations": ^7.14.5
+ "@babel/helper-plugin-utils": ^7.24.0
+ "@babel/helper-validator-option": ^7.23.5
+ "@babel/plugin-syntax-jsx": ^7.24.1
+ "@babel/plugin-transform-modules-commonjs": ^7.24.1
+ "@babel/plugin-transform-typescript": ^7.24.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 413c507f853b95c71ecb64f29ea7b0786464a237c54977b03a4410dd837b03bfa55df81d0e337f9792d9abc61f4bf3d616f857d00a36ff4ede79407c143ac865
+ checksum: f3e0ff8c20dd5abc82614df2d7953f1549a98282b60809478f7dfb41c29be63720f2d1d7a51ef1f0d939b65e8666cb7d36e32bc4f8ac2b74c20664efd41e8bdd
languageName: node
linkType: hard
-"@babel/preset-typescript@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/preset-typescript@npm:7.9.0"
- dependencies:
- "@babel/helper-plugin-utils": ^7.8.3
- "@babel/plugin-transform-typescript": ^7.9.0
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: fbdd8b3d0493df4c4a88a59ca616331658e219b4c294584834a34a5148c991b28173c8f244c3b4fcaee93cd1bad6c99c0a84bd0a47a4b3cc8e759f35a0d6a3eb
+"@babel/regjsgen@npm:^0.8.0":
+ version: 0.8.0
+ resolution: "@babel/regjsgen@npm:0.8.0"
+ checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730
languageName: node
linkType: hard
-"@babel/runtime-corejs3@npm:^7.12.1":
- version: 7.14.7
- resolution: "@babel/runtime-corejs3@npm:7.14.7"
+"@babel/runtime-corejs2@npm:^7.0.0":
+ version: 7.24.4
+ resolution: "@babel/runtime-corejs2@npm:7.24.4"
dependencies:
- core-js-pure: ^3.15.0
- regenerator-runtime: ^0.13.4
- checksum: 9e49fc27e4de9fd5a97069aeeb0746cf0e42afe2068fa717a8abec740782a58d6bb1dc635c37a7bd47c40f3945fabad6308a44915520e15c7651f34b24b89d6f
+ core-js: ^2.6.12
+ regenerator-runtime: ^0.14.0
+ checksum: f164006b7b63093ff407bc84988427bf56f01b1764a1eca2478139dcff131411e7c2ea10657e116ae47ccc0e96b165c8329a96336d2d421a05bb34d0292d3521
languageName: node
linkType: hard
languageName: node
linkType: hard
-"@babel/runtime@npm:7.9.0":
- version: 7.9.0
- resolution: "@babel/runtime@npm:7.9.0"
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2":
+ version: 7.14.6
+ resolution: "@babel/runtime@npm:7.14.6"
dependencies:
regenerator-runtime: ^0.13.4
- checksum: dc9b50c1893460e71d93c299e659b61b41a37780e78c1e1404b360ca275d44b79107c0d986d74ac8163757f02384cda94d8315bded40deafe72ca07f7761a098
+ checksum: 927ffed7871f2ed29f967a8dad7a72aa10662f93b6735a89d664a161fa4dc2074b8947ca159a8a0a49cec9a71c8de473d7c2b22d3de0ee4d7dd06d24a7f98018
languageName: node
linkType: hard
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.3.4, @babel/runtime@npm:^7.4.5, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.9.2":
- version: 7.14.6
- resolution: "@babel/runtime@npm:7.14.6"
+"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.16.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.5.5":
+ version: 7.24.4
+ resolution: "@babel/runtime@npm:7.24.4"
+ dependencies:
+ regenerator-runtime: ^0.14.0
+ checksum: 2f27d4c0ffac7ae7999ac0385e1106f2a06992a8bdcbf3da06adcac7413863cd08c198c2e4e970041bbea849e17f02e1df18875539b6afba76c781b6b59a07c3
+ languageName: node
+ linkType: hard
+
+"@babel/template@npm:^7.10.4, @babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3":
+ version: 7.24.0
+ resolution: "@babel/template@npm:7.24.0"
dependencies:
- regenerator-runtime: ^0.13.4
- checksum: 927ffed7871f2ed29f967a8dad7a72aa10662f93b6735a89d664a161fa4dc2074b8947ca159a8a0a49cec9a71c8de473d7c2b22d3de0ee4d7dd06d24a7f98018
+ "@babel/code-frame": ^7.23.5
+ "@babel/parser": ^7.24.0
+ "@babel/types": ^7.24.0
+ checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8
languageName: node
linkType: hard
-"@babel/template@npm:^7.14.5, @babel/template@npm:^7.4.0, @babel/template@npm:^7.8.6":
+"@babel/template@npm:^7.14.5":
version: 7.14.5
resolution: "@babel/template@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.5, @babel/traverse@npm:^7.4.3, @babel/traverse@npm:^7.7.0, @babel/traverse@npm:^7.9.0":
- version: 7.14.7
- resolution: "@babel/traverse@npm:7.14.7"
+"@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.14.5, @babel/traverse@npm:^7.24.1, @babel/traverse@npm:^7.7.0":
+ version: 7.24.1
+ resolution: "@babel/traverse@npm:7.24.1"
dependencies:
- "@babel/code-frame": ^7.14.5
- "@babel/generator": ^7.14.5
- "@babel/helper-function-name": ^7.14.5
- "@babel/helper-hoist-variables": ^7.14.5
- "@babel/helper-split-export-declaration": ^7.14.5
- "@babel/parser": ^7.14.7
- "@babel/types": ^7.14.5
- debug: ^4.1.0
+ "@babel/code-frame": ^7.24.1
+ "@babel/generator": ^7.24.1
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-hoist-variables": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/parser": ^7.24.1
+ "@babel/types": ^7.24.0
+ debug: ^4.3.1
globals: ^11.1.0
- checksum: 11e9162e46bdd6daef8691facbf5c47838f6e312ac775be35c40353c77887338d1b9ce497211d2ae96628a9230551f03eb3df49b4ca53b6f668082f2c157d1a0
+ checksum: 92a5ca906abfba9df17666d2001ab23f18600035f706a687055a0e392a690ae48d6fec67c8bd4ef19ba18699a77a5b7f85727e36b83f7d110141608fe0c24fe9
languageName: node
linkType: hard
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.14.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.4.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0, @babel/types@npm:^7.9.0":
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.14.5, @babel/types@npm:^7.3.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.7.0":
version: 7.14.5
resolution: "@babel/types@npm:7.14.5"
dependencies:
languageName: node
linkType: hard
+"@babel/types@npm:^7.12.1, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3":
+ version: 7.24.0
+ resolution: "@babel/types@npm:7.24.0"
+ dependencies:
+ "@babel/helper-string-parser": ^7.23.4
+ "@babel/helper-validator-identifier": ^7.22.20
+ to-fast-properties: ^2.0.0
+ checksum: 4b574a37d490f621470ff36a5afaac6deca5546edcb9b5e316d39acbb20998e9c2be42f3fc0bf2b55906fc49ff2a5a6a097e8f5a726ee3f708a0b0ca93aed807
+ languageName: node
+ linkType: hard
+
"@babel/types@npm:^7.8.3":
version: 7.17.0
resolution: "@babel/types@npm:7.17.0"
languageName: node
linkType: hard
+"@bcoe/v8-coverage@npm:^0.2.3":
+ version: 0.2.3
+ resolution: "@bcoe/v8-coverage@npm:0.2.3"
+ checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27
+ languageName: node
+ linkType: hard
+
"@cnakazawa/watch@npm:^1.0.3":
version: 1.0.4
resolution: "@cnakazawa/watch@npm:1.0.4"
languageName: node
linkType: hard
+"@eslint/eslintrc@npm:^0.4.3":
+ version: 0.4.3
+ resolution: "@eslint/eslintrc@npm:0.4.3"
+ dependencies:
+ ajv: ^6.12.4
+ debug: ^4.1.1
+ espree: ^7.3.0
+ globals: ^13.9.0
+ ignore: ^4.0.6
+ import-fresh: ^3.2.1
+ js-yaml: ^3.13.1
+ minimatch: ^3.0.4
+ strip-json-comments: ^3.1.1
+ checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3
+ languageName: node
+ linkType: hard
+
"@fortawesome/fontawesome-common-types@npm:^0.2.28":
version: 0.2.35
resolution: "@fortawesome/fontawesome-common-types@npm:0.2.35"
languageName: node
linkType: hard
-"@hapi/joi@npm:^15.0.0":
+"@hapi/joi@npm:^15.1.0":
version: 15.1.1
resolution: "@hapi/joi@npm:15.1.1"
dependencies:
languageName: node
linkType: hard
-"@jest/console@npm:^24.7.1, @jest/console@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/console@npm:24.9.0"
+"@humanwhocodes/config-array@npm:^0.5.0":
+ version: 0.5.0
+ resolution: "@humanwhocodes/config-array@npm:0.5.0"
+ dependencies:
+ "@humanwhocodes/object-schema": ^1.2.0
+ debug: ^4.1.1
+ minimatch: ^3.0.4
+ checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7
+ languageName: node
+ linkType: hard
+
+"@humanwhocodes/object-schema@npm:^1.2.0":
+ version: 1.2.1
+ resolution: "@humanwhocodes/object-schema@npm:1.2.1"
+ checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1
+ languageName: node
+ linkType: hard
+
+"@istanbuljs/load-nyc-config@npm:^1.0.0":
+ version: 1.1.0
+ resolution: "@istanbuljs/load-nyc-config@npm:1.1.0"
dependencies:
- "@jest/source-map": ^24.9.0
- chalk: ^2.0.1
- slash: ^2.0.0
- checksum: ee6468c4aeeb8752126e92e20b0ffbf32abda731e9b7865b63b60bd569c3536e9c901efcec4d81c506a7c6fea2a970ace8262190961aba31dedbfeaa3459d78b
+ camelcase: ^5.3.1
+ find-up: ^4.1.0
+ get-package-type: ^0.1.0
+ js-yaml: ^3.13.1
+ resolve-from: ^5.0.0
+ checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568
languageName: node
linkType: hard
-"@jest/core@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/core@npm:24.9.0"
- dependencies:
- "@jest/console": ^24.7.1
- "@jest/reporters": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/transform": ^24.9.0
- "@jest/types": ^24.9.0
- ansi-escapes: ^3.0.0
- chalk: ^2.0.1
+"@istanbuljs/schema@npm:^0.1.2":
+ version: 0.1.3
+ resolution: "@istanbuljs/schema@npm:0.1.3"
+ checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9
+ languageName: node
+ linkType: hard
+
+"@jest/console@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/console@npm:26.6.2"
+ dependencies:
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ chalk: ^4.0.0
+ jest-message-util: ^26.6.2
+ jest-util: ^26.6.2
+ slash: ^3.0.0
+ checksum: 69a9ca6ba357d7634fd537e3b87c64369865ffb59f57fe6661223088bd62273d0c1d660fefce3625a427f42a37d32590f6b291e1295ea6d6b7cb31ddae36a737
+ languageName: node
+ linkType: hard
+
+"@jest/core@npm:^26.6.0, @jest/core@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "@jest/core@npm:26.6.3"
+ dependencies:
+ "@jest/console": ^26.6.2
+ "@jest/reporters": ^26.6.2
+ "@jest/test-result": ^26.6.2
+ "@jest/transform": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ ansi-escapes: ^4.2.1
+ chalk: ^4.0.0
exit: ^0.1.2
- graceful-fs: ^4.1.15
- jest-changed-files: ^24.9.0
- jest-config: ^24.9.0
- jest-haste-map: ^24.9.0
- jest-message-util: ^24.9.0
- jest-regex-util: ^24.3.0
- jest-resolve: ^24.9.0
- jest-resolve-dependencies: ^24.9.0
- jest-runner: ^24.9.0
- jest-runtime: ^24.9.0
- jest-snapshot: ^24.9.0
- jest-util: ^24.9.0
- jest-validate: ^24.9.0
- jest-watcher: ^24.9.0
- micromatch: ^3.1.10
- p-each-series: ^1.0.0
- realpath-native: ^1.1.0
- rimraf: ^2.5.4
- slash: ^2.0.0
- strip-ansi: ^5.0.0
- checksum: 44d63883bc410ea2448eb359c417b92d9dd5fb9bec51f28bde2bd87ade705c4f0f6698f0c251a679204e860bf865120c58725cf397465862c99a70327bcb99fc
+ graceful-fs: ^4.2.4
+ jest-changed-files: ^26.6.2
+ jest-config: ^26.6.3
+ jest-haste-map: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-regex-util: ^26.0.0
+ jest-resolve: ^26.6.2
+ jest-resolve-dependencies: ^26.6.3
+ jest-runner: ^26.6.3
+ jest-runtime: ^26.6.3
+ jest-snapshot: ^26.6.2
+ jest-util: ^26.6.2
+ jest-validate: ^26.6.2
+ jest-watcher: ^26.6.2
+ micromatch: ^4.0.2
+ p-each-series: ^2.1.0
+ rimraf: ^3.0.0
+ slash: ^3.0.0
+ strip-ansi: ^6.0.0
+ checksum: f52b26ffe9b923ed67b3ff30e170b3a434d4263990f78d96cd43acbd0aa8ad36aecad2f1822f376da3a80228714fd6b7f7acd51744133cfcd2780ba0e3da537b
languageName: node
linkType: hard
-"@jest/environment@npm:^24.3.0, @jest/environment@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/environment@npm:24.9.0"
+"@jest/environment@npm:^26.6.0, @jest/environment@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/environment@npm:26.6.2"
dependencies:
- "@jest/fake-timers": ^24.9.0
- "@jest/transform": ^24.9.0
- "@jest/types": ^24.9.0
- jest-mock: ^24.9.0
- checksum: 6a663c05713ad0cd1dc7c5bf715a3e5e655e73ee02497ab0a9dea4fe0855226504535c504d265c054c8b4bafb1216dff0e7e0e3b4ed064bda4c3d6efe74fe369
+ "@jest/fake-timers": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ jest-mock: ^26.6.2
+ checksum: 7748081b2a758161785aff161780b05084dccaff908c8ed82c04f7da5d5e5439e77b5eb667306d5c4e1422653c7a67ed2955f26704f48c65c404195e1e21780a
languageName: node
linkType: hard
-"@jest/fake-timers@npm:^24.3.0, @jest/fake-timers@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/fake-timers@npm:24.9.0"
+"@jest/fake-timers@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/fake-timers@npm:26.6.2"
dependencies:
- "@jest/types": ^24.9.0
- jest-message-util: ^24.9.0
- jest-mock: ^24.9.0
- checksum: d49ab33e28b070d5be75659ed89d4b79e74012c8c28ecf51cf9b89732ba5b2a57129787dd144949c048a0460ed62f1e32079a4b10d896c75bde024699d7a2c5c
+ "@jest/types": ^26.6.2
+ "@sinonjs/fake-timers": ^6.0.1
+ "@types/node": "*"
+ jest-message-util: ^26.6.2
+ jest-mock: ^26.6.2
+ jest-util: ^26.6.2
+ checksum: c732658fac4014a424e6629495296c3b2e8697787518df34c74539ec139625e7141ad792b8a4d3c8392b47954ad01be9846b7c57cc8c631490969e7cafa84e6a
languageName: node
linkType: hard
-"@jest/reporters@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/reporters@npm:24.9.0"
+"@jest/globals@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/globals@npm:26.6.2"
+ dependencies:
+ "@jest/environment": ^26.6.2
+ "@jest/types": ^26.6.2
+ expect: ^26.6.2
+ checksum: 49b28d0cc7e99898eeaf23e6899e3c9ee25a2a4831caa3eb930ec1722de2e92a0e8a6a6f649438fdd20ff0c0d5e522dd78cb719466a57f011a88d60419b903c5
+ languageName: node
+ linkType: hard
+
+"@jest/reporters@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/reporters@npm:26.6.2"
dependencies:
- "@jest/environment": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/transform": ^24.9.0
- "@jest/types": ^24.9.0
- chalk: ^2.0.1
+ "@bcoe/v8-coverage": ^0.2.3
+ "@jest/console": ^26.6.2
+ "@jest/test-result": ^26.6.2
+ "@jest/transform": ^26.6.2
+ "@jest/types": ^26.6.2
+ chalk: ^4.0.0
+ collect-v8-coverage: ^1.0.0
exit: ^0.1.2
glob: ^7.1.2
- istanbul-lib-coverage: ^2.0.2
- istanbul-lib-instrument: ^3.0.1
- istanbul-lib-report: ^2.0.4
- istanbul-lib-source-maps: ^3.0.1
- istanbul-reports: ^2.2.6
- jest-haste-map: ^24.9.0
- jest-resolve: ^24.9.0
- jest-runtime: ^24.9.0
- jest-util: ^24.9.0
- jest-worker: ^24.6.0
- node-notifier: ^5.4.2
- slash: ^2.0.0
+ graceful-fs: ^4.2.4
+ istanbul-lib-coverage: ^3.0.0
+ istanbul-lib-instrument: ^4.0.3
+ istanbul-lib-report: ^3.0.0
+ istanbul-lib-source-maps: ^4.0.0
+ istanbul-reports: ^3.0.2
+ jest-haste-map: ^26.6.2
+ jest-resolve: ^26.6.2
+ jest-util: ^26.6.2
+ jest-worker: ^26.6.2
+ node-notifier: ^8.0.0
+ slash: ^3.0.0
source-map: ^0.6.0
- string-length: ^2.0.0
- checksum: 588539d0d9a5e483e5e09c1dd7c42b6490199cb0588a9ae8eb1b2c34a74cf7da0bba5dd425c19307a9d95a075bfc4feb0221d3847b9542a3a727342e3f30e5a1
+ string-length: ^4.0.1
+ terminal-link: ^2.0.0
+ v8-to-istanbul: ^7.0.0
+ dependenciesMeta:
+ node-notifier:
+ optional: true
+ checksum: 53c7a697c562becb7682a9a6248ea553013bf7048c08ddce5bf9fb53b975fc9f799ca163f7494e0be6c4d3cf181c8bc392976268da52b7de8ce4470b971ed84e
languageName: node
linkType: hard
-"@jest/source-map@npm:^24.3.0, @jest/source-map@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/source-map@npm:24.9.0"
+"@jest/source-map@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/source-map@npm:26.6.2"
dependencies:
callsites: ^3.0.0
- graceful-fs: ^4.1.15
+ graceful-fs: ^4.2.4
source-map: ^0.6.0
- checksum: 00479faf6854d5d183b94465db1a0876980ced72bf26cb6a2fe8c04977dc2692e6529faa6b64269492d1d9cab51feebaac9d453d1e6bb1306fc15777143b72af
+ checksum: b171cef442738887dda85527ab78229996db5946c6435ddb56d442c2851889ba493729a9de73100f1a31b9a31a91207b55bc75656ae7df9843d65078b925385e
languageName: node
linkType: hard
-"@jest/test-result@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/test-result@npm:24.9.0"
+"@jest/test-result@npm:^26.6.0, @jest/test-result@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/test-result@npm:26.6.2"
dependencies:
- "@jest/console": ^24.9.0
- "@jest/types": ^24.9.0
+ "@jest/console": ^26.6.2
+ "@jest/types": ^26.6.2
"@types/istanbul-lib-coverage": ^2.0.0
- checksum: 7145c7baa289798881160b3cfa5b2466b2636238a52b77cf46e5468ffe2881fb8fb8d4966155a8d508b26a8d29a302a9eb9037de1a371e5dc9bb6e94837c0ae7
+ collect-v8-coverage: ^1.0.0
+ checksum: dcb6175825231e9377e43546aed4edd6acc22f1788d5f099bbba36bb55b9115a92f760e88426c076bcdeff5a50d8f697327a920db0cd1fb339781fc3713fa8c7
languageName: node
linkType: hard
-"@jest/test-sequencer@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/test-sequencer@npm:24.9.0"
+"@jest/test-sequencer@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "@jest/test-sequencer@npm:26.6.3"
dependencies:
- "@jest/test-result": ^24.9.0
- jest-haste-map: ^24.9.0
- jest-runner: ^24.9.0
- jest-runtime: ^24.9.0
- checksum: 049bea54743925b361bf10acce8a1de8e9a2ac9b5158044d484f3fc5748f975d52d8260e9ff2621fc29b5b586a17e54693670c7dfa75b09f5e83e87f2a63aac2
+ "@jest/test-result": ^26.6.2
+ graceful-fs: ^4.2.4
+ jest-haste-map: ^26.6.2
+ jest-runner: ^26.6.3
+ jest-runtime: ^26.6.3
+ checksum: a3450b3d7057f74da1828bb7b3658f228a7c049dc4082c5c49b8bafbd8f69d102a8a99007b7ed5d43464712f7823f53fe3564fda17787f178c219cccf329a461
languageName: node
linkType: hard
-"@jest/transform@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/transform@npm:24.9.0"
+"@jest/transform@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "@jest/transform@npm:26.6.2"
dependencies:
"@babel/core": ^7.1.0
- "@jest/types": ^24.9.0
- babel-plugin-istanbul: ^5.1.0
- chalk: ^2.0.1
+ "@jest/types": ^26.6.2
+ babel-plugin-istanbul: ^6.0.0
+ chalk: ^4.0.0
convert-source-map: ^1.4.0
fast-json-stable-stringify: ^2.0.0
- graceful-fs: ^4.1.15
- jest-haste-map: ^24.9.0
- jest-regex-util: ^24.9.0
- jest-util: ^24.9.0
- micromatch: ^3.1.10
+ graceful-fs: ^4.2.4
+ jest-haste-map: ^26.6.2
+ jest-regex-util: ^26.0.0
+ jest-util: ^26.6.2
+ micromatch: ^4.0.2
pirates: ^4.0.1
- realpath-native: ^1.1.0
- slash: ^2.0.0
+ slash: ^3.0.0
source-map: ^0.6.1
- write-file-atomic: 2.4.1
- checksum: 0153bcd6a9b464c85ee8b67c360f745ab8e41b1b363220f1f12ed644a667dceb6666366017f7f849a8f6cde960020b638b8557eae852af0537520b0903881fbd
- languageName: node
- linkType: hard
-
-"@jest/types@npm:^24.3.0, @jest/types@npm:^24.9.0":
- version: 24.9.0
- resolution: "@jest/types@npm:24.9.0"
- dependencies:
- "@types/istanbul-lib-coverage": ^2.0.0
- "@types/istanbul-reports": ^1.1.1
- "@types/yargs": ^13.0.0
- checksum: 603698f774cf22f9d16a0e0fac9e10e7db21052aebfa33db154c8a5940e0eb1fa9c079a8c91681041ad3aeee2adfa950608dd0c663130316ba034b8bca7b301c
+ write-file-atomic: ^3.0.0
+ checksum: 31667b925a2f3b310d854495da0ab67be8f5da24df76ecfc51162e75f1140aed5d18069ba190cb5e0c7e492b04272c8c79076ddf5bbcff530ee80a16a02c4545
languageName: node
linkType: hard
-"@jest/types@npm:^26.6.2":
+"@jest/types@npm:^26.6.0, @jest/types@npm:^26.6.2":
version: 26.6.2
resolution: "@jest/types@npm:26.6.2"
dependencies:
languageName: node
linkType: hard
+"@jridgewell/gen-mapping@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "@jridgewell/gen-mapping@npm:0.3.5"
+ dependencies:
+ "@jridgewell/set-array": ^1.2.1
+ "@jridgewell/sourcemap-codec": ^1.4.10
+ "@jridgewell/trace-mapping": ^0.3.24
+ checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52
+ languageName: node
+ linkType: hard
+
+"@jridgewell/resolve-uri@npm:^3.1.0":
+ version: 3.1.2
+ resolution: "@jridgewell/resolve-uri@npm:3.1.2"
+ checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870
+ languageName: node
+ linkType: hard
+
+"@jridgewell/set-array@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "@jridgewell/set-array@npm:1.2.1"
+ checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10
+ languageName: node
+ linkType: hard
+
+"@jridgewell/source-map@npm:^0.3.3":
+ version: 0.3.6
+ resolution: "@jridgewell/source-map@npm:0.3.6"
+ dependencies:
+ "@jridgewell/gen-mapping": ^0.3.5
+ "@jridgewell/trace-mapping": ^0.3.25
+ checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30
+ languageName: node
+ linkType: hard
+
+"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14":
+ version: 1.4.15
+ resolution: "@jridgewell/sourcemap-codec@npm:1.4.15"
+ checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8
+ languageName: node
+ linkType: hard
+
+"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25":
+ version: 0.3.25
+ resolution: "@jridgewell/trace-mapping@npm:0.3.25"
+ dependencies:
+ "@jridgewell/resolve-uri": ^3.1.0
+ "@jridgewell/sourcemap-codec": ^1.4.14
+ checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34
+ languageName: node
+ linkType: hard
+
"@material-ui/core@npm:3.9.3":
version: 3.9.3
resolution: "@material-ui/core@npm:3.9.3"
languageName: node
linkType: hard
-"@mrmlnc/readdir-enhanced@npm:^2.2.1":
- version: 2.2.1
- resolution: "@mrmlnc/readdir-enhanced@npm:2.2.1"
- dependencies:
- call-me-maybe: ^1.0.1
- glob-to-regexp: ^0.3.0
- checksum: d3b82b29368821154ce8e10bef5ccdbfd070d3e9601643c99ea4607e56f3daeaa4e755dd6d2355da20762c695c1b0570543d9f84b48f70c211ec09c4aaada2e1
- languageName: node
- linkType: hard
-
"@nodelib/fs.scandir@npm:2.1.5":
version: 2.1.5
resolution: "@nodelib/fs.scandir@npm:2.1.5"
languageName: node
linkType: hard
-"@nodelib/fs.stat@npm:^1.1.2":
- version: 1.1.3
- resolution: "@nodelib/fs.stat@npm:1.1.3"
- checksum: 318deab369b518a34778cdaa0054dd28a4381c0c78e40bbd20252f67d084b1d7bf9295fea4423de2c19ac8e1a34f120add9125f481b2a710f7068bcac7e3e305
- languageName: node
- linkType: hard
-
"@nodelib/fs.walk@npm:^1.2.3":
- version: 1.2.7
- resolution: "@nodelib/fs.walk@npm:1.2.7"
+ version: 1.2.8
+ resolution: "@nodelib/fs.walk@npm:1.2.8"
dependencies:
"@nodelib/fs.scandir": 2.1.5
fastq: ^1.6.0
- checksum: f5286c39c2f9cc0e89b2cbee6b735c5cf572c37f9c0a47a16ce3c1d9ba5d488f3153976ceb1b984ad09dbd8d1de620fab3e7b0ef2b64a006267d0895a16ce95c
+ checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53
languageName: node
linkType: hard
languageName: node
linkType: hard
+"@pmmmwh/react-refresh-webpack-plugin@npm:0.4.2":
+ version: 0.4.2
+ resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.4.2"
+ dependencies:
+ ansi-html: ^0.0.7
+ error-stack-parser: ^2.0.6
+ html-entities: ^1.2.1
+ native-url: ^0.2.6
+ schema-utils: ^2.6.5
+ source-map: ^0.7.3
+ peerDependencies:
+ "@types/webpack": 4.x
+ react-refresh: ^0.8.3
+ sockjs-client: ^1.4.0
+ type-fest: ^0.13.1
+ webpack: ">=4.43.0 <6.0.0"
+ webpack-dev-server: 3.x
+ webpack-hot-middleware: 2.x
+ webpack-plugin-serve: 0.x || 1.x
+ peerDependenciesMeta:
+ "@types/webpack":
+ optional: true
+ sockjs-client:
+ optional: true
+ type-fest:
+ optional: true
+ webpack-dev-server:
+ optional: true
+ webpack-hot-middleware:
+ optional: true
+ webpack-plugin-serve:
+ optional: true
+ checksum: b7f70926f64c996fb9a9dd0993a2b90f516fd01e5dab2841ff4f2a66cabf901cdb08c14698e3e1daf02cbcdd3170ab1736a6ad65fe7c1ffcfab2543b290a201d
+ languageName: node
+ linkType: hard
+
"@popperjs/core@npm:^2.9.0":
version: 2.11.6
resolution: "@popperjs/core@npm:2.11.6"
languageName: node
linkType: hard
+"@rollup/plugin-node-resolve@npm:^7.1.1":
+ version: 7.1.3
+ resolution: "@rollup/plugin-node-resolve@npm:7.1.3"
+ dependencies:
+ "@rollup/pluginutils": ^3.0.8
+ "@types/resolve": 0.0.8
+ builtin-modules: ^3.1.0
+ is-module: ^1.0.0
+ resolve: ^1.14.2
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0
+ checksum: e787c35f123652762d212b63f8cfaf577307434a935466397021c31b71d0d94357c6fa4e326b49bf44b959e22e41bc21f5648470eabec086566e7c36c5d041b1
+ languageName: node
+ linkType: hard
+
+"@rollup/plugin-replace@npm:^2.3.1":
+ version: 2.4.2
+ resolution: "@rollup/plugin-replace@npm:2.4.2"
+ dependencies:
+ "@rollup/pluginutils": ^3.1.0
+ magic-string: ^0.25.7
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0
+ checksum: b2f1618ee5526d288e2f8ae328dcb326e20e8dc8bd1f60d3e14d6708a5832e4aa44811f7d493f4aed2deeadca86e3b6b0503cd39bf50cfb4b595bb9da027fad0
+ languageName: node
+ linkType: hard
+
+"@rollup/pluginutils@npm:^3.0.8, @rollup/pluginutils@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "@rollup/pluginutils@npm:3.1.0"
+ dependencies:
+ "@types/estree": 0.0.39
+ estree-walker: ^1.0.1
+ picomatch: ^2.2.2
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0
+ checksum: 8be16e27863c219edbb25a4e6ec2fe0e1e451d9e917b6a43cf2ae5bc025a6b8faaa40f82a6e53b66d0de37b58ff472c6c3d57a83037ae635041f8df959d6d9aa
+ languageName: node
+ linkType: hard
+
"@sinonjs/commons@npm:^1, @sinonjs/commons@npm:^1.3.0, @sinonjs/commons@npm:^1.4.0, @sinonjs/commons@npm:^1.7.0":
version: 1.8.3
resolution: "@sinonjs/commons@npm:1.8.3"
languageName: node
linkType: hard
+"@sinonjs/fake-timers@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "@sinonjs/fake-timers@npm:6.0.1"
+ dependencies:
+ "@sinonjs/commons": ^1.7.0
+ checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11
+ languageName: node
+ linkType: hard
+
"@sinonjs/formatio@npm:^3.2.1":
version: 3.2.2
resolution: "@sinonjs/formatio@npm:3.2.2"
languageName: node
linkType: hard
-"@svgr/babel-plugin-add-jsx-attribute@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:4.2.0"
- checksum: 3e67319517c4dbed247ca1c28050028fd8990d0745d28424c70db0999143b8e19f2dba563546e1acb842e89d4732149257462b432d6e8935712eba935c5928c3
+"@surma/rollup-plugin-off-main-thread@npm:^1.1.1":
+ version: 1.4.2
+ resolution: "@surma/rollup-plugin-off-main-thread@npm:1.4.2"
+ dependencies:
+ ejs: ^2.6.1
+ magic-string: ^0.25.0
+ checksum: da721792036a0e1253911f9b5280e6cb236024d7d2255bde3b6e87587c0ea8f46404224c8c032a27ee11ab3244eda752587fb37ec78c2e64eb53e10557373102
languageName: node
linkType: hard
-"@svgr/babel-plugin-remove-jsx-attribute@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:4.2.0"
- checksum: cc831c7b77a333548771190bcb50ad5f121c4cd5f397a7628b6c14df93a69e89a1d4a0b36b0bceda91f46c6fed3074406851252368aa6772248b1023f1b903f0
+"@svgr/babel-plugin-add-jsx-attribute@npm:^5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:5.4.0"
+ checksum: 1c538cf312b486598c6aea17f9b72d7fc308eb5dd32effd804630206a185493b8a828ff980ceb29d57d8319c085614c7cea967be709c71ae77702a4c30037011
languageName: node
linkType: hard
-"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:4.2.0"
- checksum: dedd4c4b9947b44daa02ab7846f8931463f70eca62bc58a16ffec2dd3538ec12e4e654ce7f4fcea79f88f176bba4548352035a5da0e7bc56c6197d44e0e0bd9c
+"@svgr/babel-plugin-remove-jsx-attribute@npm:^5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:5.4.0"
+ checksum: ad2231bfcb14daa944201df66236c222cde05a07c4cffaecab1d36d33f606b6caf17bda21844fc435780c1a27195e49beb8397536fe5e7545dfffcfbbcecb7f8
languageName: node
linkType: hard
-"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:4.2.0"
- checksum: 5c0af9239454ddfa5cadceff6a5292e04601ddb60ccaa78197ff825b9577d868b277d22225be31118926249e79f12f5dc44c03e284838325230e421c98d497ed
+"@svgr/babel-plugin-remove-jsx-empty-expression@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:5.0.1"
+ checksum: 175c8f13ddcb0744f7c3910ebed3799cfb961a75bff130e1ed2071c87ca8b8df8964825c988e511b2e3c5dbf48ad3d4fbbb6989edc53294253df40cf2a24375e
languageName: node
linkType: hard
-"@svgr/babel-plugin-svg-dynamic-title@npm:^4.3.3":
- version: 4.3.3
- resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:4.3.3"
- checksum: 401964bb8aa4bcc9fab5f3eca4b73099f6c8a984b791a1b97a5544d6da1108f92ddc32275de8e5a12e330f129532ded6a804efcda20338b2062ce3087309f317
+"@svgr/babel-plugin-replace-jsx-attribute-value@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:5.0.1"
+ checksum: 68f4e2a5b95eca44e22fce485dc2ddd10adabe2b38f6db3ef9071b35e84bf379685f7acab6c05b7a82f722328c02f6424f8252c6dd5c2c4ed2f00104072b1dfe
languageName: node
linkType: hard
-"@svgr/babel-plugin-svg-em-dimensions@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:4.2.0"
- checksum: f3a86e2e29d1bc67a42bf80240680be5ca59219bc63193e517619385c9888a13eb369cc97bdecbed16b392db7f3faa56cf397f1be215e2ce27316249f9deff97
+"@svgr/babel-plugin-svg-dynamic-title@npm:^5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:5.4.0"
+ checksum: c46feb52454acea32031d1d881a81334f2e5f838ed25a2d9014acb5e9541d404405911e86dbee8bee9f1e43c9e07118123a07dc297962dbed0c4c5a86bdc4be9
languageName: node
linkType: hard
-"@svgr/babel-plugin-transform-react-native-svg@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:4.2.0"
- checksum: b847d9356fd67844bdb0bf1492f84e3a2adc17ee3e89d3fb26734382155d5b192a5575114d3aafb5bc2e364e4e536ce56c25c92aba1c4c08cef7a5441922cfa4
+"@svgr/babel-plugin-svg-em-dimensions@npm:^5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:5.4.0"
+ checksum: 0d19b26147bbba932bd973258dab4a80a7ea6b9d674713186f0e10fa21a9e3aa4327326b2bf1892e8051712bce0ea30561eb187ca27bb241d33c350cea51ac88
languageName: node
linkType: hard
-"@svgr/babel-plugin-transform-svg-component@npm:^4.2.0":
- version: 4.2.0
- resolution: "@svgr/babel-plugin-transform-svg-component@npm:4.2.0"
- checksum: 17084831fb03b78d868155f24e47c6d9a92215a7519d17604cdd000f4a2f873ad16c499a7b421c7e2577e7e5ac3dfe02eb693965881a65fe141ad57600e117e1
+"@svgr/babel-plugin-transform-react-native-svg@npm:^5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:5.4.0"
+ checksum: 8ac5dc9fb2dee24addc74dbcb169860c95a69247606f986eabb0618fb300dd08e8f220891b758e62c051428ba04d8dd50f2c2bf877e15fa190e6d384d1ccd2ad
languageName: node
linkType: hard
-"@svgr/babel-preset@npm:^4.3.3":
- version: 4.3.3
- resolution: "@svgr/babel-preset@npm:4.3.3"
+"@svgr/babel-plugin-transform-svg-component@npm:^5.5.0":
+ version: 5.5.0
+ resolution: "@svgr/babel-plugin-transform-svg-component@npm:5.5.0"
+ checksum: 94c3fed490deb8544af4ea32a5d78a840334cdcc8a5a33fe8ea9f1c220a4d714d57c9e10934492de99b7e1acc17963b1749a49927e27b1e839a4dc3c893605c7
+ languageName: node
+ linkType: hard
+
+"@svgr/babel-preset@npm:^5.5.0":
+ version: 5.5.0
+ resolution: "@svgr/babel-preset@npm:5.5.0"
dependencies:
- "@svgr/babel-plugin-add-jsx-attribute": ^4.2.0
- "@svgr/babel-plugin-remove-jsx-attribute": ^4.2.0
- "@svgr/babel-plugin-remove-jsx-empty-expression": ^4.2.0
- "@svgr/babel-plugin-replace-jsx-attribute-value": ^4.2.0
- "@svgr/babel-plugin-svg-dynamic-title": ^4.3.3
- "@svgr/babel-plugin-svg-em-dimensions": ^4.2.0
- "@svgr/babel-plugin-transform-react-native-svg": ^4.2.0
- "@svgr/babel-plugin-transform-svg-component": ^4.2.0
- checksum: a1ccdd34ac96ecb73f8ebb02a111602935b59cfa824fa9b9c20c38bc88bb9f176caab602f81c1dc3b00b0d56795ebc3d10153e97466291345cfc8eaf92e13d5f
+ "@svgr/babel-plugin-add-jsx-attribute": ^5.4.0
+ "@svgr/babel-plugin-remove-jsx-attribute": ^5.4.0
+ "@svgr/babel-plugin-remove-jsx-empty-expression": ^5.0.1
+ "@svgr/babel-plugin-replace-jsx-attribute-value": ^5.0.1
+ "@svgr/babel-plugin-svg-dynamic-title": ^5.4.0
+ "@svgr/babel-plugin-svg-em-dimensions": ^5.4.0
+ "@svgr/babel-plugin-transform-react-native-svg": ^5.4.0
+ "@svgr/babel-plugin-transform-svg-component": ^5.5.0
+ checksum: 5d396c4499c9ff2df9db6d08a160d10386b9f459cb9c2bb5ee183ab03b2f46c8ef3c9a070f1eee93f4e4433a5f00704e7632b1386078eb697ad8a2b38edb8522
languageName: node
linkType: hard
-"@svgr/core@npm:^4.3.3":
- version: 4.3.3
- resolution: "@svgr/core@npm:4.3.3"
+"@svgr/core@npm:^5.4.0":
+ version: 5.5.0
+ resolution: "@svgr/core@npm:5.5.0"
dependencies:
- "@svgr/plugin-jsx": ^4.3.3
- camelcase: ^5.3.1
- cosmiconfig: ^5.2.1
- checksum: 014c7dae4e1523ffdb6662a7396975476b802614d5477780b71e292c2fe789faa3e0572ce845b3dbd45098b0e3affdfc63dea742e316c5d1bac2d2c77afd8838
+ "@svgr/plugin-jsx": ^5.5.0
+ camelcase: ^6.2.0
+ cosmiconfig: ^7.0.0
+ checksum: 39b230151e30b9ca8551d10674e50efb821d1a49ce10969b09587af130780eba581baa1e321b0922f48331943096f05590aa6ae92d88d011d58093a89dd34158
languageName: node
linkType: hard
-"@svgr/hast-util-to-babel-ast@npm:^4.3.2":
- version: 4.3.2
- resolution: "@svgr/hast-util-to-babel-ast@npm:4.3.2"
+"@svgr/hast-util-to-babel-ast@npm:^5.5.0":
+ version: 5.5.0
+ resolution: "@svgr/hast-util-to-babel-ast@npm:5.5.0"
dependencies:
- "@babel/types": ^7.4.4
- checksum: 0d68084731afd1818ddbaecfc9201a24e10370f88c894eaaf48da9c4db93cd4bf5b7a8e03d1fcd4446165718e5ee124450ecab9f9a22208f87b2fa223ea6d3ca
+ "@babel/types": ^7.12.6
+ checksum: a03c1c7ab92b1a6dbd7671b0b78df4c07e8d808ff092671554a78752ec0c0425c03b6c82569a5f33903d191c73379eedf631f23aeb30b7a70185f5f2fc67fae6
languageName: node
linkType: hard
-"@svgr/plugin-jsx@npm:^4.3.3":
- version: 4.3.3
- resolution: "@svgr/plugin-jsx@npm:4.3.3"
+"@svgr/plugin-jsx@npm:^5.4.0, @svgr/plugin-jsx@npm:^5.5.0":
+ version: 5.5.0
+ resolution: "@svgr/plugin-jsx@npm:5.5.0"
dependencies:
- "@babel/core": ^7.4.5
- "@svgr/babel-preset": ^4.3.3
- "@svgr/hast-util-to-babel-ast": ^4.3.2
- svg-parser: ^2.0.0
- checksum: 880ae8c6b841c84a71ef3b1b6954089925f4b5f4a1f31767b2ce9004d7f72bfff7d66af05099a3e48612f10b242206d97a0991d366f3648c3e8df5c63cf665f5
+ "@babel/core": ^7.12.3
+ "@svgr/babel-preset": ^5.5.0
+ "@svgr/hast-util-to-babel-ast": ^5.5.0
+ svg-parser: ^2.0.2
+ checksum: e053f8dd6bfcd72377b432dd5b1db3c89d503d29839639a87f85b597a680d0b69e33a4db376f5a1074a89615f7157cd36f63f94bdb4083a0fd5bbe918c7fcb9b
languageName: node
linkType: hard
-"@svgr/plugin-svgo@npm:^4.3.1":
- version: 4.3.1
- resolution: "@svgr/plugin-svgo@npm:4.3.1"
+"@svgr/plugin-svgo@npm:^5.4.0":
+ version: 5.5.0
+ resolution: "@svgr/plugin-svgo@npm:5.5.0"
dependencies:
- cosmiconfig: ^5.2.1
- merge-deep: ^3.0.2
+ cosmiconfig: ^7.0.0
+ deepmerge: ^4.2.2
svgo: ^1.2.2
- checksum: 8d68f29d9c7d9c00fc079de25b58e0f83365cddc0e079e792ec9d76c7a676269029d22466aa9ab8493f0794130711fb6f20e9779cfa197f84da20285c37f2a3c
+ checksum: bef5d09581349afdf654209f82199670649cc749b81ff5f310ce4a3bbad749cde877c9b1a711dd9ced51224e2b5b5a720d242bdf183fa0f83e08e8d5e069b0b6
languageName: node
linkType: hard
-"@svgr/webpack@npm:4.3.3":
- version: 4.3.3
- resolution: "@svgr/webpack@npm:4.3.3"
- dependencies:
- "@babel/core": ^7.4.5
- "@babel/plugin-transform-react-constant-elements": ^7.0.0
- "@babel/preset-env": ^7.4.5
- "@babel/preset-react": ^7.0.0
- "@svgr/core": ^4.3.3
- "@svgr/plugin-jsx": ^4.3.3
- "@svgr/plugin-svgo": ^4.3.1
- loader-utils: ^1.2.3
- checksum: e5ec59ee492c73c26cd22220ac1038fb61681cb22048485aa68edf850328be6effe93900fbb60dab735fad7e6939a598c5c9fe46768c1cb74c1b3a3330555e43
+"@svgr/webpack@npm:5.4.0":
+ version: 5.4.0
+ resolution: "@svgr/webpack@npm:5.4.0"
+ dependencies:
+ "@babel/core": ^7.9.0
+ "@babel/plugin-transform-react-constant-elements": ^7.9.0
+ "@babel/preset-env": ^7.9.5
+ "@babel/preset-react": ^7.9.4
+ "@svgr/core": ^5.4.0
+ "@svgr/plugin-jsx": ^5.4.0
+ "@svgr/plugin-svgo": ^5.4.0
+ loader-utils: ^2.0.0
+ checksum: f814b0eb4106ce7e9f0df3ed07969f11d435e82a331d76a1bfde6de7614b78591d2e9dce4683e5c7a121d427c2ce9bade542d2256aee33a62aa14581e243f556
languageName: node
linkType: hard
languageName: node
linkType: hard
-"@types/babel__core@npm:^7.1.0":
- version: 7.1.14
- resolution: "@types/babel__core@npm:7.1.14"
+"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.7":
+ version: 7.20.5
+ resolution: "@types/babel__core@npm:7.20.5"
dependencies:
- "@babel/parser": ^7.1.0
- "@babel/types": ^7.0.0
+ "@babel/parser": ^7.20.7
+ "@babel/types": ^7.20.7
"@types/babel__generator": "*"
"@types/babel__template": "*"
"@types/babel__traverse": "*"
- checksum: de4a1a4905e4fb66e9b5ea185704b209892fa104b6aec8705021a3ddf0ff017234c41a1b0bffb0acf2c361afd5352c2d216e3548c8a702ba2558ab63f0bf2200
+ checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845
languageName: node
linkType: hard
languageName: node
linkType: hard
+"@types/babel__traverse@npm:^7.0.4":
+ version: 7.20.5
+ resolution: "@types/babel__traverse@npm:7.20.5"
+ dependencies:
+ "@babel/types": ^7.20.7
+ checksum: 608e0ab4fc31cd47011d98942e6241b34d461608c0c0e153377c5fd822c436c475f1ded76a56bfa76a1adf8d9266b727bbf9bfac90c4cb152c97f30dadc5b7e8
+ languageName: node
+ linkType: hard
+
"@types/cheerio@npm:*":
version: 0.22.29
resolution: "@types/cheerio@npm:0.22.29"
languageName: node
linkType: hard
+"@types/eslint@npm:^7.29.0":
+ version: 7.29.0
+ resolution: "@types/eslint@npm:7.29.0"
+ dependencies:
+ "@types/estree": "*"
+ "@types/json-schema": "*"
+ checksum: df13991c554954353ce8f3bb03e19da6cc71916889443d68d178d4f858b561ba4cc4a4f291c6eb9eebb7f864b12b9b9313051b3a8dfea3e513dadf3188a77bdf
+ languageName: node
+ linkType: hard
+
+"@types/estree@npm:*":
+ version: 1.0.5
+ resolution: "@types/estree@npm:1.0.5"
+ checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a
+ languageName: node
+ linkType: hard
+
+"@types/estree@npm:0.0.39":
+ version: 0.0.39
+ resolution: "@types/estree@npm:0.0.39"
+ checksum: 412fb5b9868f2c418126451821833414189b75cc6bf84361156feed733e3d92ec220b9d74a89e52722e03d5e241b2932732711b7497374a404fad49087adc248
+ languageName: node
+ linkType: hard
+
"@types/file-saver@npm:2.0.0":
version: 2.0.0
resolution: "@types/file-saver@npm:2.0.0"
languageName: node
linkType: hard
+"@types/graceful-fs@npm:^4.1.2":
+ version: 4.1.9
+ resolution: "@types/graceful-fs@npm:4.1.9"
+ dependencies:
+ "@types/node": "*"
+ checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256
+ languageName: node
+ linkType: hard
+
"@types/history@npm:*":
version: 4.7.8
resolution: "@types/history@npm:4.7.8"
languageName: node
linkType: hard
+"@types/html-minifier-terser@npm:^5.0.0":
+ version: 5.1.2
+ resolution: "@types/html-minifier-terser@npm:5.1.2"
+ checksum: 4bca779c44d2aebe4cc4036c5db370abe7466249038e9c5996cb3c192debeff1c75b7a2ab78e5fd2a014ad24ebf0f357f9a174a4298540dc1e1317d43aa69cfa
+ languageName: node
+ linkType: hard
+
"@types/is-image@npm:3.0.0":
version: 3.0.0
resolution: "@types/is-image@npm:3.0.0"
languageName: node
linkType: hard
-"@types/istanbul-lib-report@npm:*":
- version: 3.0.0
- resolution: "@types/istanbul-lib-report@npm:3.0.0"
- dependencies:
- "@types/istanbul-lib-coverage": "*"
- checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36
+"@types/istanbul-lib-coverage@npm:^2.0.1":
+ version: 2.0.6
+ resolution: "@types/istanbul-lib-coverage@npm:2.0.6"
+ checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778
languageName: node
linkType: hard
-"@types/istanbul-reports@npm:^1.1.1":
- version: 1.1.2
- resolution: "@types/istanbul-reports@npm:1.1.2"
+"@types/istanbul-lib-report@npm:*":
+ version: 3.0.0
+ resolution: "@types/istanbul-lib-report@npm:3.0.0"
dependencies:
"@types/istanbul-lib-coverage": "*"
- "@types/istanbul-lib-report": "*"
- checksum: 00866e815d1e68d0a590d691506937b79d8d65ad8eab5ed34dbfee66136c7c0f4ea65327d32046d5fe469f22abea2b294987591dc66365ebc3991f7e413b2d78
+ checksum: 656398b62dc288e1b5226f8880af98087233cdb90100655c989a09f3052b5775bf98ba58a16c5ae642fb66c61aba402e07a9f2bff1d1569e3b306026c59f3f36
languageName: node
linkType: hard
languageName: node
linkType: hard
-"@types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.7":
+"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.3, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.8":
+ version: 7.0.15
+ resolution: "@types/json-schema@npm:7.0.15"
+ checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98
+ languageName: node
+ linkType: hard
+
+"@types/json-schema@npm:^7.0.5":
version: 7.0.7
resolution: "@types/json-schema@npm:7.0.7"
checksum: ea3b409235862d28122751158f4054e729e31ad844bd7b8b23868f38c518047b1c0e8e4e7cc293e02c31a2fb8cfc8a4506c2de2a745cf78b218e064fb8898cd4
languageName: node
linkType: hard
+"@types/json5@npm:^0.0.29":
+ version: 0.0.29
+ resolution: "@types/json5@npm:0.0.29"
+ checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac
+ languageName: node
+ linkType: hard
+
"@types/jss@npm:^9.5.6":
version: 9.5.8
resolution: "@types/jss@npm:9.5.8"
languageName: node
linkType: hard
+"@types/prettier@npm:^2.0.0":
+ version: 2.7.3
+ resolution: "@types/prettier@npm:2.7.3"
+ checksum: 705384209cea6d1433ff6c187c80dcc0b95d99d5c5ce21a46a9a58060c527973506822e428789d842761e0280d25e3359300f017fbe77b9755bc772ab3dc2f83
+ languageName: node
+ linkType: hard
+
"@types/prop-types@npm:*":
version: 15.7.3
resolution: "@types/prop-types@npm:15.7.3"
languageName: node
linkType: hard
+"@types/resolve@npm:0.0.8":
+ version: 0.0.8
+ resolution: "@types/resolve@npm:0.0.8"
+ dependencies:
+ "@types/node": "*"
+ checksum: f241bb773ab14b14500623ac3b57c52006ce32b20426b6d8bf2fe5fdc0344f42c77ac0f94ff57b443ae1d320a1a86c62b4e47239f0321699404402fbeb24bad6
+ languageName: node
+ linkType: hard
+
"@types/scheduler@npm:*":
version: 0.16.1
resolution: "@types/scheduler@npm:0.16.1"
languageName: node
linkType: hard
-"@types/stack-utils@npm:^1.0.1":
- version: 1.0.1
- resolution: "@types/stack-utils@npm:1.0.1"
- checksum: 9dc052b575acfeca3f165fb19d87b7b2989d54ed7d64a7eeb0b7587bc5795ef1f2c2b1511a44dcf0831ef35b8ce3486f97fcbfdd50c01f68aa297de31502c9d9
+"@types/source-list-map@npm:*":
+ version: 0.1.6
+ resolution: "@types/source-list-map@npm:0.1.6"
+ checksum: 9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1
+ languageName: node
+ linkType: hard
+
+"@types/stack-utils@npm:^2.0.0":
+ version: 2.0.3
+ resolution: "@types/stack-utils@npm:2.0.3"
+ checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5
languageName: node
linkType: hard
languageName: node
linkType: hard
+"@types/tapable@npm:^1, @types/tapable@npm:^1.0.5":
+ version: 1.0.12
+ resolution: "@types/tapable@npm:1.0.12"
+ checksum: 5312fbc01e0135bd11b44cfea2bf29943807cd9675c10bbed13873ad0e73f656993fb88bb6ceaf05b12a55c570e6acc0267faf59e9c4d2f032fc833bafcf0597
+ languageName: node
+ linkType: hard
+
"@types/trusted-types@npm:*":
version: 2.0.4
resolution: "@types/trusted-types@npm:2.0.4"
languageName: node
linkType: hard
+"@types/uglify-js@npm:*":
+ version: 3.17.5
+ resolution: "@types/uglify-js@npm:3.17.5"
+ dependencies:
+ source-map: ^0.6.1
+ checksum: ffed5d63637c6ea5c155469121ee40d9b652e677e6d9eb07b72ff72bb4029ffad19049a0af6e91a5021bad6c481cff2572fbf6367e319c6885cf1537c20d861d
+ languageName: node
+ linkType: hard
+
"@types/uuid@npm:3.4.4":
version: 3.4.4
resolution: "@types/uuid@npm:3.4.4"
languageName: node
linkType: hard
-"@types/yargs-parser@npm:*":
- version: 20.2.0
- resolution: "@types/yargs-parser@npm:20.2.0"
- checksum: 54cf3f8d2c7db47e200e8c96e05b3b33ee554e78d29f3db55f04ca4b86dc6b8ff6b1349f5772268ce2d365cde0a0f4fdd92bf5933c2be2c1ea3f19f0b4599e1f
+"@types/webpack-sources@npm:*":
+ version: 3.2.3
+ resolution: "@types/webpack-sources@npm:3.2.3"
+ dependencies:
+ "@types/node": "*"
+ "@types/source-list-map": "*"
+ source-map: ^0.7.3
+ checksum: 7b557f242efaa10e4e3e18cc4171a0c98e22898570caefdd4f7b076fe8534b5abfac92c953c6604658dcb7218507f970230352511840fe9fdea31a9af3b9a906
languageName: node
linkType: hard
-"@types/yargs@npm:^13.0.0":
- version: 13.0.11
- resolution: "@types/yargs@npm:13.0.11"
+"@types/webpack@npm:^4.41.8":
+ version: 4.41.38
+ resolution: "@types/webpack@npm:4.41.38"
dependencies:
- "@types/yargs-parser": "*"
- checksum: efcbcccd20eab773970c2f103efaf69901924ab3bfc69cc5603ece0be7626937242b2f952b7ebc3708c121f8507e1d0633eb4cc04843433bf3d8b133b83bb811
+ "@types/node": "*"
+ "@types/tapable": ^1
+ "@types/uglify-js": "*"
+ "@types/webpack-sources": "*"
+ anymatch: ^3.0.0
+ source-map: ^0.6.0
+ checksum: d3de65993ef3a7621f75548c2f6f509e8f87f586032238e999743d6067030655c67e38ec5f8b32e04fa5276c83bdfb7a761773bce0e6f28605da87e3fc388e3e
+ languageName: node
+ linkType: hard
+
+"@types/yargs-parser@npm:*":
+ version: 20.2.0
+ resolution: "@types/yargs-parser@npm:20.2.0"
+ checksum: 54cf3f8d2c7db47e200e8c96e05b3b33ee554e78d29f3db55f04ca4b86dc6b8ff6b1349f5772268ce2d365cde0a0f4fdd92bf5933c2be2c1ea3f19f0b4599e1f
languageName: node
linkType: hard
languageName: node
linkType: hard
-"@typescript-eslint/eslint-plugin@npm:^2.10.0":
- version: 4.28.0
- resolution: "@typescript-eslint/eslint-plugin@npm:4.28.0"
+"@typescript-eslint/eslint-plugin@npm:^4.5.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0"
dependencies:
- "@typescript-eslint/experimental-utils": 4.28.0
- "@typescript-eslint/scope-manager": 4.28.0
+ "@typescript-eslint/experimental-utils": 4.33.0
+ "@typescript-eslint/scope-manager": 4.33.0
debug: ^4.3.1
functional-red-black-tree: ^1.0.1
+ ignore: ^5.1.8
regexpp: ^3.1.0
semver: ^7.3.5
tsutils: ^3.21.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: fb52430e3a219e45c014c8a8407ccd2830da45e6fc134d0138b99faf45e580d3ad9a3405cad98726183779d94640366c532e4519783a2a99fe072dc73705b8ad
+ checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f
languageName: node
linkType: hard
-"@typescript-eslint/experimental-utils@npm:4.28.0":
- version: 4.28.0
- resolution: "@typescript-eslint/experimental-utils@npm:4.28.0"
+"@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1":
+ version: 4.33.0
+ resolution: "@typescript-eslint/experimental-utils@npm:4.33.0"
dependencies:
"@types/json-schema": ^7.0.7
- "@typescript-eslint/scope-manager": 4.28.0
- "@typescript-eslint/types": 4.28.0
- "@typescript-eslint/typescript-estree": 4.28.0
+ "@typescript-eslint/scope-manager": 4.33.0
+ "@typescript-eslint/types": 4.33.0
+ "@typescript-eslint/typescript-estree": 4.33.0
eslint-scope: ^5.1.1
eslint-utils: ^3.0.0
peerDependencies:
eslint: "*"
- checksum: 29bcee0d581ad20043532b6b1fa0c2e844ab35a99aa67478fbb68b7be5889dc8aee1f52b72c3a51d8f4cf57e1f0ac664d92738b3eb5aea9aa8a8c72aa30a74b7
+ checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/experimental-utils@npm:^3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/experimental-utils@npm:3.10.1"
+ dependencies:
+ "@types/json-schema": ^7.0.3
+ "@typescript-eslint/types": 3.10.1
+ "@typescript-eslint/typescript-estree": 3.10.1
+ eslint-scope: ^5.0.0
+ eslint-utils: ^2.0.0
+ peerDependencies:
+ eslint: "*"
+ checksum: 635cc1afe466088b04901c2bce0e4c3e48bb74668e61e39aa74a485f856c6f9683482350d4b16b3f4c0112ce40cad2c2c427d4fe5e11a3329b3bb93286d4ab26
languageName: node
linkType: hard
-"@typescript-eslint/parser@npm:^2.10.0":
- version: 4.28.0
- resolution: "@typescript-eslint/parser@npm:4.28.0"
+"@typescript-eslint/parser@npm:^4.5.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/parser@npm:4.33.0"
dependencies:
- "@typescript-eslint/scope-manager": 4.28.0
- "@typescript-eslint/types": 4.28.0
- "@typescript-eslint/typescript-estree": 4.28.0
+ "@typescript-eslint/scope-manager": 4.33.0
+ "@typescript-eslint/types": 4.33.0
+ "@typescript-eslint/typescript-estree": 4.33.0
debug: ^4.3.1
peerDependencies:
eslint: ^5.0.0 || ^6.0.0 || ^7.0.0
peerDependenciesMeta:
typescript:
optional: true
- checksum: 08c167db5c36776a638afe52130e0bf20bfc94598da3f178171cfafb72703fc508b17667b4584cd6bea4c8c6d6922af8f7a45e9a7d6419f83fe2f6c893845d96
+ checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57
languageName: node
linkType: hard
-"@typescript-eslint/scope-manager@npm:4.28.0":
- version: 4.28.0
- resolution: "@typescript-eslint/scope-manager@npm:4.28.0"
+"@typescript-eslint/scope-manager@npm:4.33.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/scope-manager@npm:4.33.0"
dependencies:
- "@typescript-eslint/types": 4.28.0
- "@typescript-eslint/visitor-keys": 4.28.0
- checksum: cdab7ef35e18cf2c9a25a4e588cb464bd7e6a3e3f9a7dceaa567fa04202b68901b5c9dc108c3ff7b92215c373274c9d105b8061ae97d2600039345c53d33a4ae
+ "@typescript-eslint/types": 4.33.0
+ "@typescript-eslint/visitor-keys": 4.33.0
+ checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/types@npm:3.10.1"
+ checksum: 3ea820d37c2595d457acd6091ffda8b531e5d916e1cce708336bf958aa8869126f95cca3268a724f453ce13be11c5388a0a4143bf09bca51be1020ec46635d92
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/types@npm:4.33.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/types@npm:4.33.0"
+ checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:4.28.0":
- version: 4.28.0
- resolution: "@typescript-eslint/types@npm:4.28.0"
- checksum: 5d167f32e93f5854e78315a3a59beaf45bf9fdc5dc6a01d02c22152c08c8871022b5c41281c5355f44be1f9d36f9d24a67087a5c0dcfeea25477eb5918b5c410
+"@typescript-eslint/typescript-estree@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/typescript-estree@npm:3.10.1"
+ dependencies:
+ "@typescript-eslint/types": 3.10.1
+ "@typescript-eslint/visitor-keys": 3.10.1
+ debug: ^4.1.1
+ glob: ^7.1.6
+ is-glob: ^4.0.1
+ lodash: ^4.17.15
+ semver: ^7.3.2
+ tsutils: ^3.17.1
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ checksum: 911680da9d26220944f4f8f26f88349917609844fafcff566147cecae37ff0211d66c626eb62a2b24d17fd50d10715f5b0f32b2e7f5d9a88efc46709266d5053
languageName: node
linkType: hard
-"@typescript-eslint/typescript-estree@npm:4.28.0":
- version: 4.28.0
- resolution: "@typescript-eslint/typescript-estree@npm:4.28.0"
+"@typescript-eslint/typescript-estree@npm:4.33.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/typescript-estree@npm:4.33.0"
dependencies:
- "@typescript-eslint/types": 4.28.0
- "@typescript-eslint/visitor-keys": 4.28.0
+ "@typescript-eslint/types": 4.33.0
+ "@typescript-eslint/visitor-keys": 4.33.0
debug: ^4.3.1
globby: ^11.0.3
is-glob: ^4.0.1
peerDependenciesMeta:
typescript:
optional: true
- checksum: 680ec9a48cc702eba81a1a9101d6635fac10977c930cdb79a94c975b611c0276cc30e13f41630faeb28446cdcc0afb50bd389042629b35a6dd51b6d6774e0973
+ checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c
+ languageName: node
+ linkType: hard
+
+"@typescript-eslint/visitor-keys@npm:3.10.1":
+ version: 3.10.1
+ resolution: "@typescript-eslint/visitor-keys@npm:3.10.1"
+ dependencies:
+ eslint-visitor-keys: ^1.1.0
+ checksum: 0c4825b9829b1c11258a73aaee70d64834ba6d9b24157e7624e80f27f6537f468861d4dd33ad233c13ad2c6520afb9008c0675da6d792f26e82d75d6bfe9b0c6
languageName: node
linkType: hard
-"@typescript-eslint/visitor-keys@npm:4.28.0":
- version: 4.28.0
- resolution: "@typescript-eslint/visitor-keys@npm:4.28.0"
+"@typescript-eslint/visitor-keys@npm:4.33.0":
+ version: 4.33.0
+ resolution: "@typescript-eslint/visitor-keys@npm:4.33.0"
dependencies:
- "@typescript-eslint/types": 4.28.0
+ "@typescript-eslint/types": 4.33.0
eslint-visitor-keys: ^2.0.0
- checksum: a2f5cec756946d924e3a4f5e89d600da82d500690575620513eb700e9ab65226f62910a16ed3a2e1e9c46d7171ee6c5f23ff82e222dcd65e4b6e14f712534d71
+ checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873
languageName: node
linkType: hard
-"@webassemblyjs/ast@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/ast@npm:1.8.5"
+"@webassemblyjs/ast@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/ast@npm:1.9.0"
dependencies:
- "@webassemblyjs/helper-module-context": 1.8.5
- "@webassemblyjs/helper-wasm-bytecode": 1.8.5
- "@webassemblyjs/wast-parser": 1.8.5
- checksum: eee2593fd09ea888ed5ed8919e681a479f9d997061f97264020c8d4b0be11ab3c4e8646463afd021c8c40f1d92023cad1a09559ccdef6e24fdb4290e021a368b
+ "@webassemblyjs/helper-module-context": 1.9.0
+ "@webassemblyjs/helper-wasm-bytecode": 1.9.0
+ "@webassemblyjs/wast-parser": 1.9.0
+ checksum: 8a9838dc7fdac358aee8daa75eefa35934ab18dafb594092ff7be79c467ebe9dabb2543e58313c905fd802bdcc3cb8320e4e19af7444e49853a7a24e25138f75
languageName: node
linkType: hard
-"@webassemblyjs/floating-point-hex-parser@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.8.5"
- checksum: 68a1ff458355fb6b1553c8f7e2df6d76623bf5ef895f3fc30de620b88d1e68224643c8daf517d19b75d4e10a7f663c038b9912970edcae6f5a4fdb85b630bfc3
+"@webassemblyjs/floating-point-hex-parser@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.9.0"
+ checksum: d3aeb19bc30da26f639698daa28e44e0c18d5aa135359ef3c54148e194eec46451a912d0506099d479a71a94bc3eef6ef52d6ec234799528a25a9744789852de
languageName: node
linkType: hard
-"@webassemblyjs/helper-api-error@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-api-error@npm:1.8.5"
- checksum: 83e3c62a67f94cc36b2b8c4785aa92c15fc5d95a0e22c4b6c39dace583dd9c47c88bc4dea032a959b511d33db26eeb8de9b7be6f5d343f89ebdbd17c11520827
+"@webassemblyjs/helper-api-error@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-api-error@npm:1.9.0"
+ checksum: 9179d3148639cc202e89a118145b485cf834613260679a99af6ec487bbc15f238566ca713207394b336160a41bf8c1b75cf2e853b3e96f0cc73c1e5c735b3f64
languageName: node
linkType: hard
-"@webassemblyjs/helper-buffer@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-buffer@npm:1.8.5"
- checksum: 5eeb48b135d5ca013c8876228a3a2ccfba98d87dfe12fcf6921e0acf7a272070f369e4e4e8a7f34f2cf22e8faaade24a39a9bcfba76498f103f051384b0f55b3
+"@webassemblyjs/helper-buffer@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-buffer@npm:1.9.0"
+ checksum: dcb85f630f8a2e22b7346ad4dd58c3237a2cad1457699423e8fd19592a0bd3eacbc2639178a1b9a873c3ac217bfc7a23a134ff440a099496b590e82c7a4968d5
languageName: node
linkType: hard
-"@webassemblyjs/helper-code-frame@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-code-frame@npm:1.8.5"
+"@webassemblyjs/helper-code-frame@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-code-frame@npm:1.9.0"
dependencies:
- "@webassemblyjs/wast-printer": 1.8.5
- checksum: 80ca0fdc18c39ba1fe3f139f657f62159b7269ca153f10c5b984f5140a83e3fb8c18565f4443afbce144622b9eb8d16034beb52efc91b69e1e107e15b9f5a6c6
+ "@webassemblyjs/wast-printer": 1.9.0
+ checksum: a28fa057f7beff0fd14bff716561520f8edb8c9c56c7a5559451e6765acfb70aaeb8af718ea2bd2262e7baeba597545af407e28eb2eff8329235afe8605f20d1
languageName: node
linkType: hard
-"@webassemblyjs/helper-fsm@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-fsm@npm:1.8.5"
- checksum: 5026861c39518cf7f8fa6a88ccad8e251d906130a9ccfe2a49da5eb5321bfdf0861f31e5269f76687259f96cc8143f09a9df73a3836c44cb5445bdc01f77fd91
+"@webassemblyjs/helper-fsm@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-fsm@npm:1.9.0"
+ checksum: 374cc510c8f5a7a07d4fe9eb7036cc475a96a670b5d25c31f16757ac8295be8d03a2f29657ff53eaefa9e8315670a48824d430ed910e7c1835788ac79f93124e
languageName: node
linkType: hard
-"@webassemblyjs/helper-module-context@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-module-context@npm:1.8.5"
+"@webassemblyjs/helper-module-context@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-module-context@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- mamacro: ^0.0.3
- checksum: 519ff898993e9331b21bf22dbb85c91378f5c227e7075a4cd580c8e51dfd1372847c722b2e49564d2609b54e10283d68cad6d243b8a95d7833f60c6eb33a5259
+ "@webassemblyjs/ast": 1.9.0
+ checksum: 55e8f89c7ea1beaa78fad88403f3753b8413b0f3b6bb32d898ce95078b3e1d1b48ade0919c00b82fc2e3813c0ab6901e415f7a4d4fa9be50944e2431adde75a5
languageName: node
linkType: hard
-"@webassemblyjs/helper-wasm-bytecode@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.8.5"
- checksum: ac560cafe93e5ef07d892cea8ed5f1cb2b7cb8777a335fa92d99068eef650fbc37077e2ac8861bcaed337ac613db477741603554d9784373d41acaeffefd2c01
+"@webassemblyjs/helper-wasm-bytecode@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.9.0"
+ checksum: 280da4df3c556f73a1a02053277f8a4be481de32df4aa21050b015c8f4d27c46af89f0417eb88e486df117e5df4bccffae593f78cb1e79f212d3b3d4f3ed0f04
languageName: node
linkType: hard
-"@webassemblyjs/helper-wasm-section@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/helper-wasm-section@npm:1.8.5"
+"@webassemblyjs/helper-wasm-section@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/helper-wasm-section@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-buffer": 1.8.5
- "@webassemblyjs/helper-wasm-bytecode": 1.8.5
- "@webassemblyjs/wasm-gen": 1.8.5
- checksum: f8af22bf904d43d2700708bcb61ebfe1241cb57a4ef3e1400327c072d43b34bf5a04c39493a5d7691cca0590cec0cb0935cad7111764593cdb0840e637edac9d
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-buffer": 1.9.0
+ "@webassemblyjs/helper-wasm-bytecode": 1.9.0
+ "@webassemblyjs/wasm-gen": 1.9.0
+ checksum: b8f7bb45d4194074c82210211a5d3e402a5b5fa63ecae26d2c356ae3978af5a530e91192fb260f32f9d561b18e2828b3da2e2f41c59efadb5f3c6d72446807f0
languageName: node
linkType: hard
-"@webassemblyjs/ieee754@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/ieee754@npm:1.8.5"
+"@webassemblyjs/ieee754@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/ieee754@npm:1.9.0"
dependencies:
"@xtuc/ieee754": ^1.2.0
- checksum: 20230eb79e4bdf812f49ae73ca145a0a8d0fa1ec8a6353b5a36e57c1955ecc7245f277bfb1bf839e041fff7f300948d938b0672bae9d5764519ed0b6a6aa1bdb
+ checksum: 7fe4a217ba0f7051e2cfef92919d4a64fac1a63c65411763779bd50907820f33f440255231a474fe3ba03bd1d9ee0328662d1eae3fce4c59b91549d6b62b839b
languageName: node
linkType: hard
-"@webassemblyjs/leb128@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/leb128@npm:1.8.5"
+"@webassemblyjs/leb128@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/leb128@npm:1.9.0"
dependencies:
"@xtuc/long": 4.2.2
- checksum: c41603eba2d4052bf14e9213bfa80534dcbafacc782bd8faef80394cf2a93a4aece465416a5132aff2ec8339381003689850b72899828c236313e3653fb47214
+ checksum: 4ca7cbb869530d78d42a414f34ae53249364cb1ecebbfb6ed5d562c2f209fce857502f088822ee82a23876f653a262ddc34ab64e45a7962510a263d39bb3f51a
languageName: node
linkType: hard
-"@webassemblyjs/utf8@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/utf8@npm:1.8.5"
- checksum: 6aac4440996a160f268762a3dad1ef4a02f4d06fe3a7a0189556adbbbc34ed9ec54a2eadc2adb0aea2ba3430e9dbe20ab461df4f224eed73c9066904b17013e4
+"@webassemblyjs/utf8@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/utf8@npm:1.9.0"
+ checksum: e328a30ac8a503bbd015d32e75176e0dedcb45a21d4be051c25dfe89a00035ca7a6dbd8937b442dd5b4b334de3959d4f5fe0b330037bd226a28b9814cd49e84f
languageName: node
linkType: hard
-"@webassemblyjs/wasm-edit@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wasm-edit@npm:1.8.5"
+"@webassemblyjs/wasm-edit@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wasm-edit@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-buffer": 1.8.5
- "@webassemblyjs/helper-wasm-bytecode": 1.8.5
- "@webassemblyjs/helper-wasm-section": 1.8.5
- "@webassemblyjs/wasm-gen": 1.8.5
- "@webassemblyjs/wasm-opt": 1.8.5
- "@webassemblyjs/wasm-parser": 1.8.5
- "@webassemblyjs/wast-printer": 1.8.5
- checksum: 7298a60bd4914a7d13bceebce4a130f412056eb40a9d9a27d102bf173a0b369cb0d4be3303abcd08c9482695afe79080e896ace4f2ecabbb0247e2f1829fd4ca
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-buffer": 1.9.0
+ "@webassemblyjs/helper-wasm-bytecode": 1.9.0
+ "@webassemblyjs/helper-wasm-section": 1.9.0
+ "@webassemblyjs/wasm-gen": 1.9.0
+ "@webassemblyjs/wasm-opt": 1.9.0
+ "@webassemblyjs/wasm-parser": 1.9.0
+ "@webassemblyjs/wast-printer": 1.9.0
+ checksum: 1997e0c2f4051c33239587fb143242919320bc861a0af03a873c7150a27d6404bd2e063c658193288b0aa88c35aadbe0c4fde601fe642bae0743a8c8eda52717
languageName: node
linkType: hard
-"@webassemblyjs/wasm-gen@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wasm-gen@npm:1.8.5"
+"@webassemblyjs/wasm-gen@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wasm-gen@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-wasm-bytecode": 1.8.5
- "@webassemblyjs/ieee754": 1.8.5
- "@webassemblyjs/leb128": 1.8.5
- "@webassemblyjs/utf8": 1.8.5
- checksum: d861e0233aff09e4841624f6554e32fc3056c232a2b3a9cf92bfcc3f9f34f850e240b6dec70977ae55afd5e5cea3e8d260292cccb1803dc26da4fdcee72b4637
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-wasm-bytecode": 1.9.0
+ "@webassemblyjs/ieee754": 1.9.0
+ "@webassemblyjs/leb128": 1.9.0
+ "@webassemblyjs/utf8": 1.9.0
+ checksum: 2456e84e8e6bedb7ab47f6333a0ee170f7ef62842c90862ca787c08528ca8041061f3f8bc257fc2a01bf6e8d1a76fddaddd43418c738f681066e5b50f88fe7df
languageName: node
linkType: hard
-"@webassemblyjs/wasm-opt@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wasm-opt@npm:1.8.5"
+"@webassemblyjs/wasm-opt@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wasm-opt@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-buffer": 1.8.5
- "@webassemblyjs/wasm-gen": 1.8.5
- "@webassemblyjs/wasm-parser": 1.8.5
- checksum: 44b18c328b919ba4510d58b4dfe6244edac8c21cd2b6cf7167ad58feb0ddc61217c98521b2f0ffc0e388a0b5469b060a6908e8cc7753ab72945204b4a87dd31b
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-buffer": 1.9.0
+ "@webassemblyjs/wasm-gen": 1.9.0
+ "@webassemblyjs/wasm-parser": 1.9.0
+ checksum: 91242205bdbd1aa8045364a5338bfb34880cb2c65f56db8dd19382894209673699fb31a0e5279f25c7e5bcd8f3097d6c9ca84d8969d9613ef2cf166450cc3515
languageName: node
linkType: hard
-"@webassemblyjs/wasm-parser@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wasm-parser@npm:1.8.5"
+"@webassemblyjs/wasm-parser@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wasm-parser@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-api-error": 1.8.5
- "@webassemblyjs/helper-wasm-bytecode": 1.8.5
- "@webassemblyjs/ieee754": 1.8.5
- "@webassemblyjs/leb128": 1.8.5
- "@webassemblyjs/utf8": 1.8.5
- checksum: ea80e9ba6d8f8ba7c3177eda500a41226b5a0373b92a32e8ce81b4562fd4bec37a67ff1a833a378a811307cf1ec4f54f44207c6bbc82fb45709a6cb60d86458f
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-api-error": 1.9.0
+ "@webassemblyjs/helper-wasm-bytecode": 1.9.0
+ "@webassemblyjs/ieee754": 1.9.0
+ "@webassemblyjs/leb128": 1.9.0
+ "@webassemblyjs/utf8": 1.9.0
+ checksum: 493f6cfc63a5e16073056c81ff0526a9936f461327379ef3c83cc841000e03623b6352704f6bf9f7cb5b3610f0032020a61f9cca78c91b15b8e995854b29c098
languageName: node
linkType: hard
-"@webassemblyjs/wast-parser@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wast-parser@npm:1.8.5"
+"@webassemblyjs/wast-parser@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wast-parser@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/floating-point-hex-parser": 1.8.5
- "@webassemblyjs/helper-api-error": 1.8.5
- "@webassemblyjs/helper-code-frame": 1.8.5
- "@webassemblyjs/helper-fsm": 1.8.5
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/floating-point-hex-parser": 1.9.0
+ "@webassemblyjs/helper-api-error": 1.9.0
+ "@webassemblyjs/helper-code-frame": 1.9.0
+ "@webassemblyjs/helper-fsm": 1.9.0
"@xtuc/long": 4.2.2
- checksum: ec0b28f0c558950024521808c1e12b4597023b0ef914aed0eb9078bcb4daaa34555a46efe35406b8edb899b008782b1a43d96c6485c45e98ce9745fe17196817
+ checksum: 705dd48fbbceec7f6bed299b8813631b242fd9312f9594dbb2985dda86c9688048692357d684f6080fc2c5666287cefaa26b263d01abadb6a9049d4c8978b9db
languageName: node
linkType: hard
-"@webassemblyjs/wast-printer@npm:1.8.5":
- version: 1.8.5
- resolution: "@webassemblyjs/wast-printer@npm:1.8.5"
+"@webassemblyjs/wast-printer@npm:1.9.0":
+ version: 1.9.0
+ resolution: "@webassemblyjs/wast-printer@npm:1.9.0"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/wast-parser": 1.8.5
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/wast-parser": 1.9.0
"@xtuc/long": 4.2.2
- checksum: 7c53f5f694b9820cef5e58653a85f5e9b0eba4e59013a2e0fcf3562d7e70501b0202d73ebadbd14b5845ecf958e3639bdde5a197a4245dded722f2015ec45e2a
+ checksum: 3d1e1b2e84745a963f69acd1c02425b321dd2e608e11dabc467cae0c9a808962bc769ec9afc46fbcea7188cc1e47d72370da762d258f716fb367cb1a7865c54b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"abab@npm:^2.0.0":
- version: 2.0.5
- resolution: "abab@npm:2.0.5"
- checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1
+"abab@npm:^2.0.3, abab@npm:^2.0.5":
+ version: 2.0.6
+ resolution: "abab@npm:2.0.6"
+ checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.7":
+"accepts@npm:~1.3.4, accepts@npm:~1.3.5":
version: 1.3.7
resolution: "accepts@npm:1.3.7"
dependencies:
languageName: node
linkType: hard
-"acorn-globals@npm:^4.1.0, acorn-globals@npm:^4.3.0":
- version: 4.3.4
- resolution: "acorn-globals@npm:4.3.4"
+"accepts@npm:~1.3.8":
+ version: 1.3.8
+ resolution: "accepts@npm:1.3.8"
dependencies:
- acorn: ^6.0.1
- acorn-walk: ^6.0.1
- checksum: c31bfde102d8a104835e9591c31dd037ec771449f9c86a6b1d2ac3c7c336694f828cfabba7687525b094f896a854affbf1afe6e1b12c0d998be6bab5d49c9663
+ mime-types: ~2.1.34
+ negotiator: 0.6.3
+ checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4
languageName: node
linkType: hard
-"acorn-jsx@npm:^5.2.0":
- version: 5.3.1
- resolution: "acorn-jsx@npm:5.3.1"
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- checksum: daf441a9d7b59c0ea1f7fe2934c48aca604a007455129ce35fa62ec3d4c8363e2efc2d4da636d18ce0049979260ba07d8b42bc002ae95182916d2c90901529c2
+"acorn-globals@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "acorn-globals@npm:6.0.0"
+ dependencies:
+ acorn: ^7.1.1
+ acorn-walk: ^7.1.1
+ checksum: 72d95e5b5e585f9acd019b993ab8bbba68bb3cbc9d9b5c1ebb3c2f1fe5981f11deababfb4949f48e6262f9c57878837f5958c0cca396f81023814680ca878042
languageName: node
linkType: hard
-"acorn-walk@npm:^6.0.1":
- version: 6.2.0
- resolution: "acorn-walk@npm:6.2.0"
- checksum: ea241a5d96338f1e8030aafae72a91ff0ec4360e2775e44a2fdb2eb618b07fc309e000a5126056631ac7f00fe8bd9bbd23fcb6d018eee4ba11086eb36c1b2e61
+"acorn-jsx@npm:^5.3.1":
+ version: 5.3.2
+ resolution: "acorn-jsx@npm:5.3.2"
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950
languageName: node
linkType: hard
-"acorn@npm:^5.5.3":
- version: 5.7.4
- resolution: "acorn@npm:5.7.4"
- bin:
- acorn: bin/acorn
- checksum: f51392a4d25c7705fadb890f784c59cde4ac1c5452ccd569fa59bd2191b7951b4a6398348ab7ea08a54f0bc0a56c13776710f4e1bae9de441e4d33e2015ad1e0
+"acorn-walk@npm:^7.1.1":
+ version: 7.2.0
+ resolution: "acorn-walk@npm:7.2.0"
+ checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f
languageName: node
linkType: hard
-"acorn@npm:^6.0.1, acorn@npm:^6.0.4, acorn@npm:^6.2.1":
+"acorn@npm:^6.4.1":
version: 6.4.2
resolution: "acorn@npm:6.4.2"
bin:
languageName: node
linkType: hard
-"acorn@npm:^7.1.1":
+"acorn@npm:^7.1.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0":
version: 7.4.1
resolution: "acorn@npm:7.4.1"
bin:
languageName: node
linkType: hard
+"acorn@npm:^8.2.4, acorn@npm:^8.8.2":
+ version: 8.11.3
+ resolution: "acorn@npm:8.11.3"
+ bin:
+ acorn: bin/acorn
+ checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c
+ languageName: node
+ linkType: hard
+
"acorn@npm:^8.5.0":
version: 8.7.0
resolution: "acorn@npm:8.7.0"
languageName: node
linkType: hard
-"ajv@npm:^6.1.0, ajv@npm:^6.1.1, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4":
+"ajv@npm:^6.1.0, ajv@npm:^6.1.1, ajv@npm:^6.10.0, ajv@npm:^6.10.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5":
version: 6.12.6
resolution: "ajv@npm:6.12.6"
dependencies:
languageName: node
linkType: hard
+"ajv@npm:^8.0.1":
+ version: 8.12.0
+ resolution: "ajv@npm:8.12.0"
+ dependencies:
+ fast-deep-equal: ^3.1.1
+ json-schema-traverse: ^1.0.0
+ require-from-string: ^2.0.2
+ uri-js: ^4.2.2
+ checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001
+ languageName: node
+ linkType: hard
+
"alphanum-sort@npm:^1.0.0":
version: 1.0.2
resolution: "alphanum-sort@npm:1.0.2"
languageName: node
linkType: hard
-"amdefine@npm:>=0.0.4":
- version: 1.0.1
- resolution: "amdefine@npm:1.0.1"
- checksum: 9d4e15b94641643a9385b2841b4cb2bcf4e8e2f741ea4bd475c93ad7bab261ad4ed827a32e9c549b38b98759c4526c173ae4e6dde8caeb75ee5cebedc9863762
- languageName: node
- linkType: hard
-
"ansi-colors@npm:^3.0.0":
version: 3.2.4
resolution: "ansi-colors@npm:3.2.4"
languageName: node
linkType: hard
-"ansi-escapes@npm:^3.0.0":
- version: 3.2.0
- resolution: "ansi-escapes@npm:3.2.0"
- checksum: 0f94695b677ea742f7f1eed961f7fd8d05670f744c6ad1f8f635362f6681dcfbc1575cb05b43abc7bb6d67e25a75fb8c7ea8f2a57330eb2c76b33f18cb2cef0a
- languageName: node
- linkType: hard
-
-"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0":
+"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.1":
version: 4.3.2
resolution: "ansi-escapes@npm:4.3.2"
dependencies:
languageName: node
linkType: hard
-"ansi-html@npm:0.0.7":
+"ansi-html@npm:0.0.7, ansi-html@npm:^0.0.7":
version: 0.0.7
resolution: "ansi-html@npm:0.0.7"
bin:
languageName: node
linkType: hard
-"ansi-regex@npm:^3.0.0":
- version: 3.0.1
- resolution: "ansi-regex@npm:3.0.1"
- checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc
- languageName: node
- linkType: hard
-
-"ansi-regex@npm:^4.0.0, ansi-regex@npm:^4.1.0":
+"ansi-regex@npm:^4.1.0":
version: 4.1.1
resolution: "ansi-regex@npm:4.1.1"
checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888
languageName: node
linkType: hard
-"ansi-styles@npm:^2.2.1":
- version: 2.2.1
- resolution: "ansi-styles@npm:2.2.1"
- checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c
- languageName: node
- linkType: hard
-
"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1":
version: 3.2.1
resolution: "ansi-styles@npm:3.2.1"
languageName: node
linkType: hard
+"anymatch@npm:^3.0.0, anymatch@npm:^3.0.3":
+ version: 3.1.3
+ resolution: "anymatch@npm:3.1.3"
+ dependencies:
+ normalize-path: ^3.0.0
+ picomatch: ^2.0.4
+ checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2
+ languageName: node
+ linkType: hard
+
"anymatch@npm:~3.1.2":
version: 3.1.2
resolution: "anymatch@npm:3.1.2"
languageName: node
linkType: hard
-"are-we-there-yet@npm:^2.0.0":
- version: 2.0.0
- resolution: "are-we-there-yet@npm:2.0.0"
- dependencies:
- delegates: ^1.0.0
- readable-stream: ^3.6.0
- checksum: 6c80b4fd04ecee6ba6e737e0b72a4b41bdc64b7d279edfc998678567ff583c8df27e27523bc789f2c99be603ffa9eaa612803da1d886962d2086e7ff6fa90c7c
- languageName: node
- linkType: hard
-
"are-we-there-yet@npm:^3.0.0":
version: 3.0.0
resolution: "are-we-there-yet@npm:3.0.0"
languageName: node
linkType: hard
-"aria-query@npm:^3.0.0":
- version: 3.0.0
- resolution: "aria-query@npm:3.0.0"
+"aria-query@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "aria-query@npm:5.3.0"
dependencies:
- ast-types-flow: 0.0.7
- commander: ^2.11.0
- checksum: 52861d7d31321a23f27e5f95a437ddafd20e5eee03ff6e4319eeb1e98dce103f03ccaea34acb5bf2810580f71a9ac1658200fa3d49435279e99df2908f213f1b
+ dequal: ^2.0.3
+ checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9
languageName: node
linkType: hard
languageName: node
linkType: hard
-"array-equal@npm:^1.0.0":
- version: 1.0.0
- resolution: "array-equal@npm:1.0.0"
- checksum: 3f68045806357db9b2fa1ad583e42a659de030633118a0cd35ee4975cb20db3b9a3d36bbec9b5afe70011cf989eefd215c12fe0ce08c498f770859ca6e70688a
- languageName: node
- linkType: hard
-
-"array-find-index@npm:^1.0.1":
- version: 1.0.2
- resolution: "array-find-index@npm:1.0.2"
- checksum: aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081
+"array-buffer-byte-length@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "array-buffer-byte-length@npm:1.0.1"
+ dependencies:
+ call-bind: ^1.0.5
+ is-array-buffer: ^3.0.4
+ checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"array-includes@npm:^3.0.3, array-includes@npm:^3.1.1":
- version: 3.1.3
- resolution: "array-includes@npm:3.1.3"
+"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7":
+ version: 3.1.8
+ resolution: "array-includes@npm:3.1.8"
dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.18.0-next.2
- get-intrinsic: ^1.1.1
- is-string: ^1.0.5
- checksum: eaab8812412b5ec921c8fe678a9d61f501b12f6c72e271e0e8652fe7f4145276cc7ad79ff303ac4ed69cbf5135155bfb092b1b6d552e423e75106d1c887da150
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.4
+ is-string: ^1.0.7
+ checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91
languageName: node
linkType: hard
languageName: node
linkType: hard
-"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.3":
+"array.prototype.findlast@npm:^1.2.4":
+ version: 1.2.5
+ resolution: "array.prototype.findlast@npm:1.2.5"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-shim-unscopables: ^1.0.2
+ checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446
+ languageName: node
+ linkType: hard
+
+"array.prototype.findlastindex@npm:^1.2.3":
+ version: 1.2.5
+ resolution: "array.prototype.findlastindex@npm:1.2.5"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-shim-unscopables: ^1.0.2
+ checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710
+ languageName: node
+ linkType: hard
+
+"array.prototype.flat@npm:^1.2.3":
version: 1.2.4
resolution: "array.prototype.flat@npm:1.2.4"
dependencies:
languageName: node
linkType: hard
+"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2":
+ version: 1.3.2
+ resolution: "array.prototype.flat@npm:1.3.2"
+ dependencies:
+ call-bind: ^1.0.2
+ define-properties: ^1.2.0
+ es-abstract: ^1.22.1
+ es-shim-unscopables: ^1.0.0
+ checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b
+ languageName: node
+ linkType: hard
+
+"array.prototype.flatmap@npm:^1.3.2":
+ version: 1.3.2
+ resolution: "array.prototype.flatmap@npm:1.3.2"
+ dependencies:
+ call-bind: ^1.0.2
+ define-properties: ^1.2.0
+ es-abstract: ^1.22.1
+ es-shim-unscopables: ^1.0.0
+ checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3
+ languageName: node
+ linkType: hard
+
+"array.prototype.toreversed@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "array.prototype.toreversed@npm:1.1.2"
+ dependencies:
+ call-bind: ^1.0.2
+ define-properties: ^1.2.0
+ es-abstract: ^1.22.1
+ es-shim-unscopables: ^1.0.0
+ checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240
+ languageName: node
+ linkType: hard
+
+"array.prototype.tosorted@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "array.prototype.tosorted@npm:1.1.3"
+ dependencies:
+ call-bind: ^1.0.5
+ define-properties: ^1.2.1
+ es-abstract: ^1.22.3
+ es-errors: ^1.1.0
+ es-shim-unscopables: ^1.0.2
+ checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af
+ languageName: node
+ linkType: hard
+
+"arraybuffer.prototype.slice@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "arraybuffer.prototype.slice@npm:1.0.3"
+ dependencies:
+ array-buffer-byte-length: ^1.0.1
+ call-bind: ^1.0.5
+ define-properties: ^1.2.1
+ es-abstract: ^1.22.3
+ es-errors: ^1.2.1
+ get-intrinsic: ^1.2.3
+ is-array-buffer: ^3.0.4
+ is-shared-array-buffer: ^1.0.2
+ checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e
+ languageName: node
+ linkType: hard
+
"arrify@npm:^1.0.1":
version: 1.0.1
resolution: "arrify@npm:1.0.1"
languageName: node
linkType: hard
+"arrify@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "arrify@npm:2.0.1"
+ checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209
+ languageName: node
+ linkType: hard
+
"arvados-workbench-2@workspace:.":
version: 0.0.0-use.local
resolution: "arvados-workbench-2@workspace:."
dependencies:
+ "@babel/core": ^7.0.0
+ "@babel/runtime-corejs2": ^7.0.0
"@coreui/coreui": ^4.3.2
"@coreui/react": ^4.11.0
"@date-io/date-fns": 1
"@types/shell-escape": ^0.2.0
"@types/sinon": 7.5
"@types/uuid": 3.4.4
- axios: ^0.21.1
+ axios: ^0.28.1
axios-mock-adapter: 1.17.0
- babel-core: 6.26.3
- babel-runtime: 6.26.0
bootstrap: ^5.3.2
- caniuse-lite: 1.0.30001299
+ caniuse-lite: 1.0.30001606
classnames: 2.2.6
cwlts: 1.15.29
cypress: ^13.6.6
mime: ^3.0.0
moment: ^2.29.4
node-sass: ^9.0.0
- node-sass-chokidar: ^2.0.0
parse-duration: 0.4.4
prop-types: 15.7.2
query-string: 6.9.0
react-router-dom: 4.3.1
react-router-redux: 5.0.0-alpha.9
react-rte: ^0.16.5
- react-scripts: 3.4.4
+ react-scripts: 4.0.1
react-splitter-layout: 3.0.1
react-transition-group: 2.5.0
react-virtualized-auto-sizer: 1.0.2
languageName: node
linkType: hard
+"asn1.js@npm:^4.10.1":
+ version: 4.10.1
+ resolution: "asn1.js@npm:4.10.1"
+ dependencies:
+ bn.js: ^4.0.0
+ inherits: ^2.0.1
+ minimalistic-assert: ^1.0.0
+ checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5
+ languageName: node
+ linkType: hard
+
"asn1.js@npm:^5.2.0":
version: 5.4.1
resolution: "asn1.js@npm:5.4.1"
languageName: node
linkType: hard
-"ast-types-flow@npm:0.0.7, ast-types-flow@npm:^0.0.7":
- version: 0.0.7
- resolution: "ast-types-flow@npm:0.0.7"
- checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4
- languageName: node
- linkType: hard
-
-"astral-regex@npm:^1.0.0":
- version: 1.0.0
- resolution: "astral-regex@npm:1.0.0"
- checksum: 93417fc0879531cd95ace2560a54df865c9461a3ac0714c60cbbaa5f1f85d2bee85489e78d82f70b911b71ac25c5f05fc5a36017f44c9bb33c701bee229ff848
+"ast-types-flow@npm:^0.0.8":
+ version: 0.0.8
+ resolution: "ast-types-flow@npm:0.0.8"
+ checksum: 0a64706609a179233aac23817837abab614f3548c252a2d3d79ea1e10c74aa28a0846e11f466cf72771b6ed8713abc094dcf8c40c3ec4207da163efa525a94a8
languageName: node
linkType: hard
languageName: node
linkType: hard
+"available-typed-arrays@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "available-typed-arrays@npm:1.0.7"
+ dependencies:
+ possible-typed-array-names: ^1.0.0
+ checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3
+ languageName: node
+ linkType: hard
+
"aws-sign2@npm:~0.7.0":
version: 0.7.0
resolution: "aws-sign2@npm:0.7.0"
languageName: node
linkType: hard
+"axe-core@npm:=4.7.0":
+ version: 4.7.0
+ resolution: "axe-core@npm:4.7.0"
+ checksum: f086bcab42be1761ba2b0b127dec350087f4c3a853bba8dd58f69d898cefaac31a1561da23146f6f3c07954c76171d1f2ce460e555e052d2b02cd79af628fa4a
+ languageName: node
+ linkType: hard
+
"axios-mock-adapter@npm:1.17.0":
version: 1.17.0
resolution: "axios-mock-adapter@npm:1.17.0"
languageName: node
linkType: hard
-"axios@npm:^0.21.1":
- version: 0.21.4
- resolution: "axios@npm:0.21.4"
+"axios@npm:^0.28.1":
+ version: 0.28.1
+ resolution: "axios@npm:0.28.1"
dependencies:
- follow-redirects: ^1.14.0
- checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c
+ follow-redirects: ^1.15.0
+ form-data: ^4.0.0
+ proxy-from-env: ^1.1.0
+ checksum: 5115a38d79064d07437c5a28f15841e3607634040e3120ec06a2c4367a7d07cf213b16496eab53b6f58ebc5fb377a440ba9ed4782529b14449a1e285734bfb54
languageName: node
linkType: hard
-"axobject-query@npm:^2.0.2":
- version: 2.2.0
- resolution: "axobject-query@npm:2.2.0"
- checksum: 96b8c7d807ca525f41ad9b286186e2089b561ba63a6d36c3e7d73dc08150714660995c7ad19cda05784458446a0793b45246db45894631e13853f48c1aa3117f
- languageName: node
- linkType: hard
-
-"babel-code-frame@npm:^6.22.0, babel-code-frame@npm:^6.26.0":
- version: 6.26.0
- resolution: "babel-code-frame@npm:6.26.0"
- dependencies:
- chalk: ^1.1.3
- esutils: ^2.0.2
- js-tokens: ^3.0.2
- checksum: 9410c3d5a921eb02fa409675d1a758e493323a49e7b9dddb7a2a24d47e61d39ab1129dd29f9175836eac9ce8b1d4c0a0718fcdc57ce0b865b529fd250dbab313
- languageName: node
- linkType: hard
-
-"babel-core@npm:6.26.3, babel-core@npm:^6.26.0":
- version: 6.26.3
- resolution: "babel-core@npm:6.26.3"
+"axobject-query@npm:^3.2.1":
+ version: 3.2.1
+ resolution: "axobject-query@npm:3.2.1"
dependencies:
- babel-code-frame: ^6.26.0
- babel-generator: ^6.26.0
- babel-helpers: ^6.24.1
- babel-messages: ^6.23.0
- babel-register: ^6.26.0
- babel-runtime: ^6.26.0
- babel-template: ^6.26.0
- babel-traverse: ^6.26.0
- babel-types: ^6.26.0
- babylon: ^6.18.0
- convert-source-map: ^1.5.1
- debug: ^2.6.9
- json5: ^0.5.1
- lodash: ^4.17.4
- minimatch: ^3.0.4
- path-is-absolute: ^1.0.1
- private: ^0.1.8
- slash: ^1.0.0
- source-map: ^0.5.7
- checksum: 3d6a37e5c69ea7f7d66c2a261cbd7219197f2f938700e6ebbabb6d84a03f2bf86691ffa066866dcb49ba6c4bd702d347c9e0e147660847d709705cf43c964752
+ dequal: ^2.0.3
+ checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2
languageName: node
linkType: hard
-"babel-eslint@npm:10.1.0":
+"babel-eslint@npm:^10.1.0":
version: 10.1.0
resolution: "babel-eslint@npm:10.1.0"
dependencies:
languageName: node
linkType: hard
-"babel-generator@npm:^6.26.0":
- version: 6.26.1
- resolution: "babel-generator@npm:6.26.1"
- dependencies:
- babel-messages: ^6.23.0
- babel-runtime: ^6.26.0
- babel-types: ^6.26.0
- detect-indent: ^4.0.0
- jsesc: ^1.3.0
- lodash: ^4.17.4
- source-map: ^0.5.7
- trim-right: ^1.0.1
- checksum: 5397f4d4d1243e7157e3336be96c10fcb1f29f73bf2d9842229c71764d9a6431397d249483a38c4d8b1581459e67be4df6f32d26b1666f02d0f5bfc2c2f25193
- languageName: node
- linkType: hard
-
-"babel-helpers@npm:^6.24.1":
- version: 6.24.1
- resolution: "babel-helpers@npm:6.24.1"
- dependencies:
- babel-runtime: ^6.22.0
- babel-template: ^6.24.1
- checksum: 751c6010e18648eebae422adfea5f3b5eff70d592d693bfe0f53346227d74b38e6cd2553c4c18de1e64faac585de490eccbd3ab86ba0885bdac42ed4478bc6b0
- languageName: node
- linkType: hard
-
-"babel-jest@npm:^24.9.0":
- version: 24.9.0
- resolution: "babel-jest@npm:24.9.0"
+"babel-jest@npm:^26.6.0, babel-jest@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "babel-jest@npm:26.6.3"
dependencies:
- "@jest/transform": ^24.9.0
- "@jest/types": ^24.9.0
- "@types/babel__core": ^7.1.0
- babel-plugin-istanbul: ^5.1.0
- babel-preset-jest: ^24.9.0
- chalk: ^2.4.2
- slash: ^2.0.0
+ "@jest/transform": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/babel__core": ^7.1.7
+ babel-plugin-istanbul: ^6.0.0
+ babel-preset-jest: ^26.6.2
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.4
+ slash: ^3.0.0
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 205f0d701a202edb483a1f8cc79557f777d20df42656f1a1c2e7ef368f8f53f9d4c4af08ea812d98b61ab12cc5f146db4573a301880770d1dc5748624cc51711
+ checksum: 5917233f0d381e719e195b69b81e46da90293432d10288d79f8f59b8f3f9ac030e14701f3d9f90893fb739481df1d132446f1b983d841e65e2623775db100897
languageName: node
linkType: hard
languageName: node
linkType: hard
-"babel-messages@npm:^6.23.0":
- version: 6.23.0
- resolution: "babel-messages@npm:6.23.0"
- dependencies:
- babel-runtime: ^6.22.0
- checksum: c8075c17587a33869e1a5bd0a5b73bbe395b68188362dacd5418debbc7c8fd784bcd3295e81ee7e410dc2c2655755add6af03698c522209f6a68334c15e6d6ca
- languageName: node
- linkType: hard
-
-"babel-plugin-dynamic-import-node@npm:^2.3.3":
- version: 2.3.3
- resolution: "babel-plugin-dynamic-import-node@npm:2.3.3"
- dependencies:
- object.assign: ^4.1.0
- checksum: c9d24415bcc608d0db7d4c8540d8002ac2f94e2573d2eadced137a29d9eab7e25d2cbb4bc6b9db65cf6ee7430f7dd011d19c911a9a778f0533b4a05ce8292c9b
- languageName: node
- linkType: hard
-
-"babel-plugin-istanbul@npm:^5.1.0":
- version: 5.2.0
- resolution: "babel-plugin-istanbul@npm:5.2.0"
+"babel-plugin-istanbul@npm:^6.0.0":
+ version: 6.1.1
+ resolution: "babel-plugin-istanbul@npm:6.1.1"
dependencies:
"@babel/helper-plugin-utils": ^7.0.0
- find-up: ^3.0.0
- istanbul-lib-instrument: ^3.3.0
- test-exclude: ^5.2.3
- checksum: 46e31a53d1c08a4b738c988871e94dd83e534b3d49248c45c9e63d04d221aa787d8c4f32576e1fade26dbab7cabeae665cbf5eb067aaef74500048dfef365c80
+ "@istanbuljs/load-nyc-config": ^1.0.0
+ "@istanbuljs/schema": ^0.1.2
+ istanbul-lib-instrument: ^5.0.4
+ test-exclude: ^6.0.0
+ checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a
languageName: node
linkType: hard
-"babel-plugin-jest-hoist@npm:^24.9.0":
- version: 24.9.0
- resolution: "babel-plugin-jest-hoist@npm:24.9.0"
+"babel-plugin-jest-hoist@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "babel-plugin-jest-hoist@npm:26.6.2"
dependencies:
+ "@babel/template": ^7.3.3
+ "@babel/types": ^7.3.3
+ "@types/babel__core": ^7.0.0
"@types/babel__traverse": ^7.0.6
- checksum: 9f0d23fcf94448e302e201665d7232303a548107adf545590b09f22a747755387cb9dc676d22884a298b17d11ede5401436e1b70fa574eee3efa61ad1230c8e6
+ checksum: abe3732fdf20f96e91cbf788a54d776b30bd7a6054cb002a744d7071c656813e26e77a780dc2a6f6b197472897e220836cd907bda3fadb9d0481126bfd6c3783
languageName: node
linkType: hard
-"babel-plugin-macros@npm:2.8.0":
- version: 2.8.0
- resolution: "babel-plugin-macros@npm:2.8.0"
+"babel-plugin-macros@npm:^3.1.0":
+ version: 3.1.0
+ resolution: "babel-plugin-macros@npm:3.1.0"
dependencies:
- "@babel/runtime": ^7.7.2
- cosmiconfig: ^6.0.0
- resolve: ^1.12.0
- checksum: 59b09a21cf3ae1e14186c1b021917d004b49b953824b24953a54c6502da79e8051d4ac31cfd4a0ae7f6ea5ddf1f7edd93df4895dd3c3982a5b2431859c2889ac
+ "@babel/runtime": ^7.12.5
+ cosmiconfig: ^7.0.0
+ resolve: ^1.19.0
+ checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6
languageName: node
linkType: hard
-"babel-plugin-named-asset-import@npm:^0.3.6":
- version: 0.3.7
- resolution: "babel-plugin-named-asset-import@npm:0.3.7"
+"babel-plugin-named-asset-import@npm:^0.3.7":
+ version: 0.3.8
+ resolution: "babel-plugin-named-asset-import@npm:0.3.8"
peerDependencies:
"@babel/core": ^7.1.0
- checksum: 4c9a42a2762f3d596a09105d05991525a0553d095030459d0f71449b023801ccc43e90fa20b618c52283dc61ca528a4a59df244e5b1dd583867786088eb473b7
+ checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs2@npm:^0.2.2":
- version: 0.2.2
- resolution: "babel-plugin-polyfill-corejs2@npm:0.2.2"
+"babel-plugin-polyfill-corejs2@npm:^0.4.10":
+ version: 0.4.10
+ resolution: "babel-plugin-polyfill-corejs2@npm:0.4.10"
dependencies:
- "@babel/compat-data": ^7.13.11
- "@babel/helper-define-polyfill-provider": ^0.2.2
- semver: ^6.1.1
+ "@babel/compat-data": ^7.22.6
+ "@babel/helper-define-polyfill-provider": ^0.6.1
+ semver: ^6.3.1
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: eee45ecce743e06840d29936a7f4a9f9eca19552ba010e9f3676c6a2697ab815230f39953296b72f09665de0e8fffe260e52b348011a9ddba36cfa7eec6f8c51
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: 2c0e4868789152f50db306f4957fa7934876cefb51d5d86436595f0b091539e45ce0e9c0125b5db2d71f913b29cd48ae76b8e942ba28fcf2273e084f54664a1c
languageName: node
linkType: hard
-"babel-plugin-polyfill-corejs3@npm:^0.2.2":
- version: 0.2.3
- resolution: "babel-plugin-polyfill-corejs3@npm:0.2.3"
+"babel-plugin-polyfill-corejs3@npm:^0.10.1, babel-plugin-polyfill-corejs3@npm:^0.10.4":
+ version: 0.10.4
+ resolution: "babel-plugin-polyfill-corejs3@npm:0.10.4"
dependencies:
- "@babel/helper-define-polyfill-provider": ^0.2.2
- core-js-compat: ^3.14.0
+ "@babel/helper-define-polyfill-provider": ^0.6.1
+ core-js-compat: ^3.36.1
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: e390c5317b35808633d32db2c1718aef6af788df148adc6fa54e56d2266896ad2da2d200163f392e06ae1ebd1a0feaeaf18d7a337dea70387429618898b90a68
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: b96a54495f7cc8b3797251c8c15f5ed015edddc3110fc122f6b32c94bec33af1e8bc56fa99091808f500bde0cccaaa266889cdc5935d9e6e9cf09898214f02dd
languageName: node
linkType: hard
-"babel-plugin-polyfill-regenerator@npm:^0.2.2":
- version: 0.2.2
- resolution: "babel-plugin-polyfill-regenerator@npm:0.2.2"
+"babel-plugin-polyfill-regenerator@npm:^0.6.1":
+ version: 0.6.1
+ resolution: "babel-plugin-polyfill-regenerator@npm:0.6.1"
dependencies:
- "@babel/helper-define-polyfill-provider": ^0.2.2
+ "@babel/helper-define-polyfill-provider": ^0.6.1
peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 3e32e318fd91d65c3af2bb363189f00d3839f07a73a08813b553553e07da205162091b428dd5b6ffb6ea4caf531ff43ebc54197b0a5a9dc2fc5c7e9a650e946d
+ "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0
+ checksum: 9df4a8e9939dd419fed3d9ea26594b4479f2968f37c225e1b2aa463001d7721f5537740e6622909d2a570b61cec23256924a1701404fc9d6fd4474d3e845cedb
languageName: node
linkType: hard
languageName: node
linkType: hard
-"babel-plugin-transform-react-remove-prop-types@npm:0.4.24":
+"babel-plugin-transform-react-remove-prop-types@npm:^0.4.24":
version: 0.4.24
resolution: "babel-plugin-transform-react-remove-prop-types@npm:0.4.24"
checksum: 54afe56d67f0d118c9da23996f39948e502a152b3f582eb6e8f163fcb76c2c1ea4e0cdd4f9fac5c0ef050eab4fe0a950b0b74aae6237bcc0d31d8fc4cc808d1a
languageName: node
linkType: hard
-"babel-preset-jest@npm:^24.9.0":
- version: 24.9.0
- resolution: "babel-preset-jest@npm:24.9.0"
+"babel-preset-current-node-syntax@npm:^1.0.0":
+ version: 1.0.1
+ resolution: "babel-preset-current-node-syntax@npm:1.0.1"
dependencies:
- "@babel/plugin-syntax-object-rest-spread": ^7.0.0
- babel-plugin-jest-hoist: ^24.9.0
+ "@babel/plugin-syntax-async-generators": ^7.8.4
+ "@babel/plugin-syntax-bigint": ^7.8.3
+ "@babel/plugin-syntax-class-properties": ^7.8.3
+ "@babel/plugin-syntax-import-meta": ^7.8.3
+ "@babel/plugin-syntax-json-strings": ^7.8.3
+ "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3
+ "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
+ "@babel/plugin-syntax-numeric-separator": ^7.8.3
+ "@babel/plugin-syntax-object-rest-spread": ^7.8.3
+ "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
+ "@babel/plugin-syntax-optional-chaining": ^7.8.3
+ "@babel/plugin-syntax-top-level-await": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0
- checksum: d32ab6255e36ed06ef1cc53089b261a74c171d17758792979c2992d4fcb97982f67f837156bbef38042eb11751496a783dee61aafcbf2d7449ed94d52483bee2
+ checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8
languageName: node
linkType: hard
-"babel-preset-react-app@npm:^9.1.2":
- version: 9.1.2
- resolution: "babel-preset-react-app@npm:9.1.2"
+"babel-preset-jest@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "babel-preset-jest@npm:26.6.2"
dependencies:
- "@babel/core": 7.9.0
- "@babel/plugin-proposal-class-properties": 7.8.3
- "@babel/plugin-proposal-decorators": 7.8.3
- "@babel/plugin-proposal-nullish-coalescing-operator": 7.8.3
- "@babel/plugin-proposal-numeric-separator": 7.8.3
- "@babel/plugin-proposal-optional-chaining": 7.9.0
- "@babel/plugin-transform-flow-strip-types": 7.9.0
- "@babel/plugin-transform-react-display-name": 7.8.3
- "@babel/plugin-transform-runtime": 7.9.0
- "@babel/preset-env": 7.9.0
- "@babel/preset-react": 7.9.1
- "@babel/preset-typescript": 7.9.0
- "@babel/runtime": 7.9.0
- babel-plugin-macros: 2.8.0
- babel-plugin-transform-react-remove-prop-types: 0.4.24
- checksum: ebdf90c922394ba3c72a326e14c5deff45292fdb46e114d5d83e9a1cf9cb433262254def4347767f5c7aa0924f0795dadae5c82bbc3acd77111c0b1df9316cd9
+ babel-plugin-jest-hoist: ^26.6.2
+ babel-preset-current-node-syntax: ^1.0.0
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 1d9bef3a7ac6751a09d29ceb84be8b1998abd210fafa12223689c744db4f2a63ab90cba7986a71f3154d9aceda9dbeca563178731d21cbaf793b4096ed3a4d01
languageName: node
linkType: hard
-"babel-register@npm:^6.26.0":
- version: 6.26.0
- resolution: "babel-register@npm:6.26.0"
+"babel-preset-react-app@npm:^10.0.0":
+ version: 10.0.1
+ resolution: "babel-preset-react-app@npm:10.0.1"
dependencies:
- babel-core: ^6.26.0
- babel-runtime: ^6.26.0
- core-js: ^2.5.0
- home-or-tmp: ^2.0.0
- lodash: ^4.17.4
- mkdirp: ^0.5.1
- source-map-support: ^0.4.15
- checksum: 75d5fe060e4850dbdbd5f56db2928cd0b6b6c93a65ba5f2a991465af4dc3f4adf46d575138f228b2169b1e25e3b4a7cdd16515a355fea41b873321bf56467583
+ "@babel/core": ^7.16.0
+ "@babel/plugin-proposal-class-properties": ^7.16.0
+ "@babel/plugin-proposal-decorators": ^7.16.4
+ "@babel/plugin-proposal-nullish-coalescing-operator": ^7.16.0
+ "@babel/plugin-proposal-numeric-separator": ^7.16.0
+ "@babel/plugin-proposal-optional-chaining": ^7.16.0
+ "@babel/plugin-proposal-private-methods": ^7.16.0
+ "@babel/plugin-transform-flow-strip-types": ^7.16.0
+ "@babel/plugin-transform-react-display-name": ^7.16.0
+ "@babel/plugin-transform-runtime": ^7.16.4
+ "@babel/preset-env": ^7.16.4
+ "@babel/preset-react": ^7.16.0
+ "@babel/preset-typescript": ^7.16.0
+ "@babel/runtime": ^7.16.3
+ babel-plugin-macros: ^3.1.0
+ babel-plugin-transform-react-remove-prop-types: ^0.4.24
+ checksum: ee66043484e67b8aef2541976388299691478ea00834f3bb14b6b3d5edcd316a5ac95351f6ec084b41ee555cad820d4194280ad38ce51884fedc7e8946a57b74
languageName: node
linkType: hard
-"babel-runtime@npm:6.26.0, babel-runtime@npm:^6.22.0, babel-runtime@npm:^6.23.0, babel-runtime@npm:^6.26.0":
+"babel-runtime@npm:^6.23.0, babel-runtime@npm:^6.26.0":
version: 6.26.0
resolution: "babel-runtime@npm:6.26.0"
dependencies:
languageName: node
linkType: hard
-"babel-template@npm:^6.24.1, babel-template@npm:^6.26.0":
- version: 6.26.0
- resolution: "babel-template@npm:6.26.0"
- dependencies:
- babel-runtime: ^6.26.0
- babel-traverse: ^6.26.0
- babel-types: ^6.26.0
- babylon: ^6.18.0
- lodash: ^4.17.4
- checksum: 028dd57380f09b5641b74874a19073c53c4fb3f1696e849575aae18f8c80eaf21db75209057db862f3b893ce2cd9b795d539efa591b58f4a0fb011df0a56fbed
- languageName: node
- linkType: hard
-
-"babel-traverse@npm:^6.26.0":
- version: 6.26.0
- resolution: "babel-traverse@npm:6.26.0"
- dependencies:
- babel-code-frame: ^6.26.0
- babel-messages: ^6.23.0
- babel-runtime: ^6.26.0
- babel-types: ^6.26.0
- babylon: ^6.18.0
- debug: ^2.6.8
- globals: ^9.18.0
- invariant: ^2.2.2
- lodash: ^4.17.4
- checksum: fca037588d2791ae0409f1b7aa56075b798699cccc53ea04d82dd1c0f97b9e7ab17065f7dd3ecd69101d7874c9c8fd5e0f88fa53abbae1fe94e37e6b81ebcb8d
- languageName: node
- linkType: hard
-
-"babel-types@npm:^6.26.0":
- version: 6.26.0
- resolution: "babel-types@npm:6.26.0"
- dependencies:
- babel-runtime: ^6.26.0
- esutils: ^2.0.2
- lodash: ^4.17.4
- to-fast-properties: ^1.0.3
- checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76
- languageName: node
- linkType: hard
-
"babylon@npm:^6.18.0":
version: 6.18.0
resolution: "babylon@npm:6.18.0"
languageName: node
linkType: hard
+"bfj@npm:^7.0.2":
+ version: 7.1.0
+ resolution: "bfj@npm:7.1.0"
+ dependencies:
+ bluebird: ^3.7.2
+ check-types: ^11.2.3
+ hoopy: ^0.1.4
+ jsonpath: ^1.1.1
+ tryer: ^1.0.1
+ checksum: 36da9ed36c60f377a3f43bb0433092af7dc40442914b8155a1330ae86b1905640baf57e9c195ab83b36d6518b27cf8ed880adff663aa444c193be149e027d722
+ languageName: node
+ linkType: hard
+
"big.js@npm:^5.2.2":
version: 5.2.2
resolution: "big.js@npm:5.2.2"
languageName: node
linkType: hard
-"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1":
+"bn.js@npm:^5.0.0":
version: 5.2.0
resolution: "bn.js@npm:5.2.0"
checksum: 6117170393200f68b35a061ecbf55d01dd989302e7b3c798a3012354fa638d124f0b2f79e63f77be5556be80322a09c40339eda6413ba7468524c0b6d4b4cb7a
languageName: node
linkType: hard
-"body-parser@npm:1.19.0":
- version: 1.19.0
- resolution: "body-parser@npm:1.19.0"
+"bn.js@npm:^5.2.1":
+ version: 5.2.1
+ resolution: "bn.js@npm:5.2.1"
+ checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3
+ languageName: node
+ linkType: hard
+
+"body-parser@npm:1.20.2":
+ version: 1.20.2
+ resolution: "body-parser@npm:1.20.2"
dependencies:
- bytes: 3.1.0
- content-type: ~1.0.4
+ bytes: 3.1.2
+ content-type: ~1.0.5
debug: 2.6.9
- depd: ~1.1.2
- http-errors: 1.7.2
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
iconv-lite: 0.4.24
- on-finished: ~2.3.0
- qs: 6.7.0
- raw-body: 2.4.0
- type-is: ~1.6.17
- checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1
+ on-finished: 2.4.1
+ qs: 6.11.0
+ raw-body: 2.5.2
+ type-is: ~1.6.18
+ unpipe: 1.0.0
+ checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737
languageName: node
linkType: hard
languageName: node
linkType: hard
-"browser-resolve@npm:^1.11.3":
- version: 1.11.3
- resolution: "browser-resolve@npm:1.11.3"
- dependencies:
- resolve: 1.1.7
- checksum: 431bfc1a17406362a3010a2c35503eb7d1253dbcb8081c1ce236ddb0b954a33d52dcaf0b07f64c0f20394d6eeec1be4f6551da3734ce9ed5dcc38e876c96d5d5
- languageName: node
- linkType: hard
-
-"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4":
+"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0":
version: 1.2.0
resolution: "browserify-aes@npm:1.2.0"
dependencies:
languageName: node
linkType: hard
-"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1":
+"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.1.0":
version: 4.1.0
resolution: "browserify-rsa@npm:4.1.0"
dependencies:
linkType: hard
"browserify-sign@npm:^4.0.0":
- version: 4.2.1
- resolution: "browserify-sign@npm:4.2.1"
+ version: 4.2.3
+ resolution: "browserify-sign@npm:4.2.3"
dependencies:
- bn.js: ^5.1.1
- browserify-rsa: ^4.0.1
+ bn.js: ^5.2.1
+ browserify-rsa: ^4.1.0
create-hash: ^1.2.0
create-hmac: ^1.1.7
- elliptic: ^6.5.3
+ elliptic: ^6.5.5
+ hash-base: ~3.0
inherits: ^2.0.4
- parse-asn1: ^5.1.5
- readable-stream: ^3.6.0
- safe-buffer: ^5.2.0
- checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707
+ parse-asn1: ^5.1.7
+ readable-stream: ^2.3.8
+ safe-buffer: ^5.2.1
+ checksum: 403a8061d229ae31266670345b4a7c00051266761d2c9bbeb68b1a9bcb05f68143b16110cf23a171a5d6716396a1f41296282b3e73eeec0a1871c77f0ff4ee6b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"browserslist@npm:4.10.0":
- version: 4.10.0
- resolution: "browserslist@npm:4.10.0"
+"browserslist@npm:4.14.2":
+ version: 4.14.2
+ resolution: "browserslist@npm:4.14.2"
dependencies:
- caniuse-lite: ^1.0.30001035
- electron-to-chromium: ^1.3.378
- node-releases: ^1.1.52
- pkg-up: ^3.1.0
+ caniuse-lite: ^1.0.30001125
+ electron-to-chromium: ^1.3.564
+ escalade: ^3.0.2
+ node-releases: ^1.1.61
bin:
browserslist: cli.js
- checksum: 35fdd9653656008a4f7a42026faa3e5ff3c5da83a39b7163675ae96985cbf8607beba55a877f2cf68f34cba7c8bb95418683664b663a051f094eb6d73dd4baf5
+ checksum: 44b5d7a444b867e1f027923f37a8ed537b4403f8a85a35869904e7d3e4071b37459df08d41ab4d425f5191f3125f1c5a191cbff9070f81f4d311803dc0a2fb0f
languageName: node
linkType: hard
-"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.16.6, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4, browserslist@npm:^4.9.1":
+"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.16.6, browserslist@npm:^4.6.2, browserslist@npm:^4.6.4":
version: 4.22.1
resolution: "browserslist@npm:4.22.1"
dependencies:
languageName: node
linkType: hard
+"browserslist@npm:^4.22.2, browserslist@npm:^4.23.0":
+ version: 4.23.0
+ resolution: "browserslist@npm:4.23.0"
+ dependencies:
+ caniuse-lite: ^1.0.30001587
+ electron-to-chromium: ^1.4.668
+ node-releases: ^2.0.14
+ update-browserslist-db: ^1.0.13
+ bin:
+ browserslist: cli.js
+ checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def
+ languageName: node
+ linkType: hard
+
"bser@npm:2.1.1":
version: 2.1.1
resolution: "bser@npm:2.1.1"
languageName: node
linkType: hard
+"builtin-modules@npm:^3.1.0":
+ version: 3.3.0
+ resolution: "builtin-modules@npm:3.3.0"
+ checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d
+ languageName: node
+ linkType: hard
+
"builtin-status-codes@npm:^3.0.0":
version: 3.0.0
resolution: "builtin-status-codes@npm:3.0.0"
languageName: node
linkType: hard
-"bytes@npm:3.1.0":
- version: 3.1.0
- resolution: "bytes@npm:3.1.0"
- checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df
+"bytes@npm:3.1.2":
+ version: 3.1.2
+ resolution: "bytes@npm:3.1.2"
+ checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"cacache@npm:^13.0.1":
- version: 13.0.1
- resolution: "cacache@npm:13.0.1"
- dependencies:
- chownr: ^1.1.2
- figgy-pudding: ^3.5.1
- fs-minipass: ^2.0.0
- glob: ^7.1.4
- graceful-fs: ^4.2.2
- infer-owner: ^1.0.4
- lru-cache: ^5.1.1
- minipass: ^3.0.0
- minipass-collect: ^1.0.2
- minipass-flush: ^1.0.5
- minipass-pipeline: ^1.2.2
- mkdirp: ^0.5.1
- move-concurrently: ^1.0.1
- p-map: ^3.0.0
- promise-inflight: ^1.0.1
- rimraf: ^2.7.1
- ssri: ^7.0.0
- unique-filename: ^1.1.1
- checksum: 733e65de5a0db3f1c181aa780f60ff121b5efd9b7c0851e1e1f213df768a790882d4d5af987fb0cfa70c5c6c4834e0474a291ac8872d227056f7ea12c1447092
- languageName: node
- linkType: hard
-
-"cacache@npm:^15.2.0, cacache@npm:^15.3.0":
+"cacache@npm:^15.0.5, cacache@npm:^15.2.0, cacache@npm:^15.3.0":
version: 15.3.0
resolution: "cacache@npm:15.3.0"
dependencies:
languageName: node
linkType: hard
-"call-me-maybe@npm:^1.0.1":
- version: 1.0.1
- resolution: "call-me-maybe@npm:1.0.1"
- checksum: d19e9d6ac2c6a83fb1215718b64c5e233f688ebebb603bdfe4af59cde952df1f2b648530fab555bf290ea910d69d7d9665ebc916e871e0e194f47c2e48e4886b
+"call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "call-bind@npm:1.0.7"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ set-function-length: ^1.2.1
+ checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029
languageName: node
linkType: hard
languageName: node
linkType: hard
-"camelcase-keys@npm:^2.0.0":
- version: 2.1.0
- resolution: "camelcase-keys@npm:2.1.0"
- dependencies:
- camelcase: ^2.0.0
- map-obj: ^1.0.0
- checksum: 97d2993da5db44d45e285910c70a54ce7f83a2be05afceaafd9831f7aeaf38a48dcdede5ca3aae2b2694852281d38dc459706e346942c5df0bf755f4133f5c39
- languageName: node
- linkType: hard
-
"camelcase-keys@npm:^6.2.2":
version: 6.2.2
resolution: "camelcase-keys@npm:6.2.2"
languageName: node
linkType: hard
-"camelcase@npm:^2.0.0":
- version: 2.1.1
- resolution: "camelcase@npm:2.1.1"
- checksum: 20a3ef08f348de832631d605362ffe447d883ada89617144a82649363ed5860923b021f8e09681624ef774afb93ff3597cfbcf8aaf0574f65af7648f1aea5e50
- languageName: node
- linkType: hard
-
-"camelcase@npm:^3.0.0":
- version: 3.0.0
- resolution: "camelcase@npm:3.0.0"
- checksum: ae4fe1c17c8442a3a345a6b7d2393f028ab7a7601af0c352ad15d1ab97ca75112e19e29c942b2a214898e160194829b68923bce30e018d62149c6d84187f1673
+"camelcase@npm:^6.0.0, camelcase@npm:^6.1.0, camelcase@npm:^6.2.0":
+ version: 6.3.0
+ resolution: "camelcase@npm:6.3.0"
+ checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d
languageName: node
linkType: hard
languageName: node
linkType: hard
-"caniuse-lite@npm:1.0.30001299":
- version: 1.0.30001299
- resolution: "caniuse-lite@npm:1.0.30001299"
- checksum: c770f60ebf3e0cc8043ba4db0ebec12d7a595a6b50cb4437c3c5c55b04de9d2413f711f2828be761e8c37bb46b927a8abe6b199b8f0ffc1a34af0ebdee84be27
+"caniuse-lite@npm:1.0.30001606, caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001541, caniuse-lite@npm:^1.0.30001587":
+ version: 1.0.30001606
+ resolution: "caniuse-lite@npm:1.0.30001606"
+ checksum: fcf2d799d8cb159f4f5b44cd9d2171b18df4bcfdf2770cc8a79c4bb0bc5fd19ed089854223865ced32eacffb60a0a9257c8a1d0ef239e9dc3909f587727e9bb5
languageName: node
linkType: hard
-"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000981, caniuse-lite@npm:^1.0.30001035, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001541":
- version: 1.0.30001593
- resolution: "caniuse-lite@npm:1.0.30001593"
- checksum: 3e2b19075563c3222101c8d5e6ab2f6e1ba99c3ad03b8d2449f9ee7ed03e9d3dac0b1fb24c129e9a5d89fdde4abb97392280c0abb113c0c60250a2b49f378c60
+"caniuse-lite@npm:^1.0.30001125":
+ version: 1.0.30001610
+ resolution: "caniuse-lite@npm:1.0.30001610"
+ checksum: 580c7367aafd7e524f4e3f0e8b22ac08d081a4d44ceece211f1758e214df9a87961750fb1e1ee28a2cd2830f0daf3edafe5e1d87bf1eefbbe7c6cf3d00e2979d
languageName: node
linkType: hard
languageName: node
linkType: hard
-"chalk@npm:2.4.2, chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
+"chalk@npm:2.4.2, chalk@npm:^2.0.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
version: 2.4.2
resolution: "chalk@npm:2.4.2"
dependencies:
languageName: node
linkType: hard
-"chalk@npm:^1.1.3":
- version: 1.1.3
- resolution: "chalk@npm:1.1.3"
- dependencies:
- 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
- checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd
- languageName: node
- linkType: hard
-
"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
languageName: node
linkType: hard
-"chardet@npm:^0.7.0":
- version: 0.7.0
- resolution: "chardet@npm:0.7.0"
- checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d
+"char-regex@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "char-regex@npm:1.0.2"
+ checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17
languageName: node
linkType: hard
languageName: node
linkType: hard
+"check-types@npm:^11.2.3":
+ version: 11.2.3
+ resolution: "check-types@npm:11.2.3"
+ checksum: f99ff09ae65e63cfcfa40a1275c0a70d8c43ffbf9ac35095f3bf030cc70361c92e075a9975a1144329e50b4fe4620be6bedb4568c18abc96071a3e23aed3ed8e
+ languageName: node
+ linkType: hard
+
"cheerio-select@npm:^1.5.0":
version: 1.5.0
resolution: "cheerio-select@npm:1.5.0"
languageName: node
linkType: hard
-"chokidar@npm:^3.3.0, chokidar@npm:^3.4.0, chokidar@npm:^3.4.1":
+"chokidar@npm:^3.4.1":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
dependencies:
languageName: node
linkType: hard
-"chownr@npm:^1.1.1, chownr@npm:^1.1.2":
+"chownr@npm:^1.1.1":
version: 1.1.4
resolution: "chownr@npm:1.1.4"
checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d
languageName: node
linkType: hard
+"cjs-module-lexer@npm:^0.6.0":
+ version: 0.6.0
+ resolution: "cjs-module-lexer@npm:0.6.0"
+ checksum: 445b039607efd74561d7db8d0867031c8b6a69f25e83fdd861b0fa1fbc11f12de057ba1db80637f3c9016774354092af5325eebb90505d65ccc5389cae09d1fd
+ languageName: node
+ linkType: hard
+
"class-autobind@npm:^0.1.4":
version: 0.1.4
resolution: "class-autobind@npm:0.1.4"
languageName: node
linkType: hard
-"cli-width@npm:^2.0.0":
- version: 2.2.1
- resolution: "cli-width@npm:2.2.1"
- checksum: 3c21b897a2ff551ae5b3c3ab32c866ed2965dcf7fb442f81adf0e27f4a397925c8f84619af7bcc6354821303f6ee9b2aa31d248306174f32c287986158cf4eed
- languageName: node
- linkType: hard
-
-"cli-width@npm:^3.0.0":
- version: 3.0.0
- resolution: "cli-width@npm:3.0.0"
- checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6
- languageName: node
- linkType: hard
-
-"cliui@npm:^3.2.0":
- version: 3.2.0
- resolution: "cliui@npm:3.2.0"
- dependencies:
- string-width: ^1.0.1
- strip-ansi: ^3.0.1
- wrap-ansi: ^2.0.0
- checksum: c68d1dbc3e347bfe79ed19cc7f48007d5edd6cd8438342e32073e0b4e311e3c44e1f4f19221462bc6590de56c2df520e427533a9dde95dee25710bec322746ad
- languageName: node
- linkType: hard
-
"cliui@npm:^5.0.0":
version: 5.0.0
resolution: "cliui@npm:5.0.0"
languageName: node
linkType: hard
+"cliui@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "cliui@npm:6.0.0"
+ dependencies:
+ string-width: ^4.2.0
+ strip-ansi: ^6.0.0
+ wrap-ansi: ^6.2.0
+ checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42
+ languageName: node
+ linkType: hard
+
"cliui@npm:^7.0.2":
version: 7.0.4
resolution: "cliui@npm:7.0.4"
languageName: node
linkType: hard
-"clone-deep@npm:^0.2.4":
- version: 0.2.4
- resolution: "clone-deep@npm:0.2.4"
- dependencies:
- for-own: ^0.1.3
- is-plain-object: ^2.0.1
- kind-of: ^3.0.2
- lazy-cache: ^1.0.3
- shallow-clone: ^0.1.2
- checksum: bcf9752052130c270c47d3e1c357497354b91d682f507e0079bec5950975b3293b619d9e100d70874606d716f2376e84956b045759a09af703e1038ecad6c438
- languageName: node
- linkType: hard
-
"clone-deep@npm:^4.0.1":
version: 4.0.1
resolution: "clone-deep@npm:4.0.1"
languageName: node
linkType: hard
-"code-point-at@npm:^1.0.0":
- version: 1.1.0
- resolution: "code-point-at@npm:1.1.0"
- checksum: 17d5666611f9b16d64fdf48176d9b7fb1c7d1c1607a189f7e600040a11a6616982876af148230336adb7d8fe728a559f743a4e29db3747e3b1a32fa7f4529681
+"collect-v8-coverage@npm:^1.0.0":
+ version: 1.0.2
+ resolution: "collect-v8-coverage@npm:1.0.2"
+ checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da
languageName: node
linkType: hard
languageName: node
linkType: hard
-"color-support@npm:^1.1.2, color-support@npm:^1.1.3":
+"color-support@npm:^1.1.3":
version: 1.1.3
resolution: "color-support@npm:1.1.3"
bin:
languageName: node
linkType: hard
-"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6":
+"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
dependencies:
languageName: node
linkType: hard
-"commander@npm:^2.11.0, commander@npm:^2.12.1, commander@npm:^2.19.0, commander@npm:^2.20.0":
+"commander@npm:^2.12.1, commander@npm:^2.19.0, commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
languageName: node
linkType: hard
-"confusing-browser-globals@npm:^1.0.9":
- version: 1.0.10
- resolution: "confusing-browser-globals@npm:1.0.10"
- checksum: 7ccdc44c2ca419cf6576c3e4336106e18d1c5337f547e461342f51aec4a10f96fdfe45414b522be3c7d24ea0b62bf4372cd37768022e4d6161707ffb2c0987e6
+"confusing-browser-globals@npm:^1.0.10":
+ version: 1.0.11
+ resolution: "confusing-browser-globals@npm:1.0.11"
+ checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef
languageName: node
linkType: hard
languageName: node
linkType: hard
-"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0":
+"console-control-strings@npm:^1.1.0":
version: 1.1.0
resolution: "console-control-strings@npm:1.1.0"
checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed
languageName: node
linkType: hard
-"contains-path@npm:^0.1.0":
- version: 0.1.0
- resolution: "contains-path@npm:0.1.0"
- checksum: 94ecfd944e0bc51be8d3fc596dcd17d705bd4c8a1a627952a3a8c5924bac01c7ea19034cf40b4b4f89e576cdead130a7e5fd38f5f7f07ef67b4b261d875871e3
- languageName: node
- linkType: hard
-
-"content-disposition@npm:0.5.3":
- version: 0.5.3
- resolution: "content-disposition@npm:0.5.3"
+"content-disposition@npm:0.5.4":
+ version: 0.5.4
+ resolution: "content-disposition@npm:0.5.4"
dependencies:
- safe-buffer: 5.1.2
- checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380
+ safe-buffer: 5.2.1
+ checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3
languageName: node
linkType: hard
languageName: node
linkType: hard
+"content-type@npm:~1.0.5":
+ version: 1.0.5
+ resolution: "content-type@npm:1.0.5"
+ checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766
+ languageName: node
+ linkType: hard
+
"convert-source-map@npm:1.7.0":
version: 1.7.0
resolution: "convert-source-map@npm:1.7.0"
languageName: node
linkType: hard
-"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.1, convert-source-map@npm:^1.7.0":
+"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.7.0":
version: 1.8.0
resolution: "convert-source-map@npm:1.8.0"
dependencies:
languageName: node
linkType: hard
+"convert-source-map@npm:^1.6.0":
+ version: 1.9.0
+ resolution: "convert-source-map@npm:1.9.0"
+ checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8
+ languageName: node
+ linkType: hard
+
+"convert-source-map@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "convert-source-map@npm:2.0.0"
+ checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035
+ languageName: node
+ linkType: hard
+
"cookie-signature@npm:1.0.6":
version: 1.0.6
resolution: "cookie-signature@npm:1.0.6"
languageName: node
linkType: hard
-"cookie@npm:0.4.0":
- version: 0.4.0
- resolution: "cookie@npm:0.4.0"
- checksum: 760384ba0aef329c52523747e36a452b5e51bc49b34160363a6934e7b7df3f93fcc88b35e33450361535d40a92a96412da870e1816aba9aa6cc556a9fedd8492
+"cookie@npm:0.6.0":
+ version: 0.6.0
+ resolution: "cookie@npm:0.6.0"
+ checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410
languageName: node
linkType: hard
languageName: node
linkType: hard
-"core-js-compat@npm:^3.14.0, core-js-compat@npm:^3.15.0, core-js-compat@npm:^3.6.2":
- version: 3.15.1
- resolution: "core-js-compat@npm:3.15.1"
+"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1":
+ version: 3.36.1
+ resolution: "core-js-compat@npm:3.36.1"
dependencies:
- browserslist: ^4.16.6
- semver: 7.0.0
- checksum: cf2fb3406c7fd82edee3ccf9e55e538cf75da79845d5dbffaf979cb9e73e26943ee6e7d07c5cbc50c5909fba1c5a4ca499d0f249fdb491da45b40f8584a4c761
- languageName: node
- linkType: hard
-
-"core-js-pure@npm:^3.15.0":
- version: 3.15.1
- resolution: "core-js-pure@npm:3.15.1"
- checksum: e4053f6f3ab4268f991d76f4c3f918cfa5a95182d0c5ddcc32d381bc208318b5817db8fb01d531363a7d110b46ea1c6ffb14e832f661bfea3e213d52d9b92658
+ browserslist: ^4.23.0
+ checksum: c9109bd599a97b5d20f25fc8b8339b8c7f3fca5f9a1bebd397805383ff7699e117786c7ffe0f7a95058a6fa5e0e1435d4c10e5cda6ad86ce1957986bb6580562
languageName: node
linkType: hard
languageName: node
linkType: hard
-"core-js@npm:^2.4.0, core-js@npm:^2.5.0":
+"core-js@npm:^2.4.0, core-js@npm:^2.5.0, core-js@npm:^2.6.12":
version: 2.6.12
resolution: "core-js@npm:2.6.12"
checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016
languageName: node
linkType: hard
-"core-js@npm:^3.5.0, core-js@npm:^3.6.4":
+"core-js@npm:^3.6.4":
version: 3.15.1
resolution: "core-js@npm:3.15.1"
checksum: d44c1099b4028bee17990473df0b508ad0f6701aba9e13055183fe4a8bd1459e9e22f22b8e6c0b0a6ac0974b404672df47d52be3341a776a227fc368f2aa1fbe
languageName: node
linkType: hard
+"core-js@npm:^3.6.5":
+ version: 3.36.1
+ resolution: "core-js@npm:3.36.1"
+ checksum: 6f6c152179bd0673da34e67a82c6a5c37f31f9fbe908e9caf93749dc62a25b6e07fbff2411de3b74bb2d0661b7f9fb247115ba8efabf9904f5fef26edead515e
+ languageName: node
+ linkType: hard
+
"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0":
version: 1.0.2
resolution: "core-util-is@npm:1.0.2"
languageName: node
linkType: hard
-"cosmiconfig@npm:^5.0.0, cosmiconfig@npm:^5.2.1":
+"cosmiconfig@npm:^5.0.0":
version: 5.2.1
resolution: "cosmiconfig@npm:5.2.1"
dependencies:
languageName: node
linkType: hard
-"cosmiconfig@npm:^6.0.0":
- version: 6.0.0
- resolution: "cosmiconfig@npm:6.0.0"
+"cosmiconfig@npm:^7.0.0":
+ version: 7.1.0
+ resolution: "cosmiconfig@npm:7.1.0"
dependencies:
"@types/parse-json": ^4.0.0
- import-fresh: ^3.1.0
+ import-fresh: ^3.2.1
parse-json: ^5.0.0
path-type: ^4.0.0
- yaml: ^1.7.2
- checksum: 8eed7c854b91643ecb820767d0deb038b50780ecc3d53b0b19e03ed8aabed4ae77271198d1ae3d49c3b110867edf679f5faad924820a8d1774144a87cb6f98fc
+ yaml: ^1.10.0
+ checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f
languageName: node
linkType: hard
languageName: node
linkType: hard
-"cross-spawn@npm:7.0.1":
- version: 7.0.1
- resolution: "cross-spawn@npm:7.0.1"
+"cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3":
+ version: 7.0.3
+ resolution: "cross-spawn@npm:7.0.3"
dependencies:
path-key: ^3.1.0
shebang-command: ^2.0.0
which: ^2.0.1
- checksum: 5c1c52be2d24f0ada793920bf0beca61ea9cc03bb5c400617ddfd2c03f10ed86a0c39fb67bcf2cee91ec4dd7e9f1595ed9c40f84352d2881937bf861281f651a
+ checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52
languageName: node
linkType: hard
-"cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5":
+"cross-spawn@npm:^6.0.0":
version: 6.0.5
resolution: "cross-spawn@npm:6.0.5"
dependencies:
nice-try: ^1.0.4
- path-key: ^2.0.1
- semver: ^5.5.0
- shebang-command: ^1.2.0
- which: ^1.2.9
- checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9
- languageName: node
- linkType: hard
-
-"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3":
- version: 7.0.3
- resolution: "cross-spawn@npm:7.0.3"
- dependencies:
- path-key: ^3.1.0
- shebang-command: ^2.0.0
- which: ^2.0.1
- checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52
+ path-key: ^2.0.1
+ semver: ^5.5.0
+ shebang-command: ^1.2.0
+ which: ^1.2.9
+ checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9
languageName: node
linkType: hard
languageName: node
linkType: hard
+"crypto-random-string@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "crypto-random-string@npm:1.0.0"
+ checksum: 6fc61a46c18547b49a93da24f4559c4a1c859f4ee730ecc9533c1ba89fa2a9e9d81f390c2789467afbbd0d1c55a6e96a71e4716b6cd3e77736ed5fced7a2df9a
+ languageName: node
+ linkType: hard
+
"css-blank-pseudo@npm:^0.1.4":
version: 0.1.4
resolution: "css-blank-pseudo@npm:0.1.4"
languageName: node
linkType: hard
-"css-loader@npm:3.4.2":
- version: 3.4.2
- resolution: "css-loader@npm:3.4.2"
+"css-loader@npm:4.3.0":
+ version: 4.3.0
+ resolution: "css-loader@npm:4.3.0"
dependencies:
- camelcase: ^5.3.1
+ camelcase: ^6.0.0
cssesc: ^3.0.0
icss-utils: ^4.1.1
- loader-utils: ^1.2.3
- normalize-path: ^3.0.0
- postcss: ^7.0.23
+ loader-utils: ^2.0.0
+ postcss: ^7.0.32
postcss-modules-extract-imports: ^2.0.0
- postcss-modules-local-by-default: ^3.0.2
- postcss-modules-scope: ^2.1.1
+ postcss-modules-local-by-default: ^3.0.3
+ postcss-modules-scope: ^2.2.0
postcss-modules-values: ^3.0.0
- postcss-value-parser: ^4.0.2
- schema-utils: ^2.6.0
+ postcss-value-parser: ^4.1.0
+ schema-utils: ^2.7.1
+ semver: ^7.3.2
peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
- checksum: dbd80f052b41ea7c33d96a2fbeabca82773f7e3567300c636ffb079ffcf8ba111b02f315346942334ed27ffc137323c9a4ac1e446eaed5837abbdd3fdd371a0c
+ webpack: ^4.27.0 || ^5.0.0
+ checksum: 697a8838f0975f86c634e7a920572604879a9738128fcc01e5393fae5ac9a7a1a925c0d14ebb6ed67fa7e14bd17849eec152a99e3299cc92f422f6b0cd4eff73
languageName: node
linkType: hard
languageName: node
linkType: hard
-"cssom@npm:0.3.x, cssom@npm:>= 0.3.2 < 0.4.0, cssom@npm:^0.3.4":
+"cssom@npm:^0.4.4":
+ version: 0.4.4
+ resolution: "cssom@npm:0.4.4"
+ checksum: e3bc1076e7ee4213d4fef05e7ae03bfa83dc05f32611d8edc341f4ecc3d9647b89c8245474c7dd2cdcdb797a27c462e99da7ad00a34399694559f763478ff53f
+ languageName: node
+ linkType: hard
+
+"cssom@npm:~0.3.6":
version: 0.3.8
resolution: "cssom@npm:0.3.8"
checksum: 24beb3087c76c0d52dd458be9ee1fbc80ac771478a9baef35dd258cdeb527c68eb43204dd439692bb2b1ae5272fa5f2946d10946edab0d04f1078f85e06bc7f6
languageName: node
linkType: hard
-"cssstyle@npm:^1.0.0, cssstyle@npm:^1.1.1":
- version: 1.4.0
- resolution: "cssstyle@npm:1.4.0"
+"cssstyle@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "cssstyle@npm:2.3.0"
dependencies:
- cssom: 0.3.x
- checksum: 7efb9731d68dd042f32e0e3bbc7c1096653ba521f21ab1c5b158862321e4fcbfb51070641b834fadc8dd070a634dd43f328177e00d1b8481b5143a3e09f3d3f6
+ cssom: ~0.3.6
+ checksum: 5f05e6fd2e3df0b44695c2f08b9ef38b011862b274e320665176467c0725e44a53e341bc4959a41176e83b66064ab786262e7380fd1cabeae6efee0d255bb4e3
languageName: node
linkType: hard
languageName: node
linkType: hard
-"currently-unhandled@npm:^0.4.1":
- version: 0.4.1
- resolution: "currently-unhandled@npm:0.4.1"
- dependencies:
- array-find-index: ^1.0.1
- checksum: 1f59fe10b5339b54b1a1eee110022f663f3495cf7cf2f480686e89edc7fa8bfe42dbab4b54f85034bc8b092a76cc7becbc2dad4f9adad332ab5831bec39ad540
- languageName: node
- linkType: hard
-
"cwlts@npm:1.15.29":
version: 1.15.29
resolution: "cwlts@npm:1.15.29"
languageName: node
linkType: hard
-"damerau-levenshtein@npm:^1.0.4":
- version: 1.0.7
- resolution: "damerau-levenshtein@npm:1.0.7"
- checksum: ec8161cb381523e0db9b5c9b64863736da3197808b6fdc4a3a2ca764c0b4357e9232a4c5592220fb18755a91240b8fee7b13ab1b269fbbdc5f68c36f0053aceb
+"d@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "d@npm:1.0.2"
+ dependencies:
+ es5-ext: ^0.10.64
+ type: ^2.7.2
+ checksum: 775db1e8ced6707cddf64a5840522fcf5475d38ef49a5d615be0ac47f86ef64d15f5a73de1522b09327cc466d4dc35ea83dbfeed456f7a0fdcab138deb800355
+ languageName: node
+ linkType: hard
+
+"damerau-levenshtein@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "damerau-levenshtein@npm:1.0.8"
+ checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de
languageName: node
linkType: hard
languageName: node
linkType: hard
-"data-urls@npm:^1.0.0, data-urls@npm:^1.1.0":
- version: 1.1.0
- resolution: "data-urls@npm:1.1.0"
+"data-urls@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "data-urls@npm:2.0.0"
+ dependencies:
+ abab: ^2.0.3
+ whatwg-mimetype: ^2.3.0
+ whatwg-url: ^8.0.0
+ checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71
+ languageName: node
+ linkType: hard
+
+"data-view-buffer@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "data-view-buffer@npm:1.0.1"
+ dependencies:
+ call-bind: ^1.0.6
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.1
+ checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c
+ languageName: node
+ linkType: hard
+
+"data-view-byte-length@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "data-view-byte-length@npm:1.0.1"
+ dependencies:
+ call-bind: ^1.0.7
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.1
+ checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269
+ languageName: node
+ linkType: hard
+
+"data-view-byte-offset@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "data-view-byte-offset@npm:1.0.0"
dependencies:
- abab: ^2.0.0
- whatwg-mimetype: ^2.2.0
- whatwg-url: ^7.0.0
- checksum: dc4bd9621df0dff336d7c4c0517c792488ef3cf11cd37e72ab80f3a7f0a0aa14bad677ac97cf22c87c6eb9518e58b98590e1c8c756b56240940f0e470c81612e
+ call-bind: ^1.0.6
+ es-errors: ^1.3.0
+ is-data-view: ^1.0.1
+ checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2
languageName: node
linkType: hard
languageName: node
linkType: hard
-"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.8, debug@npm:^2.6.9":
+"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0":
version: 2.6.9
resolution: "debug@npm:2.6.9"
dependencies:
languageName: node
linkType: hard
-"decamelize@npm:^1.1.0, decamelize@npm:^1.1.1, decamelize@npm:^1.1.2, decamelize@npm:^1.2.0":
+"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0":
version: 1.2.0
resolution: "decamelize@npm:1.2.0"
checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa
languageName: node
linkType: hard
+"decimal.js@npm:^10.2.1":
+ version: 10.4.3
+ resolution: "decimal.js@npm:10.4.3"
+ checksum: 796404dcfa9d1dbfdc48870229d57f788b48c21c603c3f6554a1c17c10195fc1024de338b0cf9e1efe0c7c167eeb18f04548979bcc5fdfabebb7cc0ae3287bae
+ languageName: node
+ linkType: hard
+
"decode-uri-component@npm:^0.2.0":
version: 0.2.2
resolution: "decode-uri-component@npm:0.2.2"
languageName: node
linkType: hard
+"dedent@npm:^0.7.0":
+ version: 0.7.0
+ resolution: "dedent@npm:0.7.0"
+ checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2
+ languageName: node
+ linkType: hard
+
"deep-equal@npm:^1.0.1":
version: 1.1.1
resolution: "deep-equal@npm:1.1.1"
languageName: node
linkType: hard
+"deep-is@npm:^0.1.3":
+ version: 0.1.4
+ resolution: "deep-is@npm:0.1.4"
+ checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804
+ languageName: node
+ linkType: hard
+
"deep-is@npm:~0.1.3":
version: 0.1.3
resolution: "deep-is@npm:0.1.3"
languageName: node
linkType: hard
+"deepmerge@npm:^4.2.2":
+ version: 4.3.1
+ resolution: "deepmerge@npm:4.3.1"
+ checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052
+ languageName: node
+ linkType: hard
+
"default-gateway@npm:^4.2.0":
version: 4.2.0
resolution: "default-gateway@npm:4.2.0"
languageName: node
linkType: hard
+"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "define-data-property@npm:1.1.4"
+ dependencies:
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ gopd: ^1.0.1
+ checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b
+ languageName: node
+ linkType: hard
+
"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3":
version: 1.1.3
resolution: "define-properties@npm:1.1.3"
languageName: node
linkType: hard
+"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "define-properties@npm:1.2.1"
+ dependencies:
+ define-data-property: ^1.0.1
+ has-property-descriptors: ^1.0.0
+ object-keys: ^1.1.1
+ checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12
+ languageName: node
+ linkType: hard
+
"define-property@npm:^0.2.5":
version: 0.2.5
resolution: "define-property@npm:0.2.5"
languageName: node
linkType: hard
+"depd@npm:2.0.0":
+ version: 2.0.0
+ resolution: "depd@npm:2.0.0"
+ checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a
+ languageName: node
+ linkType: hard
+
"depd@npm:^1.1.2, depd@npm:~1.1.2":
version: 1.1.2
resolution: "depd@npm:1.1.2"
languageName: node
linkType: hard
+"dequal@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "dequal@npm:2.0.3"
+ checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90
+ languageName: node
+ linkType: hard
+
"des.js@npm:^1.0.0":
version: 1.0.1
resolution: "des.js@npm:1.0.1"
languageName: node
linkType: hard
-"destroy@npm:~1.0.4":
- version: 1.0.4
- resolution: "destroy@npm:1.0.4"
- checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03
- languageName: node
- linkType: hard
-
-"detect-indent@npm:^4.0.0":
- version: 4.0.0
- resolution: "detect-indent@npm:4.0.0"
- dependencies:
- repeating: ^2.0.0
- checksum: 328f273915c1610899bc7d4784ce874413d0a698346364cd3ee5d79afba1c5cf4dbc97b85a801e20f4d903c0598bd5096af32b800dfb8696b81464ccb3dfda2c
+"destroy@npm:1.2.0":
+ version: 1.2.0
+ resolution: "destroy@npm:1.2.0"
+ checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38
languageName: node
linkType: hard
-"detect-newline@npm:^2.1.0":
- version: 2.1.0
- resolution: "detect-newline@npm:2.1.0"
- checksum: c55146fd5b97a9ce914f17f85a01466c9e8679289e2d390588b027a58f2e090dbc38457923072369c603b8904f982f87b78fee17e48d5706f35571642f4599f8
+"detect-newline@npm:^3.0.0":
+ version: 3.1.0
+ resolution: "detect-newline@npm:3.1.0"
+ checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7
languageName: node
linkType: hard
languageName: node
linkType: hard
-"diff-sequences@npm:^24.9.0":
- version: 24.9.0
- resolution: "diff-sequences@npm:24.9.0"
- checksum: b81f906ff1737e0a65e8f7ee3ad1d27b426dcc25498731365aeaccc32333da3bf3a7100c963c7104f12c8e64e545114d4fe4c0b90daf2565b0b00b79f0df45c4
- languageName: node
- linkType: hard
-
"diff-sequences@npm:^26.6.2":
version: 26.6.2
resolution: "diff-sequences@npm:26.6.2"
languageName: node
linkType: hard
-"dir-glob@npm:2.0.0":
- version: 2.0.0
- resolution: "dir-glob@npm:2.0.0"
- dependencies:
- arrify: ^1.0.1
- path-type: ^3.0.0
- checksum: adc4dc5dd9d2cc0a9ce864e52f9ac1c93e34487720fbed68bdf94cef7a9d88be430cc565300750571589dd35e168d0b286120317c0797f83a7cd8e6d9c69fcb7
- languageName: node
- linkType: hard
-
"dir-glob@npm:^3.0.1":
version: 3.0.1
resolution: "dir-glob@npm:3.0.1"
languageName: node
linkType: hard
-"doctrine@npm:1.5.0":
- version: 1.5.0
- resolution: "doctrine@npm:1.5.0"
- dependencies:
- esutils: ^2.0.2
- isarray: ^1.0.0
- checksum: 7ce8102a05cbb9d942d49db5461d2f3dd1208ebfed929bf1c04770a1ef6ef540b792e63c45eae4c51f8b16075e0af4a73581a06bad31c37ceb0988f2e398509b
- languageName: node
- linkType: hard
-
"doctrine@npm:^2.1.0":
version: 2.1.0
resolution: "doctrine@npm:2.1.0"
languageName: node
linkType: hard
-"domexception@npm:^1.0.1":
- version: 1.0.1
- resolution: "domexception@npm:1.0.1"
+"domexception@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "domexception@npm:2.0.1"
dependencies:
- webidl-conversions: ^4.0.2
- checksum: f564a9c0915dcb83ceefea49df14aaed106b1468fbe505119e8bcb0b77e242534f3aba861978537c0fc9dc6f35b176d0ffc77b3e342820fb27a8f215e7ae4d52
+ webidl-conversions: ^5.0.0
+ checksum: d638e9cb05c52999f1b2eb87c374b03311ea5b1d69c2f875bc92da73e17db60c12142b45c950228642ff7f845c536b65305483350d080df59003a653da80b691
languageName: node
linkType: hard
languageName: node
linkType: hard
-"electron-to-chromium@npm:^1.3.378":
- version: 1.3.758
- resolution: "electron-to-chromium@npm:1.3.758"
- checksum: 2fec13dcdd1b24a2314d309566bd08c7f0ce383787e64ea43c14a7fc2a11c8a76fdb9a56ce7a1da6137e1ef46365f999d10c656f2fb6b9ff792ea3ae808ebb86
+"ejs@npm:^2.6.1":
+ version: 2.7.4
+ resolution: "ejs@npm:2.7.4"
+ checksum: a1d2bfc7d1f0b39e99ae19b20c9469a25aeddba1ffc225db098110b18d566f73772fcdcc740b108cfda7452276f67d7b64eb359f90285414c942f4ae70713371
+ languageName: node
+ linkType: hard
+
+"electron-to-chromium@npm:^1.3.564":
+ version: 1.4.736
+ resolution: "electron-to-chromium@npm:1.4.736"
+ checksum: dcba6d43ffbc40e5d3decb3a0de67b9721a257fefde4eceac0d75202029c62ace7b377d217f49d1ba9cfbad61f89a14514e85a4de77b7205cee336f2e1f0baee
languageName: node
linkType: hard
languageName: node
linkType: hard
+"electron-to-chromium@npm:^1.4.668":
+ version: 1.4.729
+ resolution: "electron-to-chromium@npm:1.4.729"
+ checksum: fc7d28957d2aa72c57220e8b60e86f523d782a413440d2a8f38563844343b62e6caee9bf866019ba0839eb6e0c247297c6057d86152fa45855f32da88c44bd90
+ languageName: node
+ linkType: hard
+
"elliptic@npm:6.5.4, elliptic@npm:^6.5.3":
version: 6.5.4
resolution: "elliptic@npm:6.5.4"
languageName: node
linkType: hard
-"emoji-regex@npm:^7.0.1, emoji-regex@npm:^7.0.2":
+"elliptic@npm:^6.5.5":
+ version: 6.5.5
+ resolution: "elliptic@npm:6.5.5"
+ dependencies:
+ bn.js: ^4.11.9
+ brorand: ^1.1.0
+ hash.js: ^1.0.0
+ hmac-drbg: ^1.0.1
+ inherits: ^2.0.4
+ minimalistic-assert: ^1.0.1
+ minimalistic-crypto-utils: ^1.0.1
+ checksum: ec9105e4469eb3b32b0ee2579756c888ddf3f99d259aa0d65fccb906ee877768aaf8880caae73e3e669c9a4adeb3eb1945703aa974ec5000d2d33a239f4567eb
+ languageName: node
+ linkType: hard
+
+"emittery@npm:^0.7.1":
+ version: 0.7.2
+ resolution: "emittery@npm:0.7.2"
+ checksum: 908cd933d48a9bcb58ddf39e9a7d4ba1e049de392ccbef010102539a636e03cea2b28218331b7ede41de8165d9ed7f148851c5112ebd2e943117c0f61eff5f10
+ languageName: node
+ linkType: hard
+
+"emoji-regex@npm:^7.0.1":
version: 7.0.3
resolution: "emoji-regex@npm:7.0.3"
checksum: 9159b2228b1511f2870ac5920f394c7e041715429a68459ebe531601555f11ea782a8e1718f969df2711d38c66268174407cbca57ce36485544f695c2dfdc96e
languageName: node
linkType: hard
-"emojis-list@npm:^2.0.0":
- version: 2.1.0
- resolution: "emojis-list@npm:2.1.0"
- checksum: fb61fa6356dfcc9fbe6db8e334c29da365a34d3d82a915cb59621883d3023d804fd5edad5acd42b8eec016936e81d3b38e2faf921b32e073758374253afe1272
+"emoji-regex@npm:^9.2.2":
+ version: 9.2.2
+ resolution: "emoji-regex@npm:9.2.2"
+ checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601
languageName: node
linkType: hard
languageName: node
linkType: hard
-"enhanced-resolve@npm:^4.1.0":
+"enhanced-resolve@npm:^4.3.0":
version: 4.5.0
resolution: "enhanced-resolve@npm:4.5.0"
dependencies:
languageName: node
linkType: hard
-"enquirer@npm:^2.3.6":
+"enquirer@npm:^2.3.5, enquirer@npm:^2.3.6":
version: 2.4.1
resolution: "enquirer@npm:2.4.1"
dependencies:
languageName: node
linkType: hard
-"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1":
+"error-ex@npm:^1.3.1":
version: 1.3.2
resolution: "error-ex@npm:1.3.2"
dependencies:
languageName: node
linkType: hard
+"error-stack-parser@npm:^2.0.6":
+ version: 2.1.4
+ resolution: "error-stack-parser@npm:2.1.4"
+ dependencies:
+ stackframe: ^1.3.4
+ checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18
+ languageName: node
+ linkType: hard
+
"es-abstract@npm:^1.17.2, es-abstract@npm:^1.17.4, es-abstract@npm:^1.18.0, es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.18.2":
version: 1.18.3
resolution: "es-abstract@npm:1.18.3"
languageName: node
linkType: hard
+"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2":
+ version: 1.23.3
+ resolution: "es-abstract@npm:1.23.3"
+ dependencies:
+ array-buffer-byte-length: ^1.0.1
+ arraybuffer.prototype.slice: ^1.0.3
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.7
+ data-view-buffer: ^1.0.1
+ data-view-byte-length: ^1.0.1
+ data-view-byte-offset: ^1.0.0
+ es-define-property: ^1.0.0
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ es-set-tostringtag: ^2.0.3
+ es-to-primitive: ^1.2.1
+ function.prototype.name: ^1.1.6
+ get-intrinsic: ^1.2.4
+ get-symbol-description: ^1.0.2
+ globalthis: ^1.0.3
+ gopd: ^1.0.1
+ has-property-descriptors: ^1.0.2
+ has-proto: ^1.0.3
+ has-symbols: ^1.0.3
+ hasown: ^2.0.2
+ internal-slot: ^1.0.7
+ is-array-buffer: ^3.0.4
+ is-callable: ^1.2.7
+ is-data-view: ^1.0.1
+ is-negative-zero: ^2.0.3
+ is-regex: ^1.1.4
+ is-shared-array-buffer: ^1.0.3
+ is-string: ^1.0.7
+ is-typed-array: ^1.1.13
+ is-weakref: ^1.0.2
+ object-inspect: ^1.13.1
+ object-keys: ^1.1.1
+ object.assign: ^4.1.5
+ regexp.prototype.flags: ^1.5.2
+ safe-array-concat: ^1.1.2
+ safe-regex-test: ^1.0.3
+ string.prototype.trim: ^1.2.9
+ string.prototype.trimend: ^1.0.8
+ string.prototype.trimstart: ^1.0.8
+ typed-array-buffer: ^1.0.2
+ typed-array-byte-length: ^1.0.1
+ typed-array-byte-offset: ^1.0.2
+ typed-array-length: ^1.0.6
+ unbox-primitive: ^1.0.2
+ which-typed-array: ^1.1.15
+ checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae
+ languageName: node
+ linkType: hard
+
"es-array-method-boxes-properly@npm:^1.0.0":
version: 1.0.0
resolution: "es-array-method-boxes-properly@npm:1.0.0"
languageName: node
linkType: hard
+"es-define-property@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "es-define-property@npm:1.0.0"
+ dependencies:
+ get-intrinsic: ^1.2.4
+ checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6
+ languageName: node
+ linkType: hard
+
+"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-errors@npm:1.3.0"
+ checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5
+ languageName: node
+ linkType: hard
+
+"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17":
+ version: 1.0.18
+ resolution: "es-iterator-helpers@npm:1.0.18"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.0
+ es-errors: ^1.3.0
+ es-set-tostringtag: ^2.0.3
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ globalthis: ^1.0.3
+ has-property-descriptors: ^1.0.2
+ has-proto: ^1.0.3
+ has-symbols: ^1.0.3
+ internal-slot: ^1.0.7
+ iterator.prototype: ^1.1.2
+ safe-array-concat: ^1.1.2
+ checksum: 1594324ff3ca8890fe30c98b2419d3007d2b14b35f9773f188114408ff973e13c526f6045d88209e932f58dc0c55fc9a4ae1554636f8938ed7d926ffc27d3e1a
+ languageName: node
+ linkType: hard
+
+"es-object-atoms@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "es-object-atoms@npm:1.0.0"
+ dependencies:
+ es-errors: ^1.3.0
+ checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c
+ languageName: node
+ linkType: hard
+
+"es-set-tostringtag@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "es-set-tostringtag@npm:2.0.3"
+ dependencies:
+ get-intrinsic: ^1.2.4
+ has-tostringtag: ^1.0.2
+ hasown: ^2.0.1
+ checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129
+ languageName: node
+ linkType: hard
+
+"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "es-shim-unscopables@npm:1.0.2"
+ dependencies:
+ hasown: ^2.0.0
+ checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626
+ languageName: node
+ linkType: hard
+
"es-to-primitive@npm:^1.2.1":
version: 1.2.1
resolution: "es-to-primitive@npm:1.2.1"
languageName: node
linkType: hard
-"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50":
- version: 0.10.53
- resolution: "es5-ext@npm:0.10.53"
+"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50, es5-ext@npm:^0.10.62, es5-ext@npm:^0.10.64, es5-ext@npm:~0.10.14":
+ version: 0.10.64
+ resolution: "es5-ext@npm:0.10.64"
dependencies:
- es6-iterator: ~2.0.3
- es6-symbol: ~3.1.3
- next-tick: ~1.0.0
- checksum: 24ec22369260cf98605cb2f51eae9d7df5dc621bc5d3b311f6f5c3d0fcdb7bafae888270f3083ee6e9af27350a5ea49f1fe2dd6406a9017247ca40f091f529b2
+ es6-iterator: ^2.0.3
+ es6-symbol: ^3.1.3
+ esniff: ^2.0.1
+ next-tick: ^1.1.0
+ checksum: 01179fab0769fdbef213062222f99d0346724dbaccf04b87c0e6ee7f0c97edabf14be647ca1321f0497425ea7145de0fd278d1b3f3478864b8933e7136a5c645
languageName: node
linkType: hard
languageName: node
linkType: hard
-"es6-iterator@npm:2.0.3, es6-iterator@npm:~2.0.3":
+"es6-iterator@npm:2.0.3, es6-iterator@npm:^2.0.3":
version: 2.0.3
resolution: "es6-iterator@npm:2.0.3"
dependencies:
languageName: node
linkType: hard
-"es6-symbol@npm:^3.1.1, es6-symbol@npm:~3.1.3":
+"es6-symbol@npm:^3.1.1":
version: 3.1.3
resolution: "es6-symbol@npm:3.1.3"
dependencies:
languageName: node
linkType: hard
+"es6-symbol@npm:^3.1.3":
+ version: 3.1.4
+ resolution: "es6-symbol@npm:3.1.4"
+ dependencies:
+ d: ^1.0.2
+ ext: ^1.7.0
+ checksum: 52125ec4b5d1b6b93b8d3d42830bb19f8da21080ffcf45253b614bc6ff3e31349be202fb745d4d1af6778cdf5e38fea30e0c7e7dc37e2aecd44acc43502055f9
+ languageName: node
+ linkType: hard
+
+"escalade@npm:^3.0.2":
+ version: 3.1.2
+ resolution: "escalade@npm:3.1.2"
+ checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02
+ languageName: node
+ linkType: hard
+
"escalade@npm:^3.1.1":
version: 3.1.1
resolution: "escalade@npm:3.1.1"
languageName: node
linkType: hard
-"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5":
+"escape-string-regexp@npm:^1.0.5":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
languageName: node
linkType: hard
-"escodegen@npm:^1.11.0, escodegen@npm:^1.9.1":
+"escape-string-regexp@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "escape-string-regexp@npm:4.0.0"
+ checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
+ languageName: node
+ linkType: hard
+
+"escodegen@npm:^1.8.1":
version: 1.14.3
resolution: "escodegen@npm:1.14.3"
dependencies:
languageName: node
linkType: hard
-"eslint-config-react-app@npm:^5.2.1":
- version: 5.2.1
- resolution: "eslint-config-react-app@npm:5.2.1"
+"escodegen@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "escodegen@npm:2.1.0"
dependencies:
- confusing-browser-globals: ^1.0.9
- peerDependencies:
- "@typescript-eslint/eslint-plugin": 2.x
- "@typescript-eslint/parser": 2.x
- babel-eslint: 10.x
- eslint: 6.x
- eslint-plugin-flowtype: 3.x || 4.x
- eslint-plugin-import: 2.x
- eslint-plugin-jsx-a11y: 6.x
- eslint-plugin-react: 7.x
- eslint-plugin-react-hooks: 1.x || 2.x
- checksum: 8af6801f29d7314611e111a1593e91d412d41cde6719303ee6db7de65d78ed4b53e9197497765bb2deed65e6bfd73bf7e74da58cab3f66838c2927880b21eeba
+ esprima: ^4.0.1
+ estraverse: ^5.2.0
+ esutils: ^2.0.2
+ source-map: ~0.6.1
+ dependenciesMeta:
+ source-map:
+ optional: true
+ bin:
+ escodegen: bin/escodegen.js
+ esgenerate: bin/esgenerate.js
+ checksum: 096696407e161305cd05aebb95134ad176708bc5cb13d0dcc89a5fcbb959b8ed757e7f2591a5f8036f8f4952d4a724de0df14cd419e29212729fa6df5ce16bf6
languageName: node
linkType: hard
-"eslint-import-resolver-node@npm:^0.3.2":
- version: 0.3.4
- resolution: "eslint-import-resolver-node@npm:0.3.4"
+"eslint-config-react-app@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "eslint-config-react-app@npm:6.0.0"
dependencies:
- debug: ^2.6.9
- resolve: ^1.13.1
- checksum: a0db55ec26c5bb385c8681af6b8d6dee16768d5f27dff72c3113407d0f028f28e56dcb1cc3a4689c79396a5f6a9c24bd0cac9a2c9c588c7d7357d24a42bec876
+ confusing-browser-globals: ^1.0.10
+ peerDependencies:
+ "@typescript-eslint/eslint-plugin": ^4.0.0
+ "@typescript-eslint/parser": ^4.0.0
+ babel-eslint: ^10.0.0
+ eslint: ^7.5.0
+ eslint-plugin-flowtype: ^5.2.0
+ eslint-plugin-import: ^2.22.0
+ eslint-plugin-jest: ^24.0.0
+ eslint-plugin-jsx-a11y: ^6.3.1
+ eslint-plugin-react: ^7.20.3
+ eslint-plugin-react-hooks: ^4.0.8
+ eslint-plugin-testing-library: ^3.9.0
+ peerDependenciesMeta:
+ eslint-plugin-jest:
+ optional: true
+ eslint-plugin-testing-library:
+ optional: true
+ checksum: b265852455b1c10e9c5f0cebe199306fffc7f8e1b6548fcb0bccdc4415c288dfee8ab10717122a32275b91130dfb482dcbbc87d2fb79d8728d4c2bfa889f0915
languageName: node
linkType: hard
-"eslint-loader@npm:3.0.3":
- version: 3.0.3
- resolution: "eslint-loader@npm:3.0.3"
+"eslint-import-resolver-node@npm:^0.3.9":
+ version: 0.3.9
+ resolution: "eslint-import-resolver-node@npm:0.3.9"
dependencies:
- fs-extra: ^8.1.0
- loader-fs-cache: ^1.0.2
- loader-utils: ^1.2.3
- object-hash: ^2.0.1
- schema-utils: ^2.6.1
- peerDependencies:
- eslint: ^5.0.0 || ^6.0.0
- webpack: ^4.0.0 || ^5.0.0
- checksum: 5151ec134e26fb7caa20c4e7cf443e4400a48092008f8adebb7fef8ad4a6301d8f19a9f9c5aa78fec65b2d2594037edaef4ceae4769230cd7912566cd4ec7970
+ debug: ^3.2.7
+ is-core-module: ^2.13.0
+ resolve: ^1.22.4
+ checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22
languageName: node
linkType: hard
-"eslint-module-utils@npm:^2.4.1":
- version: 2.6.1
- resolution: "eslint-module-utils@npm:2.6.1"
+"eslint-module-utils@npm:^2.8.0":
+ version: 2.8.1
+ resolution: "eslint-module-utils@npm:2.8.1"
dependencies:
debug: ^3.2.7
- pkg-dir: ^2.0.0
- checksum: 3cc43a36a0075d300db6a3946203ec92249b6da1539694ef205a43b4ccfbc2eaf4961475d4b89c24b12c187d6bfd882c7c7d0b2ce02adb40c2dedb7fd022a7e2
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+ checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d
languageName: node
linkType: hard
-"eslint-plugin-flowtype@npm:4.6.0":
- version: 4.6.0
- resolution: "eslint-plugin-flowtype@npm:4.6.0"
+"eslint-plugin-flowtype@npm:^5.2.0":
+ version: 5.10.0
+ resolution: "eslint-plugin-flowtype@npm:5.10.0"
dependencies:
lodash: ^4.17.15
+ string-natural-compare: ^3.0.1
peerDependencies:
- eslint: ">=6.1.0"
- checksum: 2256be93a2b49b9440defea2823349b0d3c428437c1e8868fb02d7f21a5d7ab48e53d8afb05fea713da2c3ee8c0d3dbe6e8c9efc798a86aebdb0cffc0f9dfc7a
+ eslint: ^7.1.0
+ checksum: 791cd53c886bf819d52d6353cdfb4d49276dcd8a14f564a85d275d5017d81c7b1cc1921013ac9749f69c3f1bc4d23f36182137aab42bc059c2ae3f9773dd7740
languageName: node
linkType: hard
-"eslint-plugin-import@npm:2.20.1":
- version: 2.20.1
- resolution: "eslint-plugin-import@npm:2.20.1"
- dependencies:
- array-includes: ^3.0.3
- array.prototype.flat: ^1.2.1
- contains-path: ^0.1.0
- debug: ^2.6.9
- doctrine: 1.5.0
- eslint-import-resolver-node: ^0.3.2
- eslint-module-utils: ^2.4.1
- has: ^1.0.3
- minimatch: ^3.0.4
- object.values: ^1.1.0
- read-pkg-up: ^2.0.0
- resolve: ^1.12.0
+"eslint-plugin-import@npm:^2.22.1":
+ version: 2.29.1
+ resolution: "eslint-plugin-import@npm:2.29.1"
+ dependencies:
+ array-includes: ^3.1.7
+ array.prototype.findlastindex: ^1.2.3
+ array.prototype.flat: ^1.3.2
+ array.prototype.flatmap: ^1.3.2
+ debug: ^3.2.7
+ doctrine: ^2.1.0
+ eslint-import-resolver-node: ^0.3.9
+ eslint-module-utils: ^2.8.0
+ hasown: ^2.0.0
+ is-core-module: ^2.13.1
+ is-glob: ^4.0.3
+ minimatch: ^3.1.2
+ object.fromentries: ^2.0.7
+ object.groupby: ^1.0.1
+ object.values: ^1.1.7
+ semver: ^6.3.1
+ tsconfig-paths: ^3.15.0
peerDependencies:
- eslint: 2.x - 6.x
- checksum: 9c2f06fb5907afa12023df8b7b881ee345b11ba0930891966de5d009932bce4af7d1a8749037e15435d189796b26ba7190456d90a4ee7a8ce661e021a8b833d4
+ eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
+ checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c
languageName: node
linkType: hard
-"eslint-plugin-jsx-a11y@npm:6.2.3":
- version: 6.2.3
- resolution: "eslint-plugin-jsx-a11y@npm:6.2.3"
- dependencies:
- "@babel/runtime": ^7.4.5
- aria-query: ^3.0.0
- array-includes: ^3.0.3
- ast-types-flow: ^0.0.7
- axobject-query: ^2.0.2
- damerau-levenshtein: ^1.0.4
- emoji-regex: ^7.0.2
- has: ^1.0.3
- jsx-ast-utils: ^2.2.1
+"eslint-plugin-jest@npm:^24.1.0":
+ version: 24.7.0
+ resolution: "eslint-plugin-jest@npm:24.7.0"
+ dependencies:
+ "@typescript-eslint/experimental-utils": ^4.0.1
peerDependencies:
- eslint: ^3 || ^4 || ^5 || ^6
- checksum: 2e9f0ff28567e141479968a860f5670009a403250054970c714bf723e1f8c9ae7cddeb2bf13ee9f6882af333588645a06c10a417aa2733084813d162dec6c235
+ "@typescript-eslint/eslint-plugin": ">= 4"
+ eslint: ">=5"
+ peerDependenciesMeta:
+ "@typescript-eslint/eslint-plugin":
+ optional: true
+ checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08
languageName: node
linkType: hard
-"eslint-plugin-react-hooks@npm:^1.6.1":
- version: 1.7.0
- resolution: "eslint-plugin-react-hooks@npm:1.7.0"
+"eslint-plugin-jsx-a11y@npm:^6.3.1":
+ version: 6.8.0
+ resolution: "eslint-plugin-jsx-a11y@npm:6.8.0"
+ dependencies:
+ "@babel/runtime": ^7.23.2
+ aria-query: ^5.3.0
+ array-includes: ^3.1.7
+ array.prototype.flatmap: ^1.3.2
+ ast-types-flow: ^0.0.8
+ axe-core: =4.7.0
+ axobject-query: ^3.2.1
+ damerau-levenshtein: ^1.0.8
+ emoji-regex: ^9.2.2
+ es-iterator-helpers: ^1.0.15
+ hasown: ^2.0.0
+ jsx-ast-utils: ^3.3.5
+ language-tags: ^1.0.9
+ minimatch: ^3.1.2
+ object.entries: ^1.1.7
+ object.fromentries: ^2.0.7
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ checksum: 3dec00e2a3089c4c61ac062e4196a70985fb7eda1fd67fe035363d92578debde92fdb8ed2e472321fc0d71e75f4a1e8888c6a3218c14dd93c8e8d19eb6f51554
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react-hooks@npm:^4.2.0":
+ version: 4.6.0
+ resolution: "eslint-plugin-react-hooks@npm:4.6.0"
peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
- checksum: ea16d0cf4aaa0a30db05860bd892f3432a4cc299983a5adece092c021c4ee359e7e7277ff1e7207d1f550fae5f08a8b3aa2698f36e82cdebb756a8a3e1c842eb
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3
languageName: node
linkType: hard
-"eslint-plugin-react@npm:7.19.0":
- version: 7.19.0
- resolution: "eslint-plugin-react@npm:7.19.0"
+"eslint-plugin-react@npm:^7.21.5":
+ version: 7.34.1
+ resolution: "eslint-plugin-react@npm:7.34.1"
dependencies:
- array-includes: ^3.1.1
+ array-includes: ^3.1.7
+ array.prototype.findlast: ^1.2.4
+ array.prototype.flatmap: ^1.3.2
+ array.prototype.toreversed: ^1.1.2
+ array.prototype.tosorted: ^1.1.3
doctrine: ^2.1.0
- has: ^1.0.3
- jsx-ast-utils: ^2.2.3
- object.entries: ^1.1.1
- object.fromentries: ^2.0.2
- object.values: ^1.1.1
- prop-types: ^15.7.2
- resolve: ^1.15.1
- semver: ^6.3.0
- string.prototype.matchall: ^4.0.2
- xregexp: ^4.3.0
+ es-iterator-helpers: ^1.0.17
+ estraverse: ^5.3.0
+ jsx-ast-utils: ^2.4.1 || ^3.0.0
+ minimatch: ^3.1.2
+ object.entries: ^1.1.7
+ object.fromentries: ^2.0.7
+ object.hasown: ^1.1.3
+ object.values: ^1.1.7
+ prop-types: ^15.8.1
+ resolve: ^2.0.0-next.5
+ semver: ^6.3.1
+ string.prototype.matchall: ^4.0.10
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
+ checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-testing-library@npm:^3.9.2":
+ version: 3.10.2
+ resolution: "eslint-plugin-testing-library@npm:3.10.2"
+ dependencies:
+ "@typescript-eslint/experimental-utils": ^3.10.1
peerDependencies:
- eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
- checksum: c15bc7aa27670ceb1410e9c703072c13d8cd6117af92fcdffcc531bbaf4e4ae4266f52583779178a71c7f917860ac7cce4677e4dd428d3d1f9883fe3a819e81e
+ eslint: ^5 || ^6 || ^7
+ checksum: 3859d4a4816b130cfefc3b45bc7d303aff19b8d4e83a5e35ca3d634de9f3c4aa1b4340cb4f41e2d1bfe70b173562b9882c58ac48be4e07ddf6a1f88659e2604d
languageName: node
linkType: hard
languageName: node
linkType: hard
-"eslint-utils@npm:^1.4.3":
- version: 1.4.3
- resolution: "eslint-utils@npm:1.4.3"
+"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "eslint-utils@npm:2.1.0"
dependencies:
eslint-visitor-keys: ^1.1.0
- checksum: a20630e686034107138272f245c460f6d77705d1f4bb0628c1a1faf59fc800f441188916b3ec3b957394dc405aa200a3017dfa2b0fff0976e307a4e645a18d1e
+ checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d
languageName: node
linkType: hard
languageName: node
linkType: hard
-"eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0":
+"eslint-visitor-keys@npm:^1.0.0, eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0":
version: 1.3.0
resolution: "eslint-visitor-keys@npm:1.3.0"
checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a
languageName: node
linkType: hard
-"eslint@npm:^6.6.0":
- version: 6.8.0
- resolution: "eslint@npm:6.8.0"
+"eslint-webpack-plugin@npm:^2.1.0":
+ version: 2.7.0
+ resolution: "eslint-webpack-plugin@npm:2.7.0"
+ dependencies:
+ "@types/eslint": ^7.29.0
+ arrify: ^2.0.1
+ jest-worker: ^27.5.1
+ micromatch: ^4.0.5
+ normalize-path: ^3.0.0
+ schema-utils: ^3.1.1
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ webpack: ^4.0.0 || ^5.0.0
+ checksum: b6fd7cf4c49078b345a908b82b0bee06bc82ab0cec214ddd5fe5bb18b065765d52a07ad4077f6bba5830ba2f55f37d8f2208a52d11f34ee29df81153e3124d9c
+ languageName: node
+ linkType: hard
+
+"eslint@npm:^7.11.0":
+ version: 7.32.0
+ resolution: "eslint@npm:7.32.0"
dependencies:
- "@babel/code-frame": ^7.0.0
+ "@babel/code-frame": 7.12.11
+ "@eslint/eslintrc": ^0.4.3
+ "@humanwhocodes/config-array": ^0.5.0
ajv: ^6.10.0
- chalk: ^2.1.0
- cross-spawn: ^6.0.5
+ chalk: ^4.0.0
+ cross-spawn: ^7.0.2
debug: ^4.0.1
doctrine: ^3.0.0
- eslint-scope: ^5.0.0
- eslint-utils: ^1.4.3
- eslint-visitor-keys: ^1.1.0
- espree: ^6.1.2
- esquery: ^1.0.1
+ enquirer: ^2.3.5
+ escape-string-regexp: ^4.0.0
+ eslint-scope: ^5.1.1
+ eslint-utils: ^2.1.0
+ eslint-visitor-keys: ^2.0.0
+ espree: ^7.3.1
+ esquery: ^1.4.0
esutils: ^2.0.2
- file-entry-cache: ^5.0.1
+ fast-deep-equal: ^3.1.3
+ file-entry-cache: ^6.0.1
functional-red-black-tree: ^1.0.1
- glob-parent: ^5.0.0
- globals: ^12.1.0
+ glob-parent: ^5.1.2
+ globals: ^13.6.0
ignore: ^4.0.6
import-fresh: ^3.0.0
imurmurhash: ^0.1.4
- inquirer: ^7.0.0
is-glob: ^4.0.0
js-yaml: ^3.13.1
json-stable-stringify-without-jsonify: ^1.0.1
- levn: ^0.3.0
- lodash: ^4.17.14
+ levn: ^0.4.1
+ lodash.merge: ^4.6.2
minimatch: ^3.0.4
- mkdirp: ^0.5.1
natural-compare: ^1.4.0
- optionator: ^0.8.3
+ optionator: ^0.9.1
progress: ^2.0.0
- regexpp: ^2.0.1
- semver: ^6.1.2
- strip-ansi: ^5.2.0
- strip-json-comments: ^3.0.1
- table: ^5.2.3
+ regexpp: ^3.1.0
+ semver: ^7.2.1
+ strip-ansi: ^6.0.0
+ strip-json-comments: ^3.1.0
+ table: ^6.0.9
text-table: ^0.2.0
v8-compile-cache: ^2.0.3
bin:
- eslint: ./bin/eslint.js
- checksum: d4edbe69589ef194e7d3470a18632560c5399a5f685295bd59a11cddba4c6f7e03a137a15a21389f8f85712ebd82d0a628ee4e9cd4391113556029c486616e25
+ eslint: bin/eslint.js
+ checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37
languageName: node
linkType: hard
-"espree@npm:^6.1.2":
- version: 6.2.1
- resolution: "espree@npm:6.2.1"
+"esniff@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "esniff@npm:2.0.1"
dependencies:
- acorn: ^7.1.1
- acorn-jsx: ^5.2.0
- eslint-visitor-keys: ^1.1.0
- checksum: 99c508950b5b9f53d008d781d2abb7a4ef3496ea699306fb6eb737c7e513aa594644314364c50ec27abb220124c6851fff64a6b62c358479534369904849360b
+ d: ^1.0.1
+ es5-ext: ^0.10.62
+ event-emitter: ^0.3.5
+ type: ^2.7.2
+ checksum: d814c0e5c39bce9925b2e65b6d8767af72c9b54f35a65f9f3d6e8c606dce9aebe35a9599d30f15b0807743f88689f445163cfb577a425de4fb8c3c5bc16710cc
+ languageName: node
+ linkType: hard
+
+"espree@npm:^7.3.0, espree@npm:^7.3.1":
+ version: 7.3.1
+ resolution: "espree@npm:7.3.1"
+ dependencies:
+ acorn: ^7.4.0
+ acorn-jsx: ^5.3.1
+ eslint-visitor-keys: ^1.3.0
+ checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45
+ languageName: node
+ linkType: hard
+
+"esprima@npm:1.2.2":
+ version: 1.2.2
+ resolution: "esprima@npm:1.2.2"
+ bin:
+ esparse: ./bin/esparse.js
+ esvalidate: ./bin/esvalidate.js
+ checksum: 4f10006f0e315f2f7d8cf6630e465f183512f1ab2e862b11785a133ce37ed1696573deefb5256e510eaa4368342b13b393334477f6ccdcdb8f10e782b0f5e6dc
languageName: node
linkType: hard
languageName: node
linkType: hard
+"esquery@npm:^1.4.0":
+ version: 1.5.0
+ resolution: "esquery@npm:1.5.0"
+ dependencies:
+ estraverse: ^5.1.0
+ checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900
+ languageName: node
+ linkType: hard
+
"esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0":
version: 4.3.0
resolution: "esrecurse@npm:4.3.0"
languageName: node
linkType: hard
+"estraverse@npm:^5.3.0":
+ version: 5.3.0
+ resolution: "estraverse@npm:5.3.0"
+ checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b
+ languageName: node
+ linkType: hard
+
+"estree-walker@npm:^0.6.1":
+ version: 0.6.1
+ resolution: "estree-walker@npm:0.6.1"
+ checksum: 9d6f82a4921f11eec18f8089fb3cce6e53bcf45a8e545c42a2674d02d055fb30f25f90495f8be60803df6c39680c80dcee7f944526867eb7aa1fc9254883b23d
+ languageName: node
+ linkType: hard
+
+"estree-walker@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "estree-walker@npm:1.0.1"
+ checksum: 7e70da539691f6db03a08e7ce94f394ce2eef4180e136d251af299d41f92fb2d28ebcd9a6e393e3728d7970aeb5358705ddf7209d52fbcb2dd4693f95dcf925f
+ languageName: node
+ linkType: hard
+
"esutils@npm:^2.0.2":
version: 2.0.3
resolution: "esutils@npm:2.0.3"
languageName: node
linkType: hard
+"event-emitter@npm:^0.3.5":
+ version: 0.3.5
+ resolution: "event-emitter@npm:0.3.5"
+ dependencies:
+ d: 1
+ es5-ext: ~0.10.14
+ checksum: 27c1399557d9cd7e0aa0b366c37c38a4c17293e3a10258e8b692a847dd5ba9fb90429c3a5a1eeff96f31f6fa03ccbd31d8ad15e00540b22b22f01557be706030
+ languageName: node
+ linkType: hard
+
"eventemitter2@npm:6.4.7":
version: 6.4.7
resolution: "eventemitter2@npm:6.4.7"
languageName: node
linkType: hard
-"execa@npm:4.1.0":
+"execa@npm:4.1.0, execa@npm:^4.0.0":
version: 4.1.0
resolution: "execa@npm:4.1.0"
dependencies:
languageName: node
linkType: hard
-"expect@npm:^24.9.0":
- version: 24.9.0
- resolution: "expect@npm:24.9.0"
+"expect@npm:^26.6.0, expect@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "expect@npm:26.6.2"
dependencies:
- "@jest/types": ^24.9.0
- ansi-styles: ^3.2.0
- jest-get-type: ^24.9.0
- jest-matcher-utils: ^24.9.0
- jest-message-util: ^24.9.0
- jest-regex-util: ^24.9.0
- checksum: bfce2243543dd10e3c2047bbe6fc99b7b150cea71b198ddd8feb2e7ebfef1a3dd46ec7519e05d23a20b30c242b13dad97551368a690731d9a591f6f863528cee
+ "@jest/types": ^26.6.2
+ ansi-styles: ^4.0.0
+ jest-get-type: ^26.3.0
+ jest-matcher-utils: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-regex-util: ^26.0.0
+ checksum: 79a9b888c5c6d37d11f2cb76def6cf1dc8ff098d38662ee20c9f2ee0da67e9a93435f2327854b2e7554732153870621843e7f83e8cefb1250447ee2bc39883a4
languageName: node
linkType: hard
"express@npm:^4.17.1":
- version: 4.17.1
- resolution: "express@npm:4.17.1"
+ version: 4.19.2
+ resolution: "express@npm:4.19.2"
dependencies:
- accepts: ~1.3.7
+ accepts: ~1.3.8
array-flatten: 1.1.1
- body-parser: 1.19.0
- content-disposition: 0.5.3
+ body-parser: 1.20.2
+ content-disposition: 0.5.4
content-type: ~1.0.4
- cookie: 0.4.0
+ cookie: 0.6.0
cookie-signature: 1.0.6
debug: 2.6.9
- depd: ~1.1.2
+ depd: 2.0.0
encodeurl: ~1.0.2
escape-html: ~1.0.3
etag: ~1.8.1
- finalhandler: ~1.1.2
+ finalhandler: 1.2.0
fresh: 0.5.2
+ http-errors: 2.0.0
merge-descriptors: 1.0.1
methods: ~1.1.2
- on-finished: ~2.3.0
+ on-finished: 2.4.1
parseurl: ~1.3.3
path-to-regexp: 0.1.7
- proxy-addr: ~2.0.5
- qs: 6.7.0
+ proxy-addr: ~2.0.7
+ qs: 6.11.0
range-parser: ~1.2.1
- safe-buffer: 5.1.2
- send: 0.17.1
- serve-static: 1.14.1
- setprototypeof: 1.1.1
- statuses: ~1.5.0
+ safe-buffer: 5.2.1
+ send: 0.18.0
+ serve-static: 1.15.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
type-is: ~1.6.18
utils-merge: 1.0.1
vary: ~1.1.2
- checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5
+ checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5
languageName: node
linkType: hard
languageName: node
linkType: hard
+"ext@npm:^1.7.0":
+ version: 1.7.0
+ resolution: "ext@npm:1.7.0"
+ dependencies:
+ type: ^2.7.2
+ checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31
+ languageName: node
+ linkType: hard
+
"extend-shallow@npm:^2.0.1":
version: 2.0.1
resolution: "extend-shallow@npm:2.0.1"
languageName: node
linkType: hard
-"external-editor@npm:^3.0.3":
- version: 3.1.0
- resolution: "external-editor@npm:3.1.0"
- dependencies:
- chardet: ^0.7.0
- iconv-lite: ^0.4.24
- tmp: ^0.0.33
- checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7
- languageName: node
- linkType: hard
-
"extglob@npm:^2.0.4":
version: 2.0.4
resolution: "extglob@npm:2.0.4"
languageName: node
linkType: hard
-"fast-deep-equal@npm:^3.1.1":
+"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
version: 3.1.3
resolution: "fast-deep-equal@npm:3.1.3"
checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d
languageName: node
linkType: hard
-"fast-glob@npm:^2.0.2":
- version: 2.2.7
- resolution: "fast-glob@npm:2.2.7"
- dependencies:
- "@mrmlnc/readdir-enhanced": ^2.2.1
- "@nodelib/fs.stat": ^1.1.2
- glob-parent: ^3.1.0
- is-glob: ^4.0.0
- merge2: ^1.2.3
- micromatch: ^3.1.10
- checksum: 304ccff1d437fcc44ae0168b0c3899054b92e0fd6af6ad7c3ccc82ab4ddd210b99c7c739d60ee3686da2aa165cd1a31810b31fd91f7c2a575d297342a9fc0534
- languageName: node
- linkType: hard
-
-"fast-glob@npm:^3.2.9":
- version: 3.3.1
- resolution: "fast-glob@npm:3.3.1"
+"fast-glob@npm:^3.1.1, fast-glob@npm:^3.2.9":
+ version: 3.3.2
+ resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": ^2.0.2
"@nodelib/fs.walk": ^1.2.3
glob-parent: ^5.1.2
merge2: ^1.3.0
micromatch: ^4.0.4
- checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5
+ checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1
languageName: node
linkType: hard
-"fast-json-stable-stringify@npm:^2.0.0":
+"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
version: 2.1.0
resolution: "fast-json-stable-stringify@npm:2.1.0"
checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb
languageName: node
linkType: hard
-"fast-levenshtein@npm:~2.0.6":
+"fast-levenshtein@npm:^2.0.6, fast-levenshtein@npm:~2.0.6":
version: 2.0.6
resolution: "fast-levenshtein@npm:2.0.6"
checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c
linkType: hard
"fastq@npm:^1.6.0":
- version: 1.11.0
- resolution: "fastq@npm:1.11.0"
+ version: 1.17.1
+ resolution: "fastq@npm:1.17.1"
dependencies:
reusify: ^1.0.4
- checksum: 9db0ceea9280c5f207da40c562a4e574913c18933cd74b880b01bf8e81a9a6e368ec71e89c9c1b9f4066d0275cc22600efd6dde87f713217acbf67076481734b
+ checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88
languageName: node
linkType: hard
languageName: node
linkType: hard
-"figures@npm:^3.0.0, figures@npm:^3.2.0":
+"figures@npm:^3.2.0":
version: 3.2.0
resolution: "figures@npm:3.2.0"
dependencies:
languageName: node
linkType: hard
-"file-entry-cache@npm:^5.0.1":
- version: 5.0.1
- resolution: "file-entry-cache@npm:5.0.1"
+"file-entry-cache@npm:^6.0.1":
+ version: 6.0.1
+ resolution: "file-entry-cache@npm:6.0.1"
dependencies:
- flat-cache: ^2.0.1
- checksum: 9014b17766815d59b8b789633aed005242ef857348c09be558bd85b4a24e16b0ad1e0e5229ccea7a2109f74ef1b3db1a559b58afe12b884f09019308711376fd
+ flat-cache: ^3.0.4
+ checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74
languageName: node
linkType: hard
-"file-loader@npm:4.3.0":
- version: 4.3.0
- resolution: "file-loader@npm:4.3.0"
+"file-loader@npm:6.1.1":
+ version: 6.1.1
+ resolution: "file-loader@npm:6.1.1"
dependencies:
- loader-utils: ^1.2.3
- schema-utils: ^2.5.0
+ loader-utils: ^2.0.0
+ schema-utils: ^3.0.0
peerDependencies:
- webpack: ^4.0.0
- checksum: a005ac5599e96631e8ead32db874283ef821c121e93997b0d6f853db1284bcd7832e1ac59d39a21c201de22b6e33146996c28bd8c486893a5191c334a00f61b2
+ webpack: ^4.0.0 || ^5.0.0
+ checksum: 6369da5af456b640599d7ede7a3a9a55e485138a7829c583313d5165d0984c3d337de3aebee32fdfa3295facb4a44b74a9c3c956b1e0e30e8c96152106ff4b23
languageName: node
linkType: hard
languageName: node
linkType: hard
-"filesize@npm:6.0.1":
- version: 6.0.1
- resolution: "filesize@npm:6.0.1"
- checksum: 2e3f9b09a32086e068162a1caf4b6b438aba23389086bf77cf67c410698ed12baf01c928507777b8b2d3e1e2578f2e74f219608a0f7ea210a74e33082c0caab1
+"filesize@npm:6.1.0":
+ version: 6.1.0
+ resolution: "filesize@npm:6.1.0"
+ checksum: c46d644cb562fba7b7e837d5cd339394492abaa06722018b91a97d2a63b6c753ef30653de5c03bf178c631185bf55c3561c28fa9ccc4e9755f42d853c6ed4d09
languageName: node
linkType: hard
languageName: node
linkType: hard
-"finalhandler@npm:~1.1.2":
- version: 1.1.2
- resolution: "finalhandler@npm:1.1.2"
+"finalhandler@npm:1.2.0":
+ version: 1.2.0
+ resolution: "finalhandler@npm:1.2.0"
dependencies:
debug: 2.6.9
encodeurl: ~1.0.2
escape-html: ~1.0.3
- on-finished: ~2.3.0
+ on-finished: 2.4.1
parseurl: ~1.3.3
- statuses: ~1.5.0
+ statuses: 2.0.1
unpipe: ~1.0.0
- checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e
- languageName: node
- linkType: hard
-
-"find-cache-dir@npm:^0.1.1":
- version: 0.1.1
- resolution: "find-cache-dir@npm:0.1.1"
- dependencies:
- commondir: ^1.0.1
- mkdirp: ^0.5.1
- pkg-dir: ^1.0.0
- checksum: b5d9d68c1ff8c222124bb19089a405be9a3d0333e713ae989d980342c35690dfddd05f0fb456ec11846579e30e0f0e18293d20632662506cd2fa2c7237783479
+ checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716
languageName: node
linkType: hard
languageName: node
linkType: hard
-"find-up@npm:^1.0.0":
- version: 1.1.2
- resolution: "find-up@npm:1.1.2"
- dependencies:
- path-exists: ^2.0.0
- pinkie-promise: ^2.0.0
- checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a
- languageName: node
- linkType: hard
-
-"find-up@npm:^2.0.0, find-up@npm:^2.1.0":
- version: 2.1.0
- resolution: "find-up@npm:2.1.0"
- dependencies:
- locate-path: ^2.0.0
- checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd
- languageName: node
- linkType: hard
-
"find-up@npm:^3.0.0":
version: 3.0.0
resolution: "find-up@npm:3.0.0"
languageName: node
linkType: hard
-"flat-cache@npm:^2.0.1":
- version: 2.0.1
- resolution: "flat-cache@npm:2.0.1"
+"flat-cache@npm:^3.0.4":
+ version: 3.2.0
+ resolution: "flat-cache@npm:3.2.0"
dependencies:
- flatted: ^2.0.0
- rimraf: 2.6.3
- write: 1.0.3
- checksum: 0f5e66467658039e6fcaaccb363b28f43906ba72fab7ff2a4f6fcd5b4899679e13ca46d9fc6cc48b68ac925ae93137106d4aaeb79874c13f21f87a361705f1b1
+ flatted: ^3.2.9
+ keyv: ^4.5.3
+ rimraf: ^3.0.2
+ checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec
languageName: node
linkType: hard
-"flatted@npm:^2.0.0":
- version: 2.0.2
- resolution: "flatted@npm:2.0.2"
- checksum: 473c754db7a529e125a22057098f1a4c905ba17b8cc269c3acf77352f0ffa6304c851eb75f6a1845f74461f560e635129ca6b0b8a78fb253c65cea4de3d776f2
+"flatted@npm:^3.2.9":
+ version: 3.3.1
+ resolution: "flatted@npm:3.3.1"
+ checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94
languageName: node
linkType: hard
languageName: node
linkType: hard
-"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0":
- version: 1.15.3
- resolution: "follow-redirects@npm:1.15.3"
+"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.0":
+ version: 1.15.6
+ resolution: "follow-redirects@npm:1.15.6"
peerDependenciesMeta:
debug:
optional: true
- checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231
+ checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5
languageName: node
linkType: hard
languageName: node
linkType: hard
-"for-in@npm:^0.1.3":
- version: 0.1.8
- resolution: "for-in@npm:0.1.8"
- checksum: f5bdad7811700ee6a0f96b33d72a1db966aea75a1f03c7245d147f8369305e709f53a55ee7ae8eaddcfa85c7c89bca78472be8f1bc605475ce5bb2c70f77f8da
- languageName: node
- linkType: hard
-
-"for-in@npm:^1.0.1, for-in@npm:^1.0.2":
+"for-in@npm:^1.0.2":
version: 1.0.2
resolution: "for-in@npm:1.0.2"
checksum: 09f4ae93ce785d253ac963d94c7f3432d89398bf25ac7a24ed034ca393bf74380bdeccc40e0f2d721a895e54211b07c8fad7132e8157827f6f7f059b70b4043d
languageName: node
linkType: hard
-"for-own@npm:^0.1.3":
- version: 0.1.5
- resolution: "for-own@npm:0.1.5"
- dependencies:
- for-in: ^1.0.1
- checksum: 07eb0a2e98eb55ce13b56dd11ef4fb5e619ba7380aaec388b9eec1946153d74fa734ce409e8434020557e9489a50c34bc004d55754f5863bf7d77b441d8dee8c
- languageName: node
- linkType: hard
-
"forever-agent@npm:~0.6.1":
version: 0.6.1
resolution: "forever-agent@npm:0.6.1"
languageName: node
linkType: hard
-"fork-ts-checker-webpack-plugin@npm:3.1.1":
- version: 3.1.1
- resolution: "fork-ts-checker-webpack-plugin@npm:3.1.1"
+"fork-ts-checker-webpack-plugin@npm:4.1.6":
+ version: 4.1.6
+ resolution: "fork-ts-checker-webpack-plugin@npm:4.1.6"
dependencies:
- babel-code-frame: ^6.22.0
+ "@babel/code-frame": ^7.5.5
chalk: ^2.4.1
- chokidar: ^3.3.0
micromatch: ^3.1.10
minimatch: ^3.0.4
semver: ^5.6.0
tapable: ^1.0.0
worker-rpc: ^0.1.0
- checksum: c7b278e569ec7d5a1c73808b80870dda87f6171dc33c7cf06090c441c54753e1a5886b8256269fd2e100cda980b3f12db02d02ae2008fc067c81e948a173f35f
+ checksum: 4cc4fa7919dd9a0d765514d064c86e3a6f9cea8e700996b3e775cfcc0280f606a2dd16203d9b7e294b64e900795b0d80eb41fc8c192857d3350e407f14ef3eed
+ languageName: node
+ linkType: hard
+
+"form-data@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "form-data@npm:3.0.1"
+ dependencies:
+ asynckit: ^0.4.0
+ combined-stream: ^1.0.8
+ mime-types: ^2.1.12
+ checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d
+ languageName: node
+ linkType: hard
+
+"form-data@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "form-data@npm:4.0.0"
+ dependencies:
+ asynckit: ^0.4.0
+ combined-stream: ^1.0.8
+ mime-types: ^2.1.12
+ checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c
languageName: node
linkType: hard
languageName: node
linkType: hard
-"fs-extra@npm:^4.0.2":
- version: 4.0.3
- resolution: "fs-extra@npm:4.0.3"
- dependencies:
- graceful-fs: ^4.1.2
- jsonfile: ^4.0.0
- universalify: ^0.1.0
- checksum: c5ae3c7043ad7187128e619c0371da01b58694c1ffa02c36fb3f5b459925d9c27c3cb1e095d9df0a34a85ca993d8b8ff6f6ecef868fd5ebb243548afa7fc0936
- languageName: node
- linkType: hard
-
"fs-extra@npm:^7.0.0":
version: 7.0.1
resolution: "fs-extra@npm:7.0.1"
languageName: node
linkType: hard
-"fs-extra@npm:^9.1.0":
+"fs-extra@npm:^9.0.1, fs-extra@npm:^9.1.0":
version: 9.1.0
resolution: "fs-extra@npm:9.1.0"
dependencies:
languageName: node
linkType: hard
-"fsevents@npm:2.1.2":
- version: 2.1.2
- resolution: "fsevents@npm:2.1.2"
- dependencies:
- node-gyp: latest
- checksum: 63fe1ba77b63d5da5dde6112c5f0eb161b9d18a61427a8a49d661eeed080189d99e8f9da11bb6b75ecd5129a69edc5757d60a4eb0bbada6de68d5156c382c5e1
- conditions: os=darwin
- languageName: node
- linkType: hard
-
"fsevents@npm:^1.2.7":
version: 1.2.13
resolution: "fsevents@npm:1.2.13"
languageName: node
linkType: hard
-"fsevents@npm:~2.3.2":
- version: 2.3.2
- resolution: "fsevents@npm:2.3.2"
+"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3":
+ version: 2.3.3
+ resolution: "fsevents@npm:2.3.3"
dependencies:
node-gyp: latest
- checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
+ checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317
conditions: os=darwin
languageName: node
linkType: hard
-"fsevents@patch:fsevents@2.1.2#~builtin<compat/fsevents>":
- version: 2.1.2
- resolution: "fsevents@patch:fsevents@npm%3A2.1.2#~builtin<compat/fsevents>::version=2.1.2&hash=18f3a7"
+"fsevents@npm:~2.3.2":
+ version: 2.3.2
+ resolution: "fsevents@npm:2.3.2"
dependencies:
node-gyp: latest
+ checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
conditions: os=darwin
languageName: node
linkType: hard
languageName: node
linkType: hard
+"fsevents@patch:fsevents@^2.1.2#~builtin<compat/fsevents>, fsevents@patch:fsevents@^2.1.3#~builtin<compat/fsevents>":
+ version: 2.3.3
+ resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin<compat/fsevents>::version=2.3.3&hash=18f3a7"
+ dependencies:
+ node-gyp: latest
+ conditions: os=darwin
+ languageName: node
+ linkType: hard
+
"fsevents@patch:fsevents@~2.3.2#~builtin<compat/fsevents>":
version: 2.3.2
resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin<compat/fsevents>::version=2.3.2&hash=18f3a7"
languageName: node
linkType: hard
+"function-bind@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "function-bind@npm:1.1.2"
+ checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1
+ languageName: node
+ linkType: hard
+
"function.prototype.name@npm:^1.1.2, function.prototype.name@npm:^1.1.3":
version: 1.1.4
resolution: "function.prototype.name@npm:1.1.4"
languageName: node
linkType: hard
+"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6":
+ version: 1.1.6
+ resolution: "function.prototype.name@npm:1.1.6"
+ dependencies:
+ call-bind: ^1.0.2
+ define-properties: ^1.2.0
+ es-abstract: ^1.22.1
+ functions-have-names: ^1.2.3
+ checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479
+ languageName: node
+ linkType: hard
+
"functional-red-black-tree@npm:^1.0.1":
version: 1.0.1
resolution: "functional-red-black-tree@npm:1.0.1"
languageName: node
linkType: hard
-"gauge@npm:^3.0.0":
- version: 3.0.2
- resolution: "gauge@npm:3.0.2"
- dependencies:
- aproba: ^1.0.3 || ^2.0.0
- color-support: ^1.1.2
- console-control-strings: ^1.0.0
- has-unicode: ^2.0.1
- object-assign: ^4.1.1
- signal-exit: ^3.0.0
- string-width: ^4.2.3
- strip-ansi: ^6.0.1
- wide-align: ^1.1.2
- checksum: 81296c00c7410cdd48f997800155fbead4f32e4f82109be0719c63edc8560e6579946cc8abd04205297640691ec26d21b578837fd13a4e96288ab4b40b1dc3e9
+"functions-have-names@npm:^1.2.3":
+ version: 1.2.3
+ resolution: "functions-have-names@npm:1.2.3"
+ checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5
languageName: node
linkType: hard
languageName: node
linkType: hard
-"get-caller-file@npm:^1.0.1":
- version: 1.0.3
- resolution: "get-caller-file@npm:1.0.3"
- checksum: 2b90a7f848896abcebcdc0acc627a435bcf05b9cd280599bc980ebfcdc222416c3df12c24c4845f69adc4346728e8966f70b758f9369f3534182791dfbc25c05
- languageName: node
- linkType: hard
-
"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"
languageName: node
linkType: hard
-"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1":
+"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1":
version: 1.1.1
resolution: "get-intrinsic@npm:1.1.1"
dependencies:
languageName: node
linkType: hard
+"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4":
+ version: 1.2.4
+ resolution: "get-intrinsic@npm:1.2.4"
+ dependencies:
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ has-proto: ^1.0.1
+ has-symbols: ^1.0.3
+ hasown: ^2.0.0
+ checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951
+ languageName: node
+ linkType: hard
+
"get-own-enumerable-property-symbols@npm:^3.0.0":
version: 3.0.2
resolution: "get-own-enumerable-property-symbols@npm:3.0.2"
languageName: node
linkType: hard
+"get-package-type@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "get-package-type@npm:0.1.0"
+ checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148
+ languageName: node
+ linkType: hard
+
"get-stdin@npm:^4.0.1":
version: 4.0.1
resolution: "get-stdin@npm:4.0.1"
languageName: node
linkType: hard
+"get-symbol-description@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "get-symbol-description@npm:1.0.2"
+ dependencies:
+ call-bind: ^1.0.5
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.4
+ checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973
+ languageName: node
+ linkType: hard
+
"get-value@npm:^2.0.3, get-value@npm:^2.0.6":
version: 2.0.6
resolution: "get-value@npm:2.0.6"
languageName: node
linkType: hard
-"glob-parent@npm:^5.0.0, glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2":
+"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2":
version: 5.1.2
resolution: "glob-parent@npm:5.1.2"
dependencies:
languageName: node
linkType: hard
-"glob-to-regexp@npm:^0.3.0":
- version: 0.3.0
- resolution: "glob-to-regexp@npm:0.3.0"
- checksum: d34b3219d860042d508c4893b67617cd16e2668827e445ff39cff9f72ef70361d3dc24f429e003cdfb6607c75c9664b8eadc41d2eeb95690af0b0d3113c1b23b
- languageName: node
- linkType: hard
-
"glob@npm:^7.0.0, glob@npm:^7.0.3, glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:~7.1.1":
version: 7.1.7
resolution: "glob@npm:7.1.7"
languageName: node
linkType: hard
+"glob@npm:^7.1.6":
+ version: 7.2.3
+ resolution: "glob@npm:7.2.3"
+ dependencies:
+ fs.realpath: ^1.0.0
+ inflight: ^1.0.4
+ inherits: 2
+ minimatch: ^3.1.1
+ once: ^1.3.0
+ path-is-absolute: ^1.0.0
+ checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133
+ languageName: node
+ linkType: hard
+
"glob@npm:^8.0.1":
version: 8.1.0
resolution: "glob@npm:8.1.0"
languageName: node
linkType: hard
-"globals@npm:^12.1.0":
- version: 12.4.0
- resolution: "globals@npm:12.4.0"
+"globals@npm:^13.6.0, globals@npm:^13.9.0":
+ version: 13.24.0
+ resolution: "globals@npm:13.24.0"
dependencies:
- type-fest: ^0.8.1
- checksum: 7ae5ee16a96f1e8d71065405f57da0e33267f6b070cd36a5444c7780dd28639b48b92413698ac64f04bf31594f9108878bd8cb158ecdf759c39e05634fefcca6
+ type-fest: ^0.20.2
+ checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c
languageName: node
linkType: hard
-"globals@npm:^9.18.0":
- version: 9.18.0
- resolution: "globals@npm:9.18.0"
- checksum: e9c066aecfdc5ea6f727344a4246ecc243aaf66ede3bffee10ddc0c73351794c25e727dd046090dcecd821199a63b9de6af299a6e3ba292c8b22f0a80ea32073
+"globalthis@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "globalthis@npm:1.0.3"
+ dependencies:
+ define-properties: ^1.1.3
+ checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998
languageName: node
linkType: hard
-"globby@npm:8.0.2":
- version: 8.0.2
- resolution: "globby@npm:8.0.2"
+"globby@npm:11.0.1":
+ version: 11.0.1
+ resolution: "globby@npm:11.0.1"
dependencies:
- array-union: ^1.0.1
- dir-glob: 2.0.0
- fast-glob: ^2.0.2
- glob: ^7.1.2
- ignore: ^3.3.5
- pify: ^3.0.0
- slash: ^1.0.0
- checksum: 87dc31e0b812d3a6beee200555c252591d23ef12f8347bce3b61fa185a99fbe7ae1694ed30cc01a353e27369d6a8e1e50a97f1c5e2547fa7b1d87d8392ff9264
+ array-union: ^2.1.0
+ dir-glob: ^3.0.1
+ fast-glob: ^3.1.1
+ ignore: ^5.1.4
+ merge2: ^1.3.0
+ slash: ^3.0.0
+ checksum: b0b26e580666ef8caf0b0facd585c1da46eb971207ee9f8c7b690c1372d77602dd072f047f26c3ae1c293807fdf8fb6890d9291d37bc6d2602b1f07386f983e5
languageName: node
linkType: hard
languageName: node
linkType: hard
-"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2":
+"gopd@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "gopd@npm:1.0.1"
+ dependencies:
+ get-intrinsic: ^1.1.3
+ checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6
+ languageName: node
+ linkType: hard
+
+"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0":
version: 4.2.6
resolution: "graceful-fs@npm:4.2.6"
checksum: 792e64aafda05a151289f83eaa16aff34ef259658cefd65393883d959409f5a2389b0ec9ebf28f3d21f1b0ddc8f594a1162ae9b18e2b507a6799a70706ec573d
languageName: node
linkType: hard
+"graceful-fs@npm:^4.2.4":
+ version: 4.2.11
+ resolution: "graceful-fs@npm:4.2.11"
+ checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
+ languageName: node
+ linkType: hard
+
"graceful-fs@npm:^4.2.6":
version: 4.2.9
resolution: "graceful-fs@npm:4.2.9"
languageName: node
linkType: hard
-"has-ansi@npm:^2.0.0":
- version: 2.0.0
- resolution: "has-ansi@npm:2.0.0"
- dependencies:
- ansi-regex: ^2.0.0
- checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec
- languageName: node
- linkType: hard
-
"has-bigints@npm:^1.0.1":
version: 1.0.1
resolution: "has-bigints@npm:1.0.1"
languageName: node
linkType: hard
+"has-bigints@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-bigints@npm:1.0.2"
+ checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b
+ languageName: node
+ linkType: hard
+
"has-flag@npm:^3.0.0":
version: 3.0.0
resolution: "has-flag@npm:3.0.0"
languageName: node
linkType: hard
+"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-property-descriptors@npm:1.0.2"
+ dependencies:
+ es-define-property: ^1.0.0
+ checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3
+ languageName: node
+ linkType: hard
+
+"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "has-proto@npm:1.0.3"
+ checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4
+ languageName: node
+ linkType: hard
+
"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2":
version: 1.0.2
resolution: "has-symbols@npm:1.0.2"
languageName: node
linkType: hard
+"has-symbols@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "has-symbols@npm:1.0.3"
+ checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410
+ languageName: node
+ linkType: hard
+
+"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "has-tostringtag@npm:1.0.2"
+ dependencies:
+ has-symbols: ^1.0.3
+ checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d
+ languageName: node
+ linkType: hard
+
"has-unicode@npm:^2.0.1":
version: 2.0.1
resolution: "has-unicode@npm:2.0.1"
languageName: node
linkType: hard
+"hash-base@npm:~3.0":
+ version: 3.0.4
+ resolution: "hash-base@npm:3.0.4"
+ dependencies:
+ inherits: ^2.0.1
+ safe-buffer: ^5.0.1
+ checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764
+ languageName: node
+ linkType: hard
+
"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3":
version: 1.1.7
resolution: "hash.js@npm:1.1.7"
languageName: node
linkType: hard
+"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "hasown@npm:2.0.2"
+ dependencies:
+ function-bind: ^1.1.2
+ checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db
+ languageName: node
+ linkType: hard
+
"he@npm:^1.2.0":
version: 1.2.0
resolution: "he@npm:1.2.0"
languageName: node
linkType: hard
-"home-or-tmp@npm:^2.0.0":
- version: 2.0.0
- resolution: "home-or-tmp@npm:2.0.0"
- dependencies:
- os-homedir: ^1.0.0
- os-tmpdir: ^1.0.1
- checksum: b783c6ffd22f716d82f53e8c781cbe49bc9f4109a89ea86a27951e54c0bd335caf06bd828be2958cd9f4681986df1739558ae786abda6298cdd6d3edc2c362f1
+"hoopy@npm:^0.1.4":
+ version: 0.1.4
+ resolution: "hoopy@npm:0.1.4"
+ checksum: cfa60c7684c5e1ee4efe26e167bc54b73f839ffb59d1d44a5c4bf891e26b4f5bcc666555219a98fec95508fea4eda3a79540c53c05cc79afc1f66f9a238f4d9e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"html-encoding-sniffer@npm:^1.0.2":
- version: 1.0.2
- resolution: "html-encoding-sniffer@npm:1.0.2"
+"html-encoding-sniffer@npm:^2.0.1":
+ version: 2.0.1
+ resolution: "html-encoding-sniffer@npm:2.0.1"
dependencies:
- whatwg-encoding: ^1.0.1
- checksum: b874df6750451b7642fbe8e998c6bdd2911b0f42ad2927814b717bf1f4b082b0904b6178a1bfbc40117bf5799777993b0825e7713ca0fca49844e5aec03aa0e2
+ whatwg-encoding: ^1.0.5
+ checksum: bf30cce461015ed7e365736fcd6a3063c7bc016a91f74398ef6158886970a96333938f7c02417ab3c12aa82e3e53b40822145facccb9ddfbcdc15a879ae4d7ba
languageName: node
linkType: hard
-"html-entities@npm:^1.3.1":
+"html-entities@npm:^1.2.1, html-entities@npm:^1.3.1":
version: 1.4.0
resolution: "html-entities@npm:1.4.0"
checksum: 4b73ffb9eead200f99146e4fbe70acb0af2fea136901a131fc3a782e9ef876a7cbb07dec303ca1f8804232b812249dbf3643a270c9c524852065d9224a8dcdd0
languageName: node
linkType: hard
-"html-webpack-plugin@npm:4.0.0-beta.11":
- version: 4.0.0-beta.11
- resolution: "html-webpack-plugin@npm:4.0.0-beta.11"
+"html-webpack-plugin@npm:4.5.0":
+ version: 4.5.0
+ resolution: "html-webpack-plugin@npm:4.5.0"
dependencies:
+ "@types/html-minifier-terser": ^5.0.0
+ "@types/tapable": ^1.0.5
+ "@types/webpack": ^4.41.8
html-minifier-terser: ^5.0.1
loader-utils: ^1.2.3
lodash: ^4.17.15
tapable: ^1.1.3
util.promisify: 1.0.0
peerDependencies:
- webpack: ^4.0.0
- checksum: ea34c7a12d20f938c59e6b5f404aaddac4689ec622995b748ce13e0016e52a199ff25a837b905dd756bebcfb35465435d4c455ed36e16bae3d3dc5e0706d0030
+ webpack: ^4.0.0 || ^5.0.0
+ checksum: d197db16a160ab9136a544e297c3c75d34b769d3cee12a82b9e7af7ee38ff07f4a27f2235581a9624f03996cd24997613df807341799140b4427c12bc4f496f9
languageName: node
linkType: hard
languageName: node
linkType: hard
-"http-errors@npm:1.7.2":
- version: 1.7.2
- resolution: "http-errors@npm:1.7.2"
+"http-errors@npm:2.0.0":
+ version: 2.0.0
+ resolution: "http-errors@npm:2.0.0"
dependencies:
- depd: ~1.1.2
- inherits: 2.0.3
- setprototypeof: 1.1.1
- statuses: ">= 1.5.0 < 2"
- toidentifier: 1.0.0
- checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+ checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920
languageName: node
linkType: hard
languageName: node
linkType: hard
-"http-errors@npm:~1.7.2":
- version: 1.7.3
- resolution: "http-errors@npm:1.7.3"
- dependencies:
- depd: ~1.1.2
- inherits: 2.0.4
- setprototypeof: 1.1.1
- statuses: ">= 1.5.0 < 2"
- toidentifier: 1.0.0
- checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99
- languageName: node
- linkType: hard
-
"http-parser-js@npm:>=0.5.1":
version: 0.5.3
resolution: "http-parser-js@npm:0.5.3"
languageName: node
linkType: hard
-"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24":
+"iconv-lite@npm:0.4.24":
version: 0.4.24
resolution: "iconv-lite@npm:0.4.24"
dependencies:
languageName: node
linkType: hard
-"ignore@npm:^3.3.5":
- version: 3.3.10
- resolution: "ignore@npm:3.3.10"
- checksum: 23e8cc776e367b56615ab21b78decf973a35dfca5522b39d9b47643d8168473b0d1f18dd1321a1bab466a12ea11a2411903f3b21644f4d5461ee0711ec8678bd
- languageName: node
- linkType: hard
-
"ignore@npm:^4.0.6":
version: 4.0.6
resolution: "ignore@npm:4.0.6"
languageName: node
linkType: hard
-"ignore@npm:^5.2.0":
- version: 5.2.4
- resolution: "ignore@npm:5.2.4"
- checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef
+"ignore@npm:^5.1.4, ignore@npm:^5.1.8, ignore@npm:^5.2.0":
+ version: 5.3.1
+ resolution: "ignore@npm:5.3.1"
+ checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3
languageName: node
linkType: hard
languageName: node
linkType: hard
-"immer@npm:1.10.0":
- version: 1.10.0
- resolution: "immer@npm:1.10.0"
- checksum: 8bdce9ebd81861dcef21725bc0f9cc456c2051188b7c001bcd9b9dffb9519cd897ab207f475b5425b83767a4b1fba76b4665e3f3c41171e24ea938c3cd02d035
+"immer@npm:8.0.1":
+ version: 8.0.1
+ resolution: "immer@npm:8.0.1"
+ checksum: 63d875c04882b862481a0a692816e5982975a47a57619698bc1bb52963ad3b624911991708b2b81a7af6fdac15083d408e43932d83a6a61216e5a4503efd4095
languageName: node
linkType: hard
languageName: node
linkType: hard
-"import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0":
+"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1":
version: 3.3.0
resolution: "import-fresh@npm:3.3.0"
dependencies:
languageName: node
linkType: hard
+"import-local@npm:^3.0.2":
+ version: 3.1.0
+ resolution: "import-local@npm:3.1.0"
+ dependencies:
+ pkg-dir: ^4.2.0
+ resolve-cwd: ^3.0.0
+ bin:
+ import-local-fixture: fixtures/cli.js
+ checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd
+ languageName: node
+ linkType: hard
+
"imurmurhash@npm:^0.1.4":
version: 0.1.4
resolution: "imurmurhash@npm:0.1.4"
languageName: node
linkType: hard
-"indent-string@npm:^2.1.0":
- version: 2.1.0
- resolution: "indent-string@npm:2.1.0"
- dependencies:
- repeating: ^2.0.0
- checksum: 2fe7124311435f4d7a98f0a314d8259a4ec47ecb221110a58e2e2073e5f75c8d2b4f775f2ed199598fbe20638917e57423096539455ca8bff8eab113c9bee12c
- languageName: node
- linkType: hard
-
"indent-string@npm:^4.0.0":
version: 4.0.0
resolution: "indent-string@npm:4.0.0"
languageName: node
linkType: hard
-"inquirer@npm:7.0.4":
- version: 7.0.4
- resolution: "inquirer@npm:7.0.4"
- dependencies:
- ansi-escapes: ^4.2.1
- chalk: ^2.4.2
- cli-cursor: ^3.1.0
- cli-width: ^2.0.0
- external-editor: ^3.0.3
- figures: ^3.0.0
- lodash: ^4.17.15
- mute-stream: 0.0.8
- run-async: ^2.2.0
- rxjs: ^6.5.3
- string-width: ^4.1.0
- strip-ansi: ^5.1.0
- through: ^2.3.6
- checksum: 01a87cdbe74e7eb5ca770580f0d6bcad0269e6b0da97107aa9e2b37446a795aac63a63865d33410e964441499f9ac34a84c2e97c40d1abe2e57efc7f0d5b416d
- languageName: node
- linkType: hard
-
-"inquirer@npm:^7.0.0":
- version: 7.3.3
- resolution: "inquirer@npm:7.3.3"
- dependencies:
- 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
- checksum: 4d387fc1eb6126acbd58cbdb9ad99d2887d181df86ab0c2b9abdf734e751093e2d5882c2b6dc7144d9ab16b7ab30a78a1d7f01fb6a2850a44aeb175d1e3f8778
- languageName: node
- linkType: hard
-
"internal-ip@npm:^4.3.0":
version: 4.3.0
resolution: "internal-ip@npm:4.3.0"
languageName: node
linkType: hard
-"internal-slot@npm:^1.0.3":
- version: 1.0.3
- resolution: "internal-slot@npm:1.0.3"
+"internal-slot@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "internal-slot@npm:1.0.7"
dependencies:
- get-intrinsic: ^1.1.0
- has: ^1.0.3
+ es-errors: ^1.3.0
+ hasown: ^2.0.0
side-channel: ^1.0.4
- checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf
+ checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb
languageName: node
linkType: hard
-"invariant@npm:^2.0.0, invariant@npm:^2.1.0, invariant@npm:^2.2.2, invariant@npm:^2.2.4":
+"invariant@npm:^2.0.0, invariant@npm:^2.1.0, invariant@npm:^2.2.4":
version: 2.2.4
resolution: "invariant@npm:2.2.4"
dependencies:
languageName: node
linkType: hard
-"invert-kv@npm:^1.0.0":
- version: 1.0.0
- resolution: "invert-kv@npm:1.0.0"
- checksum: aebeee31dda3b3d25ffd242e9a050926e7fe5df642d60953ab183aca1a7d1ffb39922eb2618affb0e850cf2923116f0da1345367759d88d097df5da1f1e1590e
- languageName: node
- linkType: hard
-
"ip-regex@npm:^2.1.0":
version: 2.1.0
resolution: "ip-regex@npm:2.1.0"
linkType: hard
"ip@npm:^1.1.0, ip@npm:^1.1.5":
- version: 1.1.5
- resolution: "ip@npm:1.1.5"
- checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a
+ version: 1.1.9
+ resolution: "ip@npm:1.1.9"
+ checksum: b6d91fd45a856e3bd6d4f601ea0619d90f3517638f6918ebd079f959a8a6308568d8db5ef4fdf037e0d9cfdcf264f46833dfeea81ca31309cf0a7eb4b1307b84
languageName: node
linkType: hard
"ip@npm:^2.0.0":
- version: 2.0.0
- resolution: "ip@npm:2.0.0"
- checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349
+ version: 2.0.1
+ resolution: "ip@npm:2.0.1"
+ checksum: d765c9fd212b8a99023a4cde6a558a054c298d640fec1020567494d257afd78ca77e37126b1a3ef0e053646ced79a816bf50621d38d5e768cdde0431fa3b0d35
languageName: node
linkType: hard
languageName: node
linkType: hard
+"is-array-buffer@npm:^3.0.4":
+ version: 3.0.4
+ resolution: "is-array-buffer@npm:3.0.4"
+ dependencies:
+ call-bind: ^1.0.2
+ get-intrinsic: ^1.2.1
+ checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7
+ languageName: node
+ linkType: hard
+
"is-arrayish@npm:^0.2.1":
version: 0.2.1
resolution: "is-arrayish@npm:0.2.1"
languageName: node
linkType: hard
+"is-async-function@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "is-async-function@npm:2.0.0"
+ dependencies:
+ has-tostringtag: ^1.0.0
+ checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd
+ languageName: node
+ linkType: hard
+
"is-bigint@npm:^1.0.1":
version: 1.0.2
resolution: "is-bigint@npm:1.0.2"
languageName: node
linkType: hard
-"is-buffer@npm:^1.0.2, is-buffer@npm:^1.1.5":
+"is-buffer@npm:^1.1.5":
version: 1.1.6
resolution: "is-buffer@npm:1.1.6"
checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707
languageName: node
linkType: hard
+"is-callable@npm:^1.2.7":
+ version: 1.2.7
+ resolution: "is-callable@npm:1.2.7"
+ checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac
+ languageName: node
+ linkType: hard
+
"is-ci@npm:^2.0.0":
version: 2.0.0
resolution: "is-ci@npm:2.0.0"
languageName: node
linkType: hard
+"is-core-module@npm:^2.0.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1":
+ version: 2.13.1
+ resolution: "is-core-module@npm:2.13.1"
+ dependencies:
+ hasown: ^2.0.0
+ checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c
+ languageName: node
+ linkType: hard
+
"is-core-module@npm:^2.2.0":
version: 2.4.0
resolution: "is-core-module@npm:2.4.0"
languageName: node
linkType: hard
+"is-data-view@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "is-data-view@npm:1.0.1"
+ dependencies:
+ is-typed-array: ^1.1.13
+ checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5
+ languageName: node
+ linkType: hard
+
"is-date-object@npm:^1.0.1":
version: 1.0.4
resolution: "is-date-object@npm:1.0.4"
languageName: node
linkType: hard
+"is-date-object@npm:^1.0.5":
+ version: 1.0.5
+ resolution: "is-date-object@npm:1.0.5"
+ dependencies:
+ has-tostringtag: ^1.0.0
+ checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc
+ languageName: node
+ linkType: hard
+
"is-descriptor@npm:^0.1.0":
version: 0.1.6
resolution: "is-descriptor@npm:0.1.6"
languageName: node
linkType: hard
-"is-finite@npm:^1.0.0":
- version: 1.1.0
- resolution: "is-finite@npm:1.1.0"
- checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7
- languageName: node
- linkType: hard
-
-"is-fullwidth-code-point@npm:^1.0.0":
- version: 1.0.0
- resolution: "is-fullwidth-code-point@npm:1.0.0"
+"is-finalizationregistry@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "is-finalizationregistry@npm:1.0.2"
dependencies:
- number-is-nan: ^1.0.0
- checksum: 4d46a7465a66a8aebcc5340d3b63a56602133874af576a9ca42c6f0f4bd787a743605771c5f246db77da96605fefeffb65fc1dbe862dcc7328f4b4d03edf5a57
+ call-bind: ^1.0.2
+ checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d
languageName: node
linkType: hard
languageName: node
linkType: hard
+"is-generator-function@npm:^1.0.10":
+ version: 1.0.10
+ resolution: "is-generator-function@npm:1.0.10"
+ dependencies:
+ has-tostringtag: ^1.0.0
+ checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b
+ languageName: node
+ linkType: hard
+
"is-glob@npm:^3.1.0":
version: 3.1.0
resolution: "is-glob@npm:3.1.0"
languageName: node
linkType: hard
+"is-glob@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "is-glob@npm:4.0.3"
+ dependencies:
+ is-extglob: ^2.1.1
+ checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
+ languageName: node
+ linkType: hard
+
"is-image@npm:*, is-image@npm:3.0.0":
version: 3.0.0
resolution: "is-image@npm:3.0.0"
languageName: node
linkType: hard
+"is-map@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-map@npm:2.0.3"
+ checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc
+ languageName: node
+ linkType: hard
+
+"is-module@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "is-module@npm:1.0.0"
+ checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f
+ languageName: node
+ linkType: hard
+
"is-negative-zero@npm:^2.0.1":
version: 2.0.1
resolution: "is-negative-zero@npm:2.0.1"
languageName: node
linkType: hard
+"is-negative-zero@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-negative-zero@npm:2.0.3"
+ checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd
+ languageName: node
+ linkType: hard
+
"is-number-object@npm:^1.0.4":
version: 1.0.5
resolution: "is-number-object@npm:1.0.5"
languageName: node
linkType: hard
-"is-plain-object@npm:^2.0.1, is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4":
+"is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4":
version: 2.0.4
resolution: "is-plain-object@npm:2.0.4"
dependencies:
languageName: node
linkType: hard
+"is-potential-custom-element-name@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "is-potential-custom-element-name@npm:1.0.1"
+ checksum: ced7bbbb6433a5b684af581872afe0e1767e2d1146b2207ca0068a648fb5cab9d898495d1ac0583524faaf24ca98176a7d9876363097c2d14fee6dd324f3a1ab
+ languageName: node
+ linkType: hard
+
"is-promise@npm:^2.1.0":
version: 2.2.2
resolution: "is-promise@npm:2.2.2"
languageName: node
linkType: hard
+"is-regex@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "is-regex@npm:1.1.4"
+ dependencies:
+ call-bind: ^1.0.2
+ has-tostringtag: ^1.0.0
+ checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652
+ languageName: node
+ linkType: hard
+
"is-regexp@npm:^1.0.0":
version: 1.0.0
resolution: "is-regexp@npm:1.0.0"
languageName: node
linkType: hard
+"is-set@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-set@npm:2.0.3"
+ checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe
+ languageName: node
+ linkType: hard
+
+"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "is-shared-array-buffer@npm:1.0.3"
+ dependencies:
+ call-bind: ^1.0.7
+ checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8
+ languageName: node
+ linkType: hard
+
"is-stream@npm:^1.0.1, is-stream@npm:^1.1.0":
version: 1.1.0
resolution: "is-stream@npm:1.1.0"
languageName: node
linkType: hard
+"is-string@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "is-string@npm:1.0.7"
+ dependencies:
+ has-tostringtag: ^1.0.0
+ checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989
+ languageName: node
+ linkType: hard
+
"is-subset@npm:^0.1.1":
version: 0.1.1
resolution: "is-subset@npm:0.1.1"
languageName: node
linkType: hard
-"is-typedarray@npm:~1.0.0":
+"is-typed-array@npm:^1.1.13":
+ version: 1.1.13
+ resolution: "is-typed-array@npm:1.1.13"
+ dependencies:
+ which-typed-array: ^1.1.14
+ checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0
+ languageName: node
+ linkType: hard
+
+"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0":
version: 1.0.0
resolution: "is-typedarray@npm:1.0.0"
checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7
languageName: node
linkType: hard
-"is-utf8@npm:^0.2.0":
- version: 0.2.1
- resolution: "is-utf8@npm:0.2.1"
- checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3
+"is-weakmap@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "is-weakmap@npm:2.0.2"
+ checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d
+ languageName: node
+ linkType: hard
+
+"is-weakref@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "is-weakref@npm:1.0.2"
+ dependencies:
+ call-bind: ^1.0.2
+ checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de
+ languageName: node
+ linkType: hard
+
+"is-weakset@npm:^2.0.3":
+ version: 2.0.3
+ resolution: "is-weakset@npm:2.0.3"
+ dependencies:
+ call-bind: ^1.0.7
+ get-intrinsic: ^1.2.4
+ checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae
languageName: node
linkType: hard
languageName: node
linkType: hard
-"is-wsl@npm:^2.1.1":
+"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0":
version: 2.2.0
resolution: "is-wsl@npm:2.2.0"
dependencies:
languageName: node
linkType: hard
+"isarray@npm:^2.0.5":
+ version: 2.0.5
+ resolution: "isarray@npm:2.0.5"
+ checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a
+ languageName: node
+ linkType: hard
+
"isexe@npm:^2.0.0":
version: 2.0.0
resolution: "isexe@npm:2.0.0"
languageName: node
linkType: hard
-"istanbul-lib-coverage@npm:^2.0.2, istanbul-lib-coverage@npm:^2.0.5":
- version: 2.0.5
- resolution: "istanbul-lib-coverage@npm:2.0.5"
- checksum: c83bf39dc722d2a3e7c98b16643f2fef719fd59adf23441ad8a1e6422bb1f3367ac7d4c42ac45d0d87413476891947b6ffbdecf2184047436336aa0c28bbfc15
+"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0":
+ version: 3.2.2
+ resolution: "istanbul-lib-coverage@npm:3.2.2"
+ checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831
languageName: node
linkType: hard
-"istanbul-lib-instrument@npm:^3.0.1, istanbul-lib-instrument@npm:^3.3.0":
- version: 3.3.0
- resolution: "istanbul-lib-instrument@npm:3.3.0"
- dependencies:
- "@babel/generator": ^7.4.0
- "@babel/parser": ^7.4.3
- "@babel/template": ^7.4.0
- "@babel/traverse": ^7.4.3
- "@babel/types": ^7.4.0
- istanbul-lib-coverage: ^2.0.5
- semver: ^6.0.0
- checksum: 5ff86440c2f4afe83603f899721e43f9bbc0049ebf4e7fd696ea361d0c9ae5c831c656eec07c13f42ba934fc808c78f42a7884f1a08349802bc9bfa5af760571
+"istanbul-lib-instrument@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "istanbul-lib-instrument@npm:4.0.3"
+ dependencies:
+ "@babel/core": ^7.7.5
+ "@istanbuljs/schema": ^0.1.2
+ istanbul-lib-coverage: ^3.0.0
+ semver: ^6.3.0
+ checksum: fa1171d3022b1bb8f6a734042620ac5d9ee7dc80f3065a0bb12863e9f0494d0eefa3d86608fcc0254ab2765d29d7dad8bdc42e5f8df2f9a1fbe85ccc59d76cb9
languageName: node
linkType: hard
-"istanbul-lib-report@npm:^2.0.4":
- version: 2.0.8
- resolution: "istanbul-lib-report@npm:2.0.8"
+"istanbul-lib-instrument@npm:^5.0.4":
+ version: 5.2.1
+ resolution: "istanbul-lib-instrument@npm:5.2.1"
dependencies:
- istanbul-lib-coverage: ^2.0.5
- make-dir: ^2.1.0
- supports-color: ^6.1.0
- checksum: eef53d35ea750fd971bc7abf2cf1350615804e4dee5a7ee6e13cff45ff36b518970baaeef4bf019d46149581f9d10c3f3675083cf6625da6cc3d4d4b4c670374
+ "@babel/core": ^7.12.3
+ "@babel/parser": ^7.14.7
+ "@istanbuljs/schema": ^0.1.2
+ istanbul-lib-coverage: ^3.2.0
+ semver: ^6.3.0
+ checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272
languageName: node
linkType: hard
-"istanbul-lib-source-maps@npm:^3.0.1":
- version: 3.0.6
- resolution: "istanbul-lib-source-maps@npm:3.0.6"
+"istanbul-lib-report@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "istanbul-lib-report@npm:3.0.1"
+ dependencies:
+ istanbul-lib-coverage: ^3.0.0
+ make-dir: ^4.0.0
+ supports-color: ^7.1.0
+ checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21
+ languageName: node
+ linkType: hard
+
+"istanbul-lib-source-maps@npm:^4.0.0":
+ version: 4.0.1
+ resolution: "istanbul-lib-source-maps@npm:4.0.1"
dependencies:
debug: ^4.1.1
- istanbul-lib-coverage: ^2.0.5
- make-dir: ^2.1.0
- rimraf: ^2.6.3
+ istanbul-lib-coverage: ^3.0.0
source-map: ^0.6.1
- checksum: 1c6ebc81331ab4d831910db3e98da1ee4e3e96f64c2fb533e1b73516305f020b44765fa2937f24eee4adb11be22a1fa42c04786e0d697d4893987a1a5180a541
+ checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2
languageName: node
linkType: hard
-"istanbul-reports@npm:^2.2.6":
- version: 2.2.7
- resolution: "istanbul-reports@npm:2.2.7"
+"istanbul-reports@npm:^3.0.2":
+ version: 3.1.7
+ resolution: "istanbul-reports@npm:3.1.7"
dependencies:
html-escaper: ^2.0.0
- checksum: 138604c86fe4a386c4ba23c103aa64f3d867548cb1ac9961cafe912004bde601180d7ece918a76e2e0078b94e503b77aa696d6e6f68a0d8698abbf0923d78285
+ istanbul-lib-report: ^3.0.0
+ checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95
languageName: node
linkType: hard
-"jest-changed-files@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-changed-files@npm:24.9.0"
+"iterator.prototype@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "iterator.prototype@npm:1.1.2"
dependencies:
- "@jest/types": ^24.9.0
- execa: ^1.0.0
- throat: ^4.0.0
- checksum: f40e901e6ac2e6f47730b610c3dbef44a9235d556ba53b23926d45e6334c1c5989fd255140753d3270d5e63371ae69084e0867c11b8322030edab51e1ff1b8b7
+ define-properties: ^1.2.1
+ get-intrinsic: ^1.2.1
+ has-symbols: ^1.0.3
+ reflect.getprototypeof: ^1.0.4
+ set-function-name: ^2.0.1
+ checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168
languageName: node
linkType: hard
-"jest-cli@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-cli@npm:24.9.0"
+"jest-changed-files@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-changed-files@npm:26.6.2"
dependencies:
- "@jest/core": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- chalk: ^2.0.1
+ "@jest/types": ^26.6.2
+ execa: ^4.0.0
+ throat: ^5.0.0
+ checksum: 8c405f5ff905ee69ace9fd39355233206e3e233badf6a3f3b27e45bbf0a46d86943430be2e080d25b1e085f4231b9b3b27c94317aa04116efb40b592184066f4
+ languageName: node
+ linkType: hard
+
+"jest-circus@npm:26.6.0":
+ version: 26.6.0
+ resolution: "jest-circus@npm:26.6.0"
+ dependencies:
+ "@babel/traverse": ^7.1.0
+ "@jest/environment": ^26.6.0
+ "@jest/test-result": ^26.6.0
+ "@jest/types": ^26.6.0
+ "@types/babel__traverse": ^7.0.4
+ "@types/node": "*"
+ chalk: ^4.0.0
+ co: ^4.6.0
+ dedent: ^0.7.0
+ expect: ^26.6.0
+ is-generator-fn: ^2.0.0
+ jest-each: ^26.6.0
+ jest-matcher-utils: ^26.6.0
+ jest-message-util: ^26.6.0
+ jest-runner: ^26.6.0
+ jest-runtime: ^26.6.0
+ jest-snapshot: ^26.6.0
+ jest-util: ^26.6.0
+ pretty-format: ^26.6.0
+ stack-utils: ^2.0.2
+ throat: ^5.0.0
+ checksum: acc354223964bafd40fd1caae4099b58ccb1551bc93a394398b441274c225552f1941ce9903d126fb0adc3952a108e2994270c6a50a3e7e5af931b65b8c170f0
+ languageName: node
+ linkType: hard
+
+"jest-cli@npm:^26.6.0":
+ version: 26.6.3
+ resolution: "jest-cli@npm:26.6.3"
+ dependencies:
+ "@jest/core": ^26.6.3
+ "@jest/test-result": ^26.6.2
+ "@jest/types": ^26.6.2
+ chalk: ^4.0.0
exit: ^0.1.2
- import-local: ^2.0.0
+ graceful-fs: ^4.2.4
+ import-local: ^3.0.2
is-ci: ^2.0.0
- jest-config: ^24.9.0
- jest-util: ^24.9.0
- jest-validate: ^24.9.0
+ jest-config: ^26.6.3
+ jest-util: ^26.6.2
+ jest-validate: ^26.6.2
prompts: ^2.0.1
- realpath-native: ^1.1.0
- yargs: ^13.3.0
+ yargs: ^15.4.1
bin:
- jest: ./bin/jest.js
- checksum: 8fc975da02e6793352a3508fae1523c094ed44633dc5e651aa1f01e49b9d4be8353422fd5dc7f01e464f6aafee13b3210daf3d11ce466c8959071251bdb0dc09
+ jest: bin/jest.js
+ checksum: c8554147be756f09f5566974f0026485f78742e8642d2723f8fbee5746f50f44fb72b17aad181226655a8446d3ecc8ad8ed0a11a8a55686fa2b9c10d85700121
languageName: node
linkType: hard
-"jest-config@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-config@npm:24.9.0"
+"jest-config@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "jest-config@npm:26.6.3"
dependencies:
"@babel/core": ^7.1.0
- "@jest/test-sequencer": ^24.9.0
- "@jest/types": ^24.9.0
- babel-jest: ^24.9.0
- chalk: ^2.0.1
+ "@jest/test-sequencer": ^26.6.3
+ "@jest/types": ^26.6.2
+ babel-jest: ^26.6.3
+ chalk: ^4.0.0
+ deepmerge: ^4.2.2
glob: ^7.1.1
- jest-environment-jsdom: ^24.9.0
- jest-environment-node: ^24.9.0
- jest-get-type: ^24.9.0
- jest-jasmine2: ^24.9.0
- jest-regex-util: ^24.3.0
- jest-resolve: ^24.9.0
- jest-util: ^24.9.0
- jest-validate: ^24.9.0
- micromatch: ^3.1.10
- pretty-format: ^24.9.0
- realpath-native: ^1.1.0
- checksum: 87268fcab5322775601181f4ee17d51102ba153b1e0dc68a55075e44109b372f4925fe9c361cca6a72d5934f806b16f8331f0efad8b6b296a6f7bffcb7a34cb9
- languageName: node
- linkType: hard
-
-"jest-diff@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-diff@npm:24.9.0"
- dependencies:
- chalk: ^2.0.1
- diff-sequences: ^24.9.0
- jest-get-type: ^24.9.0
- pretty-format: ^24.9.0
- checksum: 462ccb128cb1b64eb285d28245d0c5bfc230cb063624bd117550d6dbc94332f606828a5de86938611d1e6a78489e576c496737ae139084f6049a56b768ad6402
+ graceful-fs: ^4.2.4
+ jest-environment-jsdom: ^26.6.2
+ jest-environment-node: ^26.6.2
+ jest-get-type: ^26.3.0
+ jest-jasmine2: ^26.6.3
+ jest-regex-util: ^26.0.0
+ jest-resolve: ^26.6.2
+ jest-util: ^26.6.2
+ jest-validate: ^26.6.2
+ micromatch: ^4.0.2
+ pretty-format: ^26.6.2
+ peerDependencies:
+ ts-node: ">=9.0.0"
+ peerDependenciesMeta:
+ ts-node:
+ optional: true
+ checksum: 303c798582d3c5d4b4e6ab8a4d91a83ded28e4ebbc0bcfc1ad271f9864437ef5409b7c7773010143811bc8176b0695c096717b91419c6484b56dcc032560a74b
languageName: node
linkType: hard
-"jest-diff@npm:^26.0.0":
+"jest-diff@npm:^26.0.0, jest-diff@npm:^26.6.2":
version: 26.6.2
resolution: "jest-diff@npm:26.6.2"
dependencies:
languageName: node
linkType: hard
-"jest-docblock@npm:^24.3.0":
- version: 24.9.0
- resolution: "jest-docblock@npm:24.9.0"
- dependencies:
- detect-newline: ^2.1.0
- checksum: 0b2321a4ac5b2b59f9183f805d4c50223635e53ce76080c406da3d499916972b70ce8809fda6d0616b2ce606dd201be36be6b4c8c62ae2c0e62f14cfa3bfcbdb
- languageName: node
- linkType: hard
-
-"jest-each@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-each@npm:24.9.0"
+"jest-docblock@npm:^26.0.0":
+ version: 26.0.0
+ resolution: "jest-docblock@npm:26.0.0"
dependencies:
- "@jest/types": ^24.9.0
- chalk: ^2.0.1
- jest-get-type: ^24.9.0
- jest-util: ^24.9.0
- pretty-format: ^24.9.0
- checksum: 93dc198e1dbea985816e3739b8a6e8622f1ee7b3f8b97d074aa8d512b4f81b8b70b30dcdcb5f735b3407bbd0fe5a9ac06e38cbf6499f7ab302daff2832c49683
+ detect-newline: ^3.0.0
+ checksum: e03ef104ee8c571335e6fa394b8fc8d2bd87eec9fe8b3d7d9aac056ada7de288f37ee8ac4922bb3a4222ac304db975d8832d5abc85486092866c534a16847cd5
languageName: node
linkType: hard
-"jest-environment-jsdom-fourteen@npm:1.0.1":
- version: 1.0.1
- resolution: "jest-environment-jsdom-fourteen@npm:1.0.1"
+"jest-each@npm:^26.6.0, jest-each@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-each@npm:26.6.2"
dependencies:
- "@jest/environment": ^24.3.0
- "@jest/fake-timers": ^24.3.0
- "@jest/types": ^24.3.0
- jest-mock: ^24.0.0
- jest-util: ^24.0.0
- jsdom: ^14.1.0
- checksum: 39b34962c44260b69a58bab74ba36c6746db70947e6a44695ea26776bda2a9d9fd66edd1f6c36e9f456e5e0993633339f0db86fc452e0f1dfcaa9336a0656a35
+ "@jest/types": ^26.6.2
+ chalk: ^4.0.0
+ jest-get-type: ^26.3.0
+ jest-util: ^26.6.2
+ pretty-format: ^26.6.2
+ checksum: 4e00ea4667e4fe015b894dc698cce0ae695cf458e021e5da62d4a5b052cd2c0a878da93f8c97cbdde60bcecf70982e8d3a7a5d63e1588f59531cc797a18c39ef
languageName: node
linkType: hard
-"jest-environment-jsdom@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-environment-jsdom@npm:24.9.0"
+"jest-environment-jsdom@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-environment-jsdom@npm:26.6.2"
dependencies:
- "@jest/environment": ^24.9.0
- "@jest/fake-timers": ^24.9.0
- "@jest/types": ^24.9.0
- jest-mock: ^24.9.0
- jest-util: ^24.9.0
- jsdom: ^11.5.1
- checksum: 093e7f25735e52a1ff01673f0e3921e3e8228d2e902762bf102f1c34cd206e9b73aa83dcd0598e101c6cf4c23e99e5c84df84084258268a696c3007d6990f701
+ "@jest/environment": ^26.6.2
+ "@jest/fake-timers": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ jest-mock: ^26.6.2
+ jest-util: ^26.6.2
+ jsdom: ^16.4.0
+ checksum: 8af9ffdf1b147362a19032bfe9ed51b709d43c74dc4b1c45e56d721808bf6cabdca8c226855b55a985ea196ce51cdb171bfe420ceec3daa2d13818d5c1915890
languageName: node
linkType: hard
-"jest-environment-node@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-environment-node@npm:24.9.0"
+"jest-environment-node@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-environment-node@npm:26.6.2"
dependencies:
- "@jest/environment": ^24.9.0
- "@jest/fake-timers": ^24.9.0
- "@jest/types": ^24.9.0
- jest-mock: ^24.9.0
- jest-util: ^24.9.0
- checksum: 61a446f7cbab96b1777f53bcbb45ecda139a2473c7a093a9420f0018824ec307b93f920f9e188b5f11b605d0ed14798396c97113aedb66c2801b29367a5dc8d2
- languageName: node
- linkType: hard
-
-"jest-get-type@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-get-type@npm:24.9.0"
- checksum: 821e6cd46434c917370cd362fbc4ce564c6e22780351f3ca468b230fbbc657ae19905ed5cdcc5e112d81a2c79cbd3fbcbe0dd44dc62860414b60ea223009958c
+ "@jest/environment": ^26.6.2
+ "@jest/fake-timers": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ jest-mock: ^26.6.2
+ jest-util: ^26.6.2
+ checksum: 0b69b481e6d6f2350ed241c2dabc70b0b1f3a00f9a410b7dad97c8ab38e88026acf7445ca663eb314f46ff50acee0133100b1006bf4ebda5298ffb02763a6861
languageName: node
linkType: hard
languageName: node
linkType: hard
-"jest-haste-map@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-haste-map@npm:24.9.0"
+"jest-haste-map@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-haste-map@npm:26.6.2"
dependencies:
- "@jest/types": ^24.9.0
- anymatch: ^2.0.0
+ "@jest/types": ^26.6.2
+ "@types/graceful-fs": ^4.1.2
+ "@types/node": "*"
+ anymatch: ^3.0.3
fb-watchman: ^2.0.0
- fsevents: ^1.2.7
- graceful-fs: ^4.1.15
- invariant: ^2.2.4
- jest-serializer: ^24.9.0
- jest-util: ^24.9.0
- jest-worker: ^24.9.0
- micromatch: ^3.1.10
+ fsevents: ^2.1.2
+ graceful-fs: ^4.2.4
+ jest-regex-util: ^26.0.0
+ jest-serializer: ^26.6.2
+ jest-util: ^26.6.2
+ jest-worker: ^26.6.2
+ micromatch: ^4.0.2
sane: ^4.0.3
walker: ^1.0.7
dependenciesMeta:
fsevents:
optional: true
- checksum: 3ec2d60863c315d52a32b2d1df3cc8bb5403f7d8bf159e556c878db09dedc4d1fb4e4d5f56cb67c92663b334d49ef8b768375b0d153adebf4d48a7b6959e71b3
+ checksum: 8ad5236d5646d2388d2bd58a57ea53698923434f43d59ea9ebdc58bce4d0b8544c8de2f7acaa9a6d73171f04460388b2b6d7d6b6c256aea4ebb8780140781596
languageName: node
linkType: hard
-"jest-jasmine2@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-jasmine2@npm:24.9.0"
+"jest-jasmine2@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "jest-jasmine2@npm:26.6.3"
dependencies:
"@babel/traverse": ^7.1.0
- "@jest/environment": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- chalk: ^2.0.1
+ "@jest/environment": ^26.6.2
+ "@jest/source-map": ^26.6.2
+ "@jest/test-result": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ chalk: ^4.0.0
co: ^4.6.0
- expect: ^24.9.0
+ expect: ^26.6.2
is-generator-fn: ^2.0.0
- jest-each: ^24.9.0
- jest-matcher-utils: ^24.9.0
- jest-message-util: ^24.9.0
- jest-runtime: ^24.9.0
- jest-snapshot: ^24.9.0
- jest-util: ^24.9.0
- pretty-format: ^24.9.0
- throat: ^4.0.0
- checksum: 0ce903a12f5c237565e033d6e97bbb22d3131f918d4f715f6908950d820424c780b2f7020b9771001cede4e0a76bd06592fff99924b84cafbc8353feb38667aa
+ jest-each: ^26.6.2
+ jest-matcher-utils: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-runtime: ^26.6.3
+ jest-snapshot: ^26.6.2
+ jest-util: ^26.6.2
+ pretty-format: ^26.6.2
+ throat: ^5.0.0
+ checksum: 41df0b993ae0cdeb2660fb3d8e88e2dcc83aec6b5c27d85eb233c2d507b546f8dce45fc54898ffbefa48ccc4633f225d0e023fd0979b8f7f2f1626074a69a9a3
languageName: node
linkType: hard
-"jest-leak-detector@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-leak-detector@npm:24.9.0"
+"jest-leak-detector@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-leak-detector@npm:26.6.2"
dependencies:
- jest-get-type: ^24.9.0
- pretty-format: ^24.9.0
- checksum: ab54f8ca8f9abf76db9f681b8add50a17767e7b15459710ece030bd034e1fad47c67da73562408779839138dc7423a08f387f5930efdd800eac67d5653badce8
+ jest-get-type: ^26.3.0
+ pretty-format: ^26.6.2
+ checksum: 364dd4d021347e26c66ba9c09da8a30477f14a3a8a208d2d7d64e4c396db81b85d8cb6b6834bcfc47a61b5938e274553957d11a7de2255f058c9d55d7f8fdfe7
languageName: node
linkType: hard
languageName: node
linkType: hard
-"jest-matcher-utils@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-matcher-utils@npm:24.9.0"
+"jest-matcher-utils@npm:^26.6.0, jest-matcher-utils@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-matcher-utils@npm:26.6.2"
dependencies:
- chalk: ^2.0.1
- jest-diff: ^24.9.0
- jest-get-type: ^24.9.0
- pretty-format: ^24.9.0
- checksum: e9dcd4c7a0bf52dccb4890de7ac2da3e857af067e71633b730fdc865dd271b8a2c3d68a2761d5ca6060ea4a455be42176f58462006468b8eb7c216921251e2ee
+ chalk: ^4.0.0
+ jest-diff: ^26.6.2
+ jest-get-type: ^26.3.0
+ pretty-format: ^26.6.2
+ checksum: 74d2165c1ac7fe98fe27cd2b5407499478e6b2fe99dd54e26d8ee5c9f5f913bdd7bdc07c7221b9b04df0c15e9be0e866ff3455b03e38cc66c480d9996d6d5405
languageName: node
linkType: hard
-"jest-message-util@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-message-util@npm:24.9.0"
+"jest-message-util@npm:^26.6.0, jest-message-util@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-message-util@npm:26.6.2"
dependencies:
"@babel/code-frame": ^7.0.0
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- "@types/stack-utils": ^1.0.1
- chalk: ^2.0.1
- micromatch: ^3.1.10
- slash: ^2.0.0
- stack-utils: ^1.0.1
- checksum: c173117b245090967db4853c28c3452ad2987a10caf28161abbfeb8d96be13f0d9e25422df10162bcc5e46860887e35ec4b4963f85392c4a625e4c37ad242f0b
+ "@jest/types": ^26.6.2
+ "@types/stack-utils": ^2.0.0
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.4
+ micromatch: ^4.0.2
+ pretty-format: ^26.6.2
+ slash: ^3.0.0
+ stack-utils: ^2.0.2
+ checksum: ffe5a715591c41240b9ed4092faf10f3eaf9ddfdf25d257a0c9f903aaa8d9eed5baa7e38016d2ec4f610fd29225e0f5231a91153e087a043e62824972c83d015
languageName: node
linkType: hard
-"jest-mock@npm:^24.0.0, jest-mock@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-mock@npm:24.9.0"
+"jest-mock@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-mock@npm:26.6.2"
dependencies:
- "@jest/types": ^24.9.0
- checksum: 823feac37b003543fe81e05d5d8a1ec69cdf9ae5b797582a3e90424ec476120ce42a11e6b1d8231958e01232d4e40e57207cf2c56197d63d309bdeaf63fcf804
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ checksum: 6c0fe028ff0cdc87b5d63b9ca749af04cae6c5577aaab234f602e546cae3f4b932adac9d77e6de2abb24955ee00978e1e5d5a861725654e2f9a42317d91fbc1f
languageName: node
linkType: hard
-"jest-pnp-resolver@npm:^1.2.1":
- version: 1.2.2
- resolution: "jest-pnp-resolver@npm:1.2.2"
+"jest-pnp-resolver@npm:^1.2.2":
+ version: 1.2.3
+ resolution: "jest-pnp-resolver@npm:1.2.3"
peerDependencies:
jest-resolve: "*"
peerDependenciesMeta:
jest-resolve:
optional: true
- checksum: bd85dcc0e76e0eb0c3d56382ec140f08d25ff4068cda9d0e360bb78fb176cb726d0beab82dc0e8694cafd09f55fee7622b8bcb240afa5fad301f4ed3eebb4f47
+ checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2
languageName: node
linkType: hard
-"jest-regex-util@npm:^24.3.0, jest-regex-util@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-regex-util@npm:24.9.0"
- checksum: 94299972501ae5dfc3932673b263fd15dba5e28698571687a28cc59b5a173edcbf52b992f4d5a6eded9da5b7e1468d263ef96a1564267832799b41c2986fc423
+"jest-regex-util@npm:^26.0.0":
+ version: 26.0.0
+ resolution: "jest-regex-util@npm:26.0.0"
+ checksum: 930a00665e8dfbedc29140678b4a54f021b41b895cf35050f76f557c1da3ac48ff42dd7b18ba2ccba6f4e518c6445d6753730d03ec7049901b93992db1ef0483
languageName: node
linkType: hard
-"jest-resolve-dependencies@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-resolve-dependencies@npm:24.9.0"
+"jest-resolve-dependencies@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "jest-resolve-dependencies@npm:26.6.3"
dependencies:
- "@jest/types": ^24.9.0
- jest-regex-util: ^24.3.0
- jest-snapshot: ^24.9.0
- checksum: 126627777e7382b7ecc5b342f5f7b0e247a99e35895ee59282e7066c611d58ff2bd6a7332628e44e221a52361b8ecd1d9de41ba20d240f9b621ee80b6aebf820
+ "@jest/types": ^26.6.2
+ jest-regex-util: ^26.0.0
+ jest-snapshot: ^26.6.2
+ checksum: 533ea1e271426006ff02c03c9802b108fcd68f2144615b6110ae59f3a0a2cc4a7abb3f44c3c65299c76b3a725d5d8220aaed9c58b79c8c8c508c18699a96e3f7
languageName: node
linkType: hard
-"jest-resolve@npm:24.9.0, jest-resolve@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-resolve@npm:24.9.0"
+"jest-resolve@npm:26.6.0":
+ version: 26.6.0
+ resolution: "jest-resolve@npm:26.6.0"
dependencies:
- "@jest/types": ^24.9.0
- browser-resolve: ^1.11.3
- chalk: ^2.0.1
- jest-pnp-resolver: ^1.2.1
- realpath-native: ^1.1.0
- checksum: 60a84cbd75d5cdab1ad29c8ed62e43fbc374c906e5a0f166fae5170f91c863ee9372aaab7dbdb3a06a38b0362131fa7c907c114be76a8bc1aeac47013ec308e4
+ "@jest/types": ^26.6.0
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.4
+ jest-pnp-resolver: ^1.2.2
+ jest-util: ^26.6.0
+ read-pkg-up: ^7.0.1
+ resolve: ^1.17.0
+ slash: ^3.0.0
+ checksum: c5d0277d4aa22f9f38693ba3e5d6176edf2e367af2f0c38e16c88e9b80b2292ee4d9df9b3675607f5d0c0b2652b4e3f69d8155f9fedd83ddd0ef937cfb6230c0
languageName: node
linkType: hard
-"jest-runner@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-runner@npm:24.9.0"
+"jest-resolve@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-resolve@npm:26.6.2"
dependencies:
- "@jest/console": ^24.7.1
- "@jest/environment": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- chalk: ^2.4.2
+ "@jest/types": ^26.6.2
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.4
+ jest-pnp-resolver: ^1.2.2
+ jest-util: ^26.6.2
+ read-pkg-up: ^7.0.1
+ resolve: ^1.18.1
+ slash: ^3.0.0
+ checksum: d6264d3f39b098753802a237c8c54f3109f5f3b3b7fa6f8d7aec7dca01b357ddf518ce1c33a68454357c15f48fb3c6026a92b9c4f5d72f07e24e80f04bcc8d58
+ languageName: node
+ linkType: hard
+
+"jest-runner@npm:^26.6.0, jest-runner@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "jest-runner@npm:26.6.3"
+ dependencies:
+ "@jest/console": ^26.6.2
+ "@jest/environment": ^26.6.2
+ "@jest/test-result": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ chalk: ^4.0.0
+ emittery: ^0.7.1
exit: ^0.1.2
- graceful-fs: ^4.1.15
- jest-config: ^24.9.0
- jest-docblock: ^24.3.0
- jest-haste-map: ^24.9.0
- jest-jasmine2: ^24.9.0
- jest-leak-detector: ^24.9.0
- jest-message-util: ^24.9.0
- jest-resolve: ^24.9.0
- jest-runtime: ^24.9.0
- jest-util: ^24.9.0
- jest-worker: ^24.6.0
+ graceful-fs: ^4.2.4
+ jest-config: ^26.6.3
+ jest-docblock: ^26.0.0
+ jest-haste-map: ^26.6.2
+ jest-leak-detector: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-resolve: ^26.6.2
+ jest-runtime: ^26.6.3
+ jest-util: ^26.6.2
+ jest-worker: ^26.6.2
source-map-support: ^0.5.6
- throat: ^4.0.0
- checksum: cb5c9fe598ca4ce8d13c2cf8b1649573e1bc73a50eb9438719b33970fed35ee75f731d64090d3392990f077ac1974119d094e311f503884eab42fa10081bd8a3
+ throat: ^5.0.0
+ checksum: ccd69918baa49a5efa45985cf60cfa1fbb1686b32d7a86296b7b55f89684e36d1f08e62598c4b7be7e81f2cf2e245d1a65146ea7bdcaedfa6ed176d3e645d7e2
languageName: node
linkType: hard
-"jest-runtime@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-runtime@npm:24.9.0"
- dependencies:
- "@jest/console": ^24.7.1
- "@jest/environment": ^24.9.0
- "@jest/source-map": ^24.3.0
- "@jest/transform": ^24.9.0
- "@jest/types": ^24.9.0
- "@types/yargs": ^13.0.0
- chalk: ^2.0.1
+"jest-runtime@npm:^26.6.0, jest-runtime@npm:^26.6.3":
+ version: 26.6.3
+ resolution: "jest-runtime@npm:26.6.3"
+ dependencies:
+ "@jest/console": ^26.6.2
+ "@jest/environment": ^26.6.2
+ "@jest/fake-timers": ^26.6.2
+ "@jest/globals": ^26.6.2
+ "@jest/source-map": ^26.6.2
+ "@jest/test-result": ^26.6.2
+ "@jest/transform": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/yargs": ^15.0.0
+ chalk: ^4.0.0
+ cjs-module-lexer: ^0.6.0
+ collect-v8-coverage: ^1.0.0
exit: ^0.1.2
glob: ^7.1.3
- graceful-fs: ^4.1.15
- jest-config: ^24.9.0
- jest-haste-map: ^24.9.0
- jest-message-util: ^24.9.0
- jest-mock: ^24.9.0
- jest-regex-util: ^24.3.0
- jest-resolve: ^24.9.0
- jest-snapshot: ^24.9.0
- jest-util: ^24.9.0
- jest-validate: ^24.9.0
- realpath-native: ^1.1.0
- slash: ^2.0.0
- strip-bom: ^3.0.0
- yargs: ^13.3.0
+ graceful-fs: ^4.2.4
+ jest-config: ^26.6.3
+ jest-haste-map: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-mock: ^26.6.2
+ jest-regex-util: ^26.0.0
+ jest-resolve: ^26.6.2
+ jest-snapshot: ^26.6.2
+ jest-util: ^26.6.2
+ jest-validate: ^26.6.2
+ slash: ^3.0.0
+ strip-bom: ^4.0.0
+ yargs: ^15.4.1
bin:
- jest-runtime: ./bin/jest-runtime.js
- checksum: 924afebac3f1aaf8d9d6dec1b949d1c082b59a26c1b8917a7c47bf9bd27ad05544d534748119616b7f4e99ff50f546f25ca8b3f9bf32a34504355b8059bd0d45
+ jest-runtime: bin/jest-runtime.js
+ checksum: 867922b49f9ab4cf2f5f1356ac3d9962c4477c7a2ff696cc841ea4c600ea389e7d6dfcbf945fec6849e606f81980addf31e4f34d63eaa3d3415f4901de2f605a
languageName: node
linkType: hard
-"jest-serializer@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-serializer@npm:24.9.0"
- checksum: 56d70bd50ebd71de7a38e1f94ef2fdf1293c3810ef6d372b69238263625d3df1e6749417872bc6be0515e39832f4c40df03c74d20d8f0f43efd14ea21e22178d
+"jest-serializer@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-serializer@npm:26.6.2"
+ dependencies:
+ "@types/node": "*"
+ graceful-fs: ^4.2.4
+ checksum: dbecfb0d01462fe486a0932cf1680cf6abb204c059db2a8f72c6c2a7c9842a82f6d256874112774cea700764ed8f38fc9e3db982456c138d87353e3390e746fe
languageName: node
linkType: hard
-"jest-snapshot@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-snapshot@npm:24.9.0"
+"jest-snapshot@npm:^26.6.0, jest-snapshot@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-snapshot@npm:26.6.2"
dependencies:
"@babel/types": ^7.0.0
- "@jest/types": ^24.9.0
- chalk: ^2.0.1
- expect: ^24.9.0
- jest-diff: ^24.9.0
- jest-get-type: ^24.9.0
- jest-matcher-utils: ^24.9.0
- jest-message-util: ^24.9.0
- jest-resolve: ^24.9.0
- mkdirp: ^0.5.1
+ "@jest/types": ^26.6.2
+ "@types/babel__traverse": ^7.0.4
+ "@types/prettier": ^2.0.0
+ chalk: ^4.0.0
+ expect: ^26.6.2
+ graceful-fs: ^4.2.4
+ jest-diff: ^26.6.2
+ jest-get-type: ^26.3.0
+ jest-haste-map: ^26.6.2
+ jest-matcher-utils: ^26.6.2
+ jest-message-util: ^26.6.2
+ jest-resolve: ^26.6.2
natural-compare: ^1.4.0
- pretty-format: ^24.9.0
- semver: ^6.2.0
- checksum: 474dc05ededdb8b39fb79801498fcd16c1a13a01b4701a27172be0ee3ebc5640e2bfb2780a9afa49bd825b19fc2be1e2ec5fc3d501afa76a5f7bc40f0120aaf3
+ pretty-format: ^26.6.2
+ semver: ^7.3.2
+ checksum: 53f1de055b1d3840bc6e851fd674d5991b844d4695dadbd07354c93bf191048d8767b8606999847e97c4214a485b9afb45c1d2411772befa1870414ac973b3e2
languageName: node
linkType: hard
-"jest-util@npm:^24.0.0, jest-util@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-util@npm:24.9.0"
+"jest-util@npm:^26.6.0, jest-util@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-util@npm:26.6.2"
dependencies:
- "@jest/console": ^24.9.0
- "@jest/fake-timers": ^24.9.0
- "@jest/source-map": ^24.9.0
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- callsites: ^3.0.0
- chalk: ^2.0.1
- graceful-fs: ^4.1.15
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ chalk: ^4.0.0
+ graceful-fs: ^4.2.4
is-ci: ^2.0.0
- mkdirp: ^0.5.1
- slash: ^2.0.0
- source-map: ^0.6.0
- checksum: ee84238bfb8c4aa60830b546e0e5dbdff53bbe55a1462f023182130ee7f1f3aac2dce0ab8395ab72b93e5a889fa12a55cebeeab04352a623d00d29c262dfbeb0
+ micromatch: ^4.0.2
+ checksum: 3c6a5fba05c4c6892cd3a9f66196ea8867087b77a5aa1a3f6cd349c785c3f1ca24abfd454664983aed1a165cab7846688e44fe8630652d666ba326b08625bc3d
languageName: node
linkType: hard
-"jest-validate@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-validate@npm:24.9.0"
+"jest-validate@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-validate@npm:26.6.2"
dependencies:
- "@jest/types": ^24.9.0
- camelcase: ^5.3.1
- chalk: ^2.0.1
- jest-get-type: ^24.9.0
+ "@jest/types": ^26.6.2
+ camelcase: ^6.0.0
+ chalk: ^4.0.0
+ jest-get-type: ^26.3.0
leven: ^3.1.0
- pretty-format: ^24.9.0
- checksum: 8e9abc2b605a10e9872bd7cc9cd676641b781b16f22028b7ed59cb3243e942065229e804bf5aa3c9e2d62a1444dd492193155bb7e02d9e6e330faa0afbb6dd9f
+ pretty-format: ^26.6.2
+ checksum: bac11d6586d9b8885328a4a66eec45b692e45ac23034a5c09eb0ee32de324f2d3d52b073e0c34e9c222b3642b083d1152a736cf24c52109e4957537d731ca62b
languageName: node
linkType: hard
-"jest-watch-typeahead@npm:0.4.2":
- version: 0.4.2
- resolution: "jest-watch-typeahead@npm:0.4.2"
+"jest-watch-typeahead@npm:0.6.1":
+ version: 0.6.1
+ resolution: "jest-watch-typeahead@npm:0.6.1"
dependencies:
- ansi-escapes: ^4.2.1
- chalk: ^2.4.1
- jest-regex-util: ^24.9.0
- jest-watcher: ^24.3.0
+ ansi-escapes: ^4.3.1
+ chalk: ^4.0.0
+ jest-regex-util: ^26.0.0
+ jest-watcher: ^26.3.0
slash: ^3.0.0
- string-length: ^3.1.0
- strip-ansi: ^5.0.0
- checksum: d65675b8a374307199852693feecf76c16e455910478eb1495d51ec5be66d08b6601e17274249ecce42454452bb202c7fea95262a3cfb5b16c8d50833e46f0db
+ string-length: ^4.0.1
+ strip-ansi: ^6.0.0
+ peerDependencies:
+ jest: ^26.0.0
+ checksum: a65dfd080e68b79ce7c861ec07791a0768820049a1d6a471d01f3fc41ee88723db29b434e19c917421e7f34ec567bcade368f3671e234c557288e206f7fd4257
languageName: node
linkType: hard
-"jest-watcher@npm:^24.3.0, jest-watcher@npm:^24.9.0":
- version: 24.9.0
- resolution: "jest-watcher@npm:24.9.0"
+"jest-watcher@npm:^26.3.0, jest-watcher@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-watcher@npm:26.6.2"
dependencies:
- "@jest/test-result": ^24.9.0
- "@jest/types": ^24.9.0
- "@types/yargs": ^13.0.0
- ansi-escapes: ^3.0.0
- chalk: ^2.0.1
- jest-util: ^24.9.0
- string-length: ^2.0.0
- checksum: c0ceec6e854ee73a196064e51471fe01ff743ca78df8f4ef1c78194a0fd4f43ece26d2c55d011e258ac7ae0f37eaecbe3cc100defb604124d90cd9473538a97b
+ "@jest/test-result": ^26.6.2
+ "@jest/types": ^26.6.2
+ "@types/node": "*"
+ ansi-escapes: ^4.2.1
+ chalk: ^4.0.0
+ jest-util: ^26.6.2
+ string-length: ^4.0.1
+ checksum: 401137f1a73bf23cdf390019ebffb3f6f89c53ca49d48252d1dd6daf17a68787fef75cc55a623de28b63d87d0e8f13d8972d7dd06740f2f64f7b2a0409d119d2
languageName: node
linkType: hard
-"jest-worker@npm:^24.6.0, jest-worker@npm:^24.9.0":
+"jest-worker@npm:^24.9.0":
version: 24.9.0
resolution: "jest-worker@npm:24.9.0"
dependencies:
languageName: node
linkType: hard
-"jest-worker@npm:^25.4.0":
- version: 25.5.0
- resolution: "jest-worker@npm:25.5.0"
+"jest-worker@npm:^26.5.0, jest-worker@npm:^26.6.2":
+ version: 26.6.2
+ resolution: "jest-worker@npm:26.6.2"
dependencies:
+ "@types/node": "*"
merge-stream: ^2.0.0
supports-color: ^7.0.0
- checksum: 773ad5c680f7c47c023e90a63faffe041dc297c19df90d31768598d700517ef31ad5e3289e68bdf85ab7eca91efde8134f8646472747f47ae3f60c96a37d1c4b
+ checksum: f9afa3b88e3f12027901e4964ba3ff048285b5783b5225cab28fac25b4058cea8ad54001e9a1577ee2bed125fac3ccf5c80dc507b120300cc1bbcb368796533e
languageName: node
linkType: hard
-"jest@npm:24.9.0":
- version: 24.9.0
- resolution: "jest@npm:24.9.0"
+"jest-worker@npm:^27.5.1":
+ version: 27.5.1
+ resolution: "jest-worker@npm:27.5.1"
dependencies:
- import-local: ^2.0.0
- jest-cli: ^24.9.0
+ "@types/node": "*"
+ merge-stream: ^2.0.0
+ supports-color: ^8.0.0
+ checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980
+ languageName: node
+ linkType: hard
+
+"jest@npm:26.6.0":
+ version: 26.6.0
+ resolution: "jest@npm:26.6.0"
+ dependencies:
+ "@jest/core": ^26.6.0
+ import-local: ^3.0.2
+ jest-cli: ^26.6.0
bin:
- jest: ./bin/jest.js
- checksum: 7bc61d47f94b18d52f354d785a9743883045222d0f1309a1131f0843479bdf8d98de1d62b9f519a562e99f883c51bd8af6a52f9e5a19596dae97d835abbc2cff
+ jest: bin/jest.js
+ checksum: e0d3efff0dc2a31c453a3f7d87586e5d6c0f008c9b827bb9204edde09288f922ddfb3a8917480bf68f4ac0298be28637daef98ebaaac65ea23d3cb754a6620c4
languageName: node
linkType: hard
-"js-base64@npm:^2.1.8, js-base64@npm:^2.4.9":
+"js-base64@npm:^2.4.9":
version: 2.6.4
resolution: "js-base64@npm:2.6.4"
checksum: 5f4084078d6c46f8529741d110df84b14fac3276b903760c21fa8cc8521370d607325dfe1c1a9fbbeaae1ff8e602665aaeef1362427d8fef704f9e3659472ce8
languageName: node
linkType: hard
-"js-tokens@npm:^3.0.2":
- version: 3.0.2
- resolution: "js-tokens@npm:3.0.2"
- checksum: ff24cf90e6e4ac446eba56e604781c1aaf3bdaf9b13a00596a0ebd972fa3b25dc83c0f0f67289c33252abb4111e0d14e952a5d9ffb61f5c22532d555ebd8d8a9
- languageName: node
- linkType: hard
-
"js-yaml@npm:3.13.1":
version: 3.13.1
resolution: "js-yaml@npm:3.13.1"
languageName: node
linkType: hard
-"jsdom@npm:^11.5.1":
- version: 11.12.0
- resolution: "jsdom@npm:11.12.0"
- dependencies:
- abab: ^2.0.0
- acorn: ^5.5.3
- acorn-globals: ^4.1.0
- array-equal: ^1.0.0
- cssom: ">= 0.3.2 < 0.4.0"
- cssstyle: ^1.0.0
- data-urls: ^1.0.0
- domexception: ^1.0.1
- escodegen: ^1.9.1
- html-encoding-sniffer: ^1.0.2
- left-pad: ^1.3.0
- nwsapi: ^2.0.7
- parse5: 4.0.0
- pn: ^1.1.0
- request: ^2.87.0
- request-promise-native: ^1.0.5
- sax: ^1.2.4
- symbol-tree: ^3.2.2
- tough-cookie: ^2.3.4
- w3c-hr-time: ^1.0.1
- webidl-conversions: ^4.0.2
- whatwg-encoding: ^1.0.3
- whatwg-mimetype: ^2.1.0
- whatwg-url: ^6.4.1
- ws: ^5.2.0
- xml-name-validator: ^3.0.0
- checksum: 1dab757e92ce857df648ebec3dbe487954f886652faf9d97953c3b502958b1e4487e147baef5494718294e8625ae238e68354db710456fa73c394fb93dbfc68b
- languageName: node
- linkType: hard
-
-"jsdom@npm:^14.1.0":
- version: 14.1.0
- resolution: "jsdom@npm:14.1.0"
- dependencies:
- abab: ^2.0.0
- acorn: ^6.0.4
- acorn-globals: ^4.3.0
- array-equal: ^1.0.0
- cssom: ^0.3.4
- cssstyle: ^1.1.1
- data-urls: ^1.1.0
- domexception: ^1.0.1
- escodegen: ^1.11.0
- html-encoding-sniffer: ^1.0.2
- nwsapi: ^2.1.3
- parse5: 5.1.0
- pn: ^1.1.0
- request: ^2.88.0
- request-promise-native: ^1.0.5
- saxes: ^3.1.9
- symbol-tree: ^3.2.2
- tough-cookie: ^2.5.0
- w3c-hr-time: ^1.0.1
- w3c-xmlserializer: ^1.1.2
- webidl-conversions: ^4.0.2
+"jsdom@npm:^16.4.0":
+ version: 16.7.0
+ resolution: "jsdom@npm:16.7.0"
+ dependencies:
+ abab: ^2.0.5
+ acorn: ^8.2.4
+ acorn-globals: ^6.0.0
+ cssom: ^0.4.4
+ cssstyle: ^2.3.0
+ data-urls: ^2.0.0
+ decimal.js: ^10.2.1
+ domexception: ^2.0.1
+ escodegen: ^2.0.0
+ form-data: ^3.0.0
+ html-encoding-sniffer: ^2.0.1
+ http-proxy-agent: ^4.0.1
+ https-proxy-agent: ^5.0.0
+ is-potential-custom-element-name: ^1.0.1
+ nwsapi: ^2.2.0
+ parse5: 6.0.1
+ saxes: ^5.0.1
+ symbol-tree: ^3.2.4
+ tough-cookie: ^4.0.0
+ w3c-hr-time: ^1.0.2
+ w3c-xmlserializer: ^2.0.0
+ webidl-conversions: ^6.1.0
whatwg-encoding: ^1.0.5
whatwg-mimetype: ^2.3.0
- whatwg-url: ^7.0.0
- ws: ^6.1.2
+ whatwg-url: ^8.5.0
+ ws: ^7.4.6
xml-name-validator: ^3.0.0
- checksum: c8ece2c4324be30536411a5ef9e52ebccefeb1605bd1ba31d14e40ab576a40a0e7d009bd89edd0e422654e4518383bb1f4ab6f574ccecaf98e5839c200fd7772
- languageName: node
- linkType: hard
-
-"jsesc@npm:^1.3.0":
- version: 1.3.0
- resolution: "jsesc@npm:1.3.0"
- bin:
- jsesc: bin/jsesc
- checksum: 9384cc72bf8ef7f2eb75fea64176b8b0c1c5e77604854c72cb4670b7072e112e3baaa69ef134be98cb078834a7812b0bfe676ad441ccd749a59427f5ed2127f1
+ peerDependencies:
+ canvas: ^2.5.0
+ peerDependenciesMeta:
+ canvas:
+ optional: true
+ checksum: 454b83371857000763ed31130a049acd1b113e3b927e6dcd75c67ddc30cdd242d7ebcac5c2294b7a1a6428155cb1398709c573b3c6d809218692ea68edd93370
languageName: node
linkType: hard
languageName: node
linkType: hard
+"json-buffer@npm:3.0.1":
+ version: 3.0.1
+ resolution: "json-buffer@npm:3.0.1"
+ checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581
+ languageName: node
+ linkType: hard
+
"json-parse-better-errors@npm:^1.0.1, json-parse-better-errors@npm:^1.0.2":
version: 1.0.2
resolution: "json-parse-better-errors@npm:1.0.2"
languageName: node
linkType: hard
+"json-schema-traverse@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "json-schema-traverse@npm:1.0.0"
+ checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad
+ languageName: node
+ linkType: hard
+
"json-schema@npm:0.4.0":
version: 0.4.0
resolution: "json-schema@npm:0.4.0"
languageName: node
linkType: hard
-"json-stable-stringify@npm:^1.0.1":
- version: 1.0.1
- resolution: "json-stable-stringify@npm:1.0.1"
- dependencies:
- jsonify: ~0.0.0
- checksum: 65d6cbf0fca72a4136999f65f4401cf39a129f7aeff0fdd987ac3d3423a2113659294045fb8377e6e20d865cac32b1b8d70f3d87346c9786adcee60661d96ca5
- languageName: node
- linkType: hard
-
"json-stringify-safe@npm:~5.0.1":
version: 5.0.1
resolution: "json-stringify-safe@npm:5.0.1"
languageName: node
linkType: hard
-"json5@npm:^0.5.1":
- version: 0.5.1
- resolution: "json5@npm:0.5.1"
- bin:
- json5: lib/cli.js
- checksum: 9b85bf06955b23eaa4b7328aa8892e3887e81ca731dd27af04a5f5f1458fbc5e1de57a24442e3272f8a888dd1abe1cb68eb693324035f6b3aeba4fcab7667d62
- languageName: node
- linkType: hard
-
-"json5@npm:^1.0.1":
+"json5@npm:^1.0.1, json5@npm:^1.0.2":
version: 1.0.2
resolution: "json5@npm:1.0.2"
dependencies:
languageName: node
linkType: hard
-"json5@npm:^2.1.2":
+"json5@npm:^2.1.2, json5@npm:^2.2.3":
version: 2.2.3
resolution: "json5@npm:2.2.3"
bin:
languageName: node
linkType: hard
-"jsonify@npm:~0.0.0":
- version: 0.0.0
- resolution: "jsonify@npm:0.0.0"
- checksum: d8d4ed476c116e6987a460dcb82f22284686caae9f498ac87b0502c1765ac1522f4f450a4cad4cc368d202fd3b27a3860735140a82867fc6d558f5f199c38bce
+"jsonpath@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "jsonpath@npm:1.1.1"
+ dependencies:
+ esprima: 1.2.2
+ static-eval: 2.0.2
+ underscore: 1.12.1
+ checksum: 5480d8e9e424fe2ed4ade6860b6e2cefddb21adb3a99abe0254cd9428e8ef9b0c9fb5729d6a5a514e90df50d645ccea9f3be48d627570e6222dd5dadc28eba7b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"jsx-ast-utils@npm:^2.2.1, jsx-ast-utils@npm:^2.2.3":
- version: 2.4.1
- resolution: "jsx-ast-utils@npm:2.4.1"
+"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5":
+ version: 3.3.5
+ resolution: "jsx-ast-utils@npm:3.3.5"
dependencies:
- array-includes: ^3.1.1
- object.assign: ^4.1.0
- checksum: 833477231266631e0def7ab5fa5da386790130ce5f9ab5db22fb3a8e67ee0adba9082ff27687e5c64c893af00beeb2285a7309cbc40c5edbcafdaf4e9de069a1
+ array-includes: ^3.1.6
+ array.prototype.flat: ^1.3.1
+ object.assign: ^4.1.4
+ object.values: ^1.1.6
+ checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a
languageName: node
linkType: hard
languageName: node
linkType: hard
+"keyv@npm:^4.5.3":
+ version: 4.5.4
+ resolution: "keyv@npm:4.5.4"
+ dependencies:
+ json-buffer: 3.0.1
+ checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72
+ languageName: node
+ linkType: hard
+
"killable@npm:^1.0.1":
version: 1.0.1
resolution: "killable@npm:1.0.1"
languageName: node
linkType: hard
-"kind-of@npm:^2.0.1":
- version: 2.0.1
- resolution: "kind-of@npm:2.0.1"
- dependencies:
- is-buffer: ^1.0.2
- checksum: 043df2943e113bca612d26224947395e9673bb3808d94aed30e47fbf0bafd618e2a29ff0ca2d5498f64332c320fff07f0aa9d6edfc20906a93c1b8792f11759c
- languageName: node
- linkType: hard
-
"kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0":
version: 3.2.2
resolution: "kind-of@npm:3.2.2"
languageName: node
linkType: hard
+"language-subtag-registry@npm:^0.3.20":
+ version: 0.3.22
+ resolution: "language-subtag-registry@npm:0.3.22"
+ checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a
+ languageName: node
+ linkType: hard
+
+"language-tags@npm:^1.0.9":
+ version: 1.0.9
+ resolution: "language-tags@npm:1.0.9"
+ dependencies:
+ language-subtag-registry: ^0.3.20
+ checksum: 57c530796dc7179914dee71bc94f3747fd694612480241d0453a063777265dfe3a951037f7acb48f456bf167d6eb419d4c00263745326b3ba1cdcf4657070e78
+ languageName: node
+ linkType: hard
+
"last-call-webpack-plugin@npm:^3.0.0":
version: 3.0.0
resolution: "last-call-webpack-plugin@npm:3.0.0"
languageName: node
linkType: hard
-"lazy-cache@npm:^0.2.3":
- version: 0.2.7
- resolution: "lazy-cache@npm:0.2.7"
- checksum: b4538aff20db586c354f31de3ed59ea2c8d5dc4f01141bf49f07601e7ca0d7ed43a3f49362ade49b1e18ab1f3d121df0f2c9ea9b599b44dd54fb0c0db253c8b9
- languageName: node
- linkType: hard
-
-"lazy-cache@npm:^1.0.3":
- version: 1.0.4
- resolution: "lazy-cache@npm:1.0.4"
- checksum: e6650c22e5de1cc3f4a0c25d2b35fe9cd400473c1b3562be9fceadf8f368d708b54d24f5aa51b321b090da65b36426823a8f706b8dbdd68270db0daba812c5d3
- languageName: node
- linkType: hard
-
-"lcid@npm:^1.0.0":
- version: 1.0.0
- resolution: "lcid@npm:1.0.0"
- dependencies:
- invert-kv: ^1.0.0
- checksum: e8c7a4db07663068c5c44b650938a2bc41aa992037eebb69376214320f202c1250e70b50c32f939e28345fd30c2d35b8e8cd9a19d5932c398246a864ce54843d
- languageName: node
- linkType: hard
-
-"left-pad@npm:^1.3.0":
- version: 1.3.0
- resolution: "left-pad@npm:1.3.0"
- checksum: 13fa96e17b70a54836490de22d4bab706e2ed508338bbabecfac72ecce445a74139c5b009a8112252cab8fc4ab7ac4ebd870e5b35bd236b443b12be96f8745ac
- languageName: node
- linkType: hard
-
"leven@npm:^3.1.0":
version: 3.1.0
resolution: "leven@npm:3.1.0"
languageName: node
linkType: hard
-"levenary@npm:^1.1.1":
- version: 1.1.1
- resolution: "levenary@npm:1.1.1"
+"levn@npm:^0.4.1":
+ version: 0.4.1
+ resolution: "levn@npm:0.4.1"
dependencies:
- leven: ^3.1.0
- checksum: d292b002e278c2b7e33fe0856920363a6abe61373c04c702bce3dfc324069a52b52ceb8c87d6b6032a074020425e56f2fd0c0a99f577511fabd1674a12df3282
+ prelude-ls: ^1.2.1
+ type-check: ~0.4.0
+ checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4
languageName: node
linkType: hard
-"levn@npm:^0.3.0, levn@npm:~0.3.0":
+"levn@npm:~0.3.0":
version: 0.3.0
resolution: "levn@npm:0.3.0"
dependencies:
languageName: node
linkType: hard
-"load-json-file@npm:^1.0.0":
- version: 1.1.0
- resolution: "load-json-file@npm:1.1.0"
- dependencies:
- graceful-fs: ^4.1.2
- parse-json: ^2.2.0
- pify: ^2.0.0
- pinkie-promise: ^2.0.0
- strip-bom: ^2.0.0
- checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b
- languageName: node
- linkType: hard
-
-"load-json-file@npm:^2.0.0":
- version: 2.0.0
- resolution: "load-json-file@npm:2.0.0"
- dependencies:
- graceful-fs: ^4.1.2
- parse-json: ^2.2.0
- pify: ^2.0.0
- strip-bom: ^3.0.0
- checksum: 7f212bbf08a8c9aab087ead07aa220d1f43d83ec1c4e475a00a8d9bf3014eb29ebe901db8554627dcfb70184c274d05b7379f1e9678fe8297ae74dc495212049
- languageName: node
- linkType: hard
-
-"load-json-file@npm:^4.0.0":
- version: 4.0.0
- resolution: "load-json-file@npm:4.0.0"
- dependencies:
- graceful-fs: ^4.1.2
- parse-json: ^4.0.0
- pify: ^3.0.0
- strip-bom: ^3.0.0
- checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356
- languageName: node
- linkType: hard
-
-"loader-fs-cache@npm:^1.0.2":
- version: 1.0.3
- resolution: "loader-fs-cache@npm:1.0.3"
- dependencies:
- find-cache-dir: ^0.1.1
- mkdirp: ^0.5.1
- checksum: 39781412e10bb0d6b5ca1afa9a4bd65e1827c5c51ef9ff746ae3fe8ce0e2cfa3fb96492d6619d8ab305407d20be82a9b244c439df0207f6ced4b98f2861bd372
- languageName: node
- linkType: hard
-
"loader-runner@npm:^2.4.0":
version: 2.4.0
resolution: "loader-runner@npm:2.4.0"
languageName: node
linkType: hard
-"loader-utils@npm:1.2.3":
- version: 1.2.3
- resolution: "loader-utils@npm:1.2.3"
+"loader-utils@npm:2.0.0":
+ version: 2.0.0
+ resolution: "loader-utils@npm:2.0.0"
dependencies:
big.js: ^5.2.2
- emojis-list: ^2.0.0
- json5: ^1.0.1
- checksum: 385407fc2683b6d664276fd41df962296de4a15030bb24389de77b175570c3b56bd896869376ba14cf8b33a9e257e17a91d395739ba7e23b5b68a8749a41df7e
+ emojis-list: ^3.0.0
+ json5: ^2.1.2
+ checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51
languageName: node
linkType: hard
languageName: node
linkType: hard
-"locate-path@npm:^2.0.0":
- version: 2.0.0
- resolution: "locate-path@npm:2.0.0"
- dependencies:
- p-locate: ^2.0.0
- path-exists: ^3.0.0
- checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755
- languageName: node
- linkType: hard
-
"locate-path@npm:^3.0.0":
version: 3.0.0
resolution: "locate-path@npm:3.0.0"
languageName: node
linkType: hard
+"lodash.merge@npm:^4.6.2":
+ version: 4.6.2
+ resolution: "lodash.merge@npm:4.6.2"
+ checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005
+ languageName: node
+ linkType: hard
+
"lodash.mergewith@npm:4.6.2":
version: 4.6.2
resolution: "lodash.mergewith@npm:4.6.2"
languageName: node
linkType: hard
-"lodash.sortby@npm:^4.7.0":
- version: 4.7.0
- resolution: "lodash.sortby@npm:4.7.0"
- checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c
- languageName: node
- linkType: hard
-
-"lodash.template@npm:4.5.0, lodash.template@npm:^4.4.0":
+"lodash.template@npm:4.5.0, lodash.template@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.template@npm:4.5.0"
dependencies:
languageName: node
linkType: hard
+"lodash.truncate@npm:^4.4.2":
+ version: 4.4.2
+ resolution: "lodash.truncate@npm:4.4.2"
+ checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5
+ languageName: node
+ linkType: hard
+
"lodash.uniq@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.uniq@npm:4.5.0"
languageName: node
linkType: hard
-"lodash@npm:>=3.5 <5, lodash@npm:^4.0.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.13, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.17.5, lodash@npm:^4.2.0, lodash@npm:^4.2.1, lodash@npm:~4.17.10":
+"lodash@npm:>=3.5 <5, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.5, lodash@npm:^4.2.0, lodash@npm:^4.2.1, lodash@npm:^4.7.0, lodash@npm:~4.17.10":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
languageName: node
linkType: hard
-"loud-rejection@npm:^1.0.0":
- version: 1.6.0
- resolution: "loud-rejection@npm:1.6.0"
- dependencies:
- currently-unhandled: ^0.4.1
- signal-exit: ^3.0.0
- checksum: 750e12defde34e8cbf263c2bff16f028a89b56e022ad6b368aa7c39495b5ac33f2349a8d00665a9b6d25c030b376396524d8a31eb0dde98aaa97956d7324f927
- languageName: node
- linkType: hard
-
"lower-case@npm:^2.0.2":
version: 2.0.2
resolution: "lower-case@npm:2.0.2"
languageName: node
linkType: hard
-"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0":
+"magic-string@npm:^0.25.0, magic-string@npm:^0.25.7":
+ version: 0.25.9
+ resolution: "magic-string@npm:0.25.9"
+ dependencies:
+ sourcemap-codec: ^1.4.8
+ checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a
+ languageName: node
+ linkType: hard
+
+"make-dir@npm:^2.0.0":
version: 2.1.0
resolution: "make-dir@npm:2.1.0"
dependencies:
languageName: node
linkType: hard
+"make-dir@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "make-dir@npm:4.0.0"
+ dependencies:
+ semver: ^7.5.3
+ checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a
+ languageName: node
+ linkType: hard
+
"make-fetch-happen@npm:^10.0.3":
version: 10.0.5
resolution: "make-fetch-happen@npm:10.0.5"
languageName: node
linkType: hard
-"mamacro@npm:^0.0.3":
- version: 0.0.3
- resolution: "mamacro@npm:0.0.3"
- checksum: ed3f970007248e377cd3a141866e2d6ba0ef09344b4ed1d80dcce6b5d6cdec6a50675894cc5249efdefeace60dd430afcf4af6cbd6bf975d79feb9c4b703fbc2
- languageName: node
- linkType: hard
-
"map-age-cleaner@npm:^0.1.1":
version: 0.1.3
resolution: "map-age-cleaner@npm:0.1.3"
languageName: node
linkType: hard
-"map-obj@npm:^1.0.0, map-obj@npm:^1.0.1":
+"map-obj@npm:^1.0.0":
version: 1.0.1
resolution: "map-obj@npm:1.0.1"
checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed
languageName: node
linkType: hard
-"meow@npm:^3.7.0":
- version: 3.7.0
- resolution: "meow@npm:3.7.0"
- dependencies:
- 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
- checksum: 65a412e5d0d643615508007a9292799bb3e4e690597d54c9e98eb0ca3adb7b8ca8899f41ea7cb7d8277129cdcd9a1a60202b31f88e0034e6aaae02894d80999a
- languageName: node
- linkType: hard
-
"meow@npm:^9.0.0":
version: 9.0.0
resolution: "meow@npm:9.0.0"
languageName: node
linkType: hard
-"merge-deep@npm:^3.0.2":
- version: 3.0.3
- resolution: "merge-deep@npm:3.0.3"
- dependencies:
- arr-union: ^3.1.0
- clone-deep: ^0.2.4
- kind-of: ^3.0.2
- checksum: d2eb367b8300327c66a3e1e01eb06251f51b440bf5bfa5f0f8065ae95bf3af620d21fcd0ab2eb50e74f5119aac40ffd26c85e3bf82f79082e8757675f5885d3d
- languageName: node
- linkType: hard
-
"merge-descriptors@npm:1.0.1":
version: 1.0.1
resolution: "merge-descriptors@npm:1.0.1"
languageName: node
linkType: hard
-"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1":
+"merge2@npm:^1.3.0, merge2@npm:^1.4.1":
version: 1.4.1
resolution: "merge2@npm:1.4.1"
checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
languageName: node
linkType: hard
-"micromatch@npm:^4.0.4":
+"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5":
version: 4.0.5
resolution: "micromatch@npm:4.0.5"
dependencies:
languageName: node
linkType: hard
+"mime-db@npm:1.52.0":
+ version: 1.52.0
+ resolution: "mime-db@npm:1.52.0"
+ checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f
+ languageName: node
+ linkType: hard
+
"mime-types@npm:^2.1.12, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24":
version: 2.1.31
resolution: "mime-types@npm:2.1.31"
languageName: node
linkType: hard
+"mime-types@npm:^2.1.27, mime-types@npm:~2.1.34":
+ version: 2.1.35
+ resolution: "mime-types@npm:2.1.35"
+ dependencies:
+ mime-db: 1.52.0
+ checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836
+ languageName: node
+ linkType: hard
+
"mime@npm:1.6.0":
version: 1.6.0
resolution: "mime@npm:1.6.0"
languageName: node
linkType: hard
-"mini-css-extract-plugin@npm:0.9.0":
- version: 0.9.0
- resolution: "mini-css-extract-plugin@npm:0.9.0"
+"mini-css-extract-plugin@npm:0.11.3":
+ version: 0.11.3
+ resolution: "mini-css-extract-plugin@npm:0.11.3"
dependencies:
loader-utils: ^1.1.0
normalize-url: 1.9.1
schema-utils: ^1.0.0
webpack-sources: ^1.1.0
peerDependencies:
- webpack: ^4.4.0
- checksum: e5cf437c15e4adf119d3a5af1bb604c880bc90a637aaf0535c8db68219efec42dcace1c54789422dec05d76ced98c44ef89ae44a3c556e34936fdbdd4743a210
+ webpack: ^4.4.0 || ^5.0.0
+ checksum: 14fbdf1338fe0264a2f7f87b3fc640809b7443f6434c6532bdbec1c5ab113502325fec958e9cf0667c3790087dc1e83c02e1f4d7463c10c956b0d6ebe56ea99e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"minimatch@npm:^3.0.4":
+"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
dependencies:
languageName: node
linkType: hard
-"minimist@npm:^1.1.1, minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.8":
+"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
languageName: node
linkType: hard
-"mixin-object@npm:^2.0.1":
- version: 2.0.1
- resolution: "mixin-object@npm:2.0.1"
- dependencies:
- for-in: ^0.1.3
- is-extendable: ^0.1.1
- checksum: 7d0eb7c2f06435fcc01d132824b4c973a0df689a117d8199d79911b506363b6f4f86a84458a63f3acfa7388f3052612cfe27105400b4932678452925a9739a4c
- languageName: node
- linkType: hard
-
"mkdirp@npm:>=0.5 0, mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.5, mkdirp@npm:~0.5.1":
version: 0.5.5
resolution: "mkdirp@npm:0.5.5"
languageName: node
linkType: hard
-"ms@npm:2.1.1":
- version: 2.1.1
- resolution: "ms@npm:2.1.1"
- checksum: 0078a23cd916a9a7435c413caa14c57d4b4f6e2470e0ab554b6964163c8a4436448ac7ae020e883685475da6b6796cc396b670f579cb275db288a21e3e57721e
- languageName: node
- linkType: hard
-
"ms@npm:2.1.2":
version: 2.1.2
resolution: "ms@npm:2.1.2"
languageName: node
linkType: hard
-"ms@npm:^2.0.0, ms@npm:^2.1.1":
+"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1":
version: 2.1.3
resolution: "ms@npm:2.1.3"
checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
languageName: node
linkType: hard
-"mute-stream@npm:0.0.8":
- version: 0.0.8
- resolution: "mute-stream@npm:0.0.8"
- checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1
- languageName: node
- linkType: hard
-
-"nan@npm:^2.12.1, nan@npm:^2.13.2":
+"nan@npm:^2.12.1":
version: 2.14.2
resolution: "nan@npm:2.14.2"
dependencies:
languageName: node
linkType: hard
-"nanoid@npm:^3.3.6":
+"nanoid@npm:^3.3.6, nanoid@npm:^3.3.7":
version: 3.3.7
resolution: "nanoid@npm:3.3.7"
bin:
languageName: node
linkType: hard
+"native-url@npm:^0.2.6":
+ version: 0.2.6
+ resolution: "native-url@npm:0.2.6"
+ dependencies:
+ querystring: ^0.2.0
+ checksum: d56a67b32e635c4944985f551a9976dfe609a3947810791c50f5c37cff1d9dd5fe040184989d104be8752582b79dc4e726f2a9c075d691ecce86b31ae9387f1b
+ languageName: node
+ linkType: hard
+
"natural-compare@npm:^1.4.0":
version: 1.4.0
resolution: "natural-compare@npm:1.4.0"
languageName: node
linkType: hard
-"negotiator@npm:^0.6.2, negotiator@npm:^0.6.3":
+"negotiator@npm:0.6.3, negotiator@npm:^0.6.2, negotiator@npm:^0.6.3":
version: 0.6.3
resolution: "negotiator@npm:0.6.3"
checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9
languageName: node
linkType: hard
-"next-tick@npm:~1.0.0":
- version: 1.0.0
- resolution: "next-tick@npm:1.0.0"
- checksum: 83fcb3d4f8d9380210b1c2b8a610463602d80283f0c0c8571c1688e1ad6cbf3a16b345f5bb7212617d4898bedcfa10dff327dc09ec20a112a5bf43a0271375fb
+"next-tick@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "next-tick@npm:1.1.0"
+ checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"node-notifier@npm:^5.4.2":
- version: 5.4.5
- resolution: "node-notifier@npm:5.4.5"
+"node-notifier@npm:^8.0.0":
+ version: 8.0.2
+ resolution: "node-notifier@npm:8.0.2"
dependencies:
growly: ^1.3.0
- is-wsl: ^1.1.0
- semver: ^5.5.0
+ is-wsl: ^2.2.0
+ semver: ^7.3.2
shellwords: ^0.1.1
- which: ^1.3.0
- checksum: 8de174eb055a2ec55c1b0beede9328e8f9d4e32e7eacb7e3e2fddff48534105d0e2e10b4947dd422cc0602c65141317499c6fb1dc3b8ba03c775fb159e360bef
+ uuid: ^8.3.0
+ which: ^2.0.2
+ checksum: 7db1683003f6aaa4324959dfa663cd56e301ccc0165977a9e7737989ffe3b4763297f9fc85f44d0662b63a4fd85516eda43411b492a4d2fae207afb23773f912
languageName: node
linkType: hard
-"node-releases@npm:^1.1.52":
- version: 1.1.73
- resolution: "node-releases@npm:1.1.73"
- checksum: 44a6caec3330538a669c156fa84833725ae92b317585b106e08ab292c14da09f30cb913c10f1a7402180a51b10074832d4e045b6c3512d74c37d86b41a69e63b
+"node-releases@npm:^1.1.61":
+ version: 1.1.77
+ resolution: "node-releases@npm:1.1.77"
+ checksum: eb2fcb45310e7d77f82bfdadeca546a698d258e011f15d88ad9a452a5e838a672ec532906581096ca19c66284a788330c3b09227ffc540e67228730f41b9c2e2
languageName: node
linkType: hard
languageName: node
linkType: hard
-"node-sass-chokidar@npm:^2.0.0":
- version: 2.0.0
- resolution: "node-sass-chokidar@npm:2.0.0"
- dependencies:
- async-foreach: ^0.1.3
- chokidar: ^3.4.0
- get-stdin: ^4.0.1
- glob: ^7.0.3
- meow: ^3.7.0
- node-sass: ^7.0.1
- sass-graph: ^2.2.4
- stdout-stream: ^1.4.0
- bin:
- node-sass-chokidar: bin/node-sass-chokidar
- checksum: 5aeffc93cddf5cc32d0e86de4999e56e3cdccb1d86b5ed211e2d661f4e579bac19c078ca791662e2aaff9752ba2e18ce87324c07de5b3222064a4c9703856d9c
- languageName: node
- linkType: hard
-
-"node-sass@npm:^7.0.1":
- version: 7.0.3
- resolution: "node-sass@npm:7.0.3"
- dependencies:
- async-foreach: ^0.1.3
- chalk: ^4.1.2
- cross-spawn: ^7.0.3
- gaze: ^1.0.0
- get-stdin: ^4.0.1
- glob: ^7.0.3
- lodash: ^4.17.15
- meow: ^9.0.0
- nan: ^2.13.2
- node-gyp: ^8.4.1
- npmlog: ^5.0.0
- request: ^2.88.0
- sass-graph: ^4.0.1
- stdout-stream: ^1.4.0
- true-case-path: ^1.0.2
- bin:
- node-sass: bin/node-sass
- checksum: 7d577d0fb68948959f367341e6cfc2858aa37abc5fadbd9e6b477ed0d192bebf7f8516d0b53c27be30ab05d5cd62d8a9bab08cc4442ef901b02cb51d864b4419
+"node-releases@npm:^2.0.14":
+ version: 2.0.14
+ resolution: "node-releases@npm:2.0.14"
+ checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41
languageName: node
linkType: hard
languageName: node
linkType: hard
-"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.5.0":
+"normalize-package-data@npm:^2.5.0":
version: 2.5.0
resolution: "normalize-package-data@npm:2.5.0"
dependencies:
languageName: node
linkType: hard
-"npmlog@npm:^5.0.0":
- version: 5.0.1
- resolution: "npmlog@npm:5.0.1"
- dependencies:
- are-we-there-yet: ^2.0.0
- console-control-strings: ^1.1.0
- gauge: ^3.0.0
- set-blocking: ^2.0.0
- checksum: 516b2663028761f062d13e8beb3f00069c5664925871a9b57989642ebe09f23ab02145bf3ab88da7866c4e112cafff72401f61a672c7c8a20edc585a7016ef5f
- languageName: node
- linkType: hard
-
"npmlog@npm:^6.0.0":
version: 6.0.1
resolution: "npmlog@npm:6.0.1"
languageName: node
linkType: hard
-"number-is-nan@npm:^1.0.0":
- version: 1.0.1
- resolution: "number-is-nan@npm:1.0.1"
- checksum: 13656bc9aa771b96cef209ffca31c31a03b507ca6862ba7c3f638a283560620d723d52e626d57892c7fff475f4c36ac07f0600f14544692ff595abff214b9ffb
- languageName: node
- linkType: hard
-
-"nwsapi@npm:^2.0.7, nwsapi@npm:^2.1.3":
- version: 2.2.0
- resolution: "nwsapi@npm:2.2.0"
- checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7
+"nwsapi@npm:^2.2.0":
+ version: 2.2.7
+ resolution: "nwsapi@npm:2.2.7"
+ checksum: cab25f7983acec7e23490fec3ef7be608041b460504229770e3bfcf9977c41d6fe58f518994d3bd9aa3a101f501089a3d4a63536f4ff8ae4b8c4ca23bdbfda4e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"object-hash@npm:^2.0.1":
- version: 2.2.0
- resolution: "object-hash@npm:2.2.0"
- checksum: 55ba841e3adce9c4f1b9b46b41983eda40f854e0d01af2802d3ae18a7085a17168d6b81731d43fdf1d6bcbb3c9f9c56d22c8fea992203ad90a38d7d919bc28f1
- languageName: node
- linkType: hard
-
"object-inspect@npm:^1.10.3, object-inspect@npm:^1.7.0, object-inspect@npm:^1.9.0":
version: 1.10.3
resolution: "object-inspect@npm:1.10.3"
languageName: node
linkType: hard
+"object-inspect@npm:^1.13.1":
+ version: 1.13.1
+ resolution: "object-inspect@npm:1.13.1"
+ checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f
+ languageName: node
+ linkType: hard
+
"object-is@npm:^1.0.1, object-is@npm:^1.0.2, object-is@npm:^1.1.2":
version: 1.1.5
resolution: "object-is@npm:1.1.5"
languageName: node
linkType: hard
+"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5":
+ version: 4.1.5
+ resolution: "object.assign@npm:4.1.5"
+ dependencies:
+ call-bind: ^1.0.5
+ define-properties: ^1.2.1
+ has-symbols: ^1.0.3
+ object-keys: ^1.1.1
+ checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25
+ languageName: node
+ linkType: hard
+
"object.entries@npm:^1.1.0, object.entries@npm:^1.1.1, object.entries@npm:^1.1.2":
version: 1.1.4
resolution: "object.entries@npm:1.1.4"
languageName: node
linkType: hard
-"object.fromentries@npm:^2.0.2, object.fromentries@npm:^2.0.3":
+"object.entries@npm:^1.1.7":
+ version: 1.1.8
+ resolution: "object.entries@npm:1.1.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907
+ languageName: node
+ linkType: hard
+
+"object.fromentries@npm:^2.0.3":
version: 2.0.4
resolution: "object.fromentries@npm:2.0.4"
dependencies:
languageName: node
linkType: hard
-"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0, object.getownpropertydescriptors@npm:^2.1.1":
+"object.fromentries@npm:^2.0.7":
+ version: 2.0.8
+ resolution: "object.fromentries@npm:2.0.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1
+ languageName: node
+ linkType: hard
+
+"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.0":
version: 2.1.2
resolution: "object.getownpropertydescriptors@npm:2.1.2"
dependencies:
languageName: node
linkType: hard
+"object.groupby@npm:^1.0.1":
+ version: 1.0.3
+ resolution: "object.groupby@npm:1.0.3"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982
+ languageName: node
+ linkType: hard
+
+"object.hasown@npm:^1.1.3":
+ version: 1.1.4
+ resolution: "object.hasown@npm:1.1.4"
+ dependencies:
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-object-atoms: ^1.0.0
+ checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6
+ languageName: node
+ linkType: hard
+
"object.pick@npm:^1.3.0":
version: 1.3.0
resolution: "object.pick@npm:1.3.0"
languageName: node
linkType: hard
+"object.values@npm:^1.1.6, object.values@npm:^1.1.7":
+ version: 1.2.0
+ resolution: "object.values@npm:1.2.0"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa
+ languageName: node
+ linkType: hard
+
"obuf@npm:^1.0.0, obuf@npm:^1.1.2":
version: 1.1.2
resolution: "obuf@npm:1.1.2"
languageName: node
linkType: hard
-"on-finished@npm:~2.3.0":
- version: 2.3.0
- resolution: "on-finished@npm:2.3.0"
+"on-finished@npm:2.4.1":
+ version: 2.4.1
+ resolution: "on-finished@npm:2.4.1"
dependencies:
ee-first: 1.1.1
- checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b
+ checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0
languageName: node
linkType: hard
languageName: node
linkType: hard
-"optimize-css-assets-webpack-plugin@npm:5.0.3":
- version: 5.0.3
- resolution: "optimize-css-assets-webpack-plugin@npm:5.0.3"
+"optimize-css-assets-webpack-plugin@npm:5.0.4":
+ version: 5.0.4
+ resolution: "optimize-css-assets-webpack-plugin@npm:5.0.4"
dependencies:
cssnano: ^4.1.10
last-call-webpack-plugin: ^3.0.0
peerDependencies:
webpack: ^4.0.0
- checksum: 334eb9cb83643bba259946034d15ab123fd503d646f07edd1731efe57cf1c086c4fe28f804da8171316bbfa175c5f24913ae4337059045785cf7dacac303228d
+ checksum: bcd509eaab2a6f0ed8396fe847f4f0da73655a54f4c418fa30dc1fc4a0b1b620f38e2fcd6bcb369e2a6cf4530995b371e9d12011566ac7ffe6ac6aec2ab0a4fb
languageName: node
linkType: hard
-"optionator@npm:^0.8.1, optionator@npm:^0.8.3":
+"optionator@npm:^0.8.1":
version: 0.8.3
resolution: "optionator@npm:0.8.3"
dependencies:
languageName: node
linkType: hard
-"os-browserify@npm:^0.3.0":
- version: 0.3.0
- resolution: "os-browserify@npm:0.3.0"
- checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf
- languageName: node
- linkType: hard
-
-"os-homedir@npm:^1.0.0":
- version: 1.0.2
- resolution: "os-homedir@npm:1.0.2"
- checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2
- languageName: node
- linkType: hard
-
-"os-locale@npm:^1.4.0":
- version: 1.4.0
- resolution: "os-locale@npm:1.4.0"
+"optionator@npm:^0.9.1":
+ version: 0.9.3
+ resolution: "optionator@npm:0.9.3"
dependencies:
- lcid: ^1.0.0
- checksum: 0161a1b6b5a8492f99f4b47fe465df9fc521c55ba5414fce6444c45e2500487b8ed5b40a47a98a2363fe83ff04ab033785300ed8df717255ec4c3b625e55b1fb
+ "@aashutoshrathi/word-wrap": ^1.2.3
+ deep-is: ^0.1.3
+ fast-levenshtein: ^2.0.6
+ levn: ^0.4.1
+ prelude-ls: ^1.2.1
+ type-check: ^0.4.0
+ checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a
languageName: node
linkType: hard
-"os-tmpdir@npm:^1.0.1, os-tmpdir@npm:~1.0.2":
- version: 1.0.2
- resolution: "os-tmpdir@npm:1.0.2"
- checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d
+"os-browserify@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "os-browserify@npm:0.3.0"
+ checksum: 16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf
languageName: node
linkType: hard
languageName: node
linkType: hard
-"p-each-series@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-each-series@npm:1.0.0"
- dependencies:
- p-reduce: ^1.0.0
- checksum: 5acdaedd36e0c7b9617f4924dccfd681cbe4dd9f98b0eb0fde7c00dc701eeceaba55c0dc1dfde13207bdab3715a4c5040d806d7ddc493f27498110bdc1e9dd5d
+"p-each-series@npm:^2.1.0":
+ version: 2.2.0
+ resolution: "p-each-series@npm:2.2.0"
+ checksum: 5fbe2f1f1966f55833bd401fe36f7afe410707d5e9fb6032c6dde8aa716d50521c3bb201fdb584130569b5941d5e84993e09e0b3f76a474288e0ede8f632983c
languageName: node
linkType: hard
languageName: node
linkType: hard
-"p-limit@npm:^1.1.0":
- version: 1.3.0
- resolution: "p-limit@npm:1.3.0"
- dependencies:
- p-try: ^1.0.0
- checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd
- languageName: node
- linkType: hard
-
-"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0, p-limit@npm:^2.3.0":
+"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0":
version: 2.3.0
resolution: "p-limit@npm:2.3.0"
dependencies:
languageName: node
linkType: hard
-"p-locate@npm:^2.0.0":
- version: 2.0.0
- resolution: "p-locate@npm:2.0.0"
+"p-limit@npm:^3.0.2":
+ version: 3.1.0
+ resolution: "p-limit@npm:3.1.0"
dependencies:
- p-limit: ^1.1.0
- checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081
+ yocto-queue: ^0.1.0
+ checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360
languageName: node
linkType: hard
languageName: node
linkType: hard
-"p-map@npm:^3.0.0":
- version: 3.0.0
- resolution: "p-map@npm:3.0.0"
- dependencies:
- aggregate-error: ^3.0.0
- checksum: 49b0fcbc66b1ef9cd379de1b4da07fa7a9f84b41509ea3f461c31903623aaba8a529d22f835e0d77c7cb9fcc16e4fae71e308fd40179aea514ba68f27032b5d5
- languageName: node
- linkType: hard
-
"p-map@npm:^4.0.0":
version: 4.0.0
resolution: "p-map@npm:4.0.0"
languageName: node
linkType: hard
-"p-reduce@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-reduce@npm:1.0.0"
- checksum: 7b0f25c861ca2319c1fd6d28d1421edca12eb5b780b2f2bcdb418e634b4c2ef07bd85f75ad41594474ec512e5505b49c36e7b22a177d43c60cc014576eab8888
- languageName: node
- linkType: hard
-
"p-retry@npm:^3.0.1":
version: 3.0.1
resolution: "p-retry@npm:3.0.1"
languageName: node
linkType: hard
-"p-try@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-try@npm:1.0.0"
- checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605
- languageName: node
- linkType: hard
-
"p-try@npm:^2.0.0":
version: 2.2.0
resolution: "p-try@npm:2.2.0"
languageName: node
linkType: hard
-"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5":
+"parse-asn1@npm:^5.0.0":
version: 5.1.6
resolution: "parse-asn1@npm:5.1.6"
dependencies:
languageName: node
linkType: hard
+"parse-asn1@npm:^5.1.7":
+ version: 5.1.7
+ resolution: "parse-asn1@npm:5.1.7"
+ dependencies:
+ asn1.js: ^4.10.1
+ browserify-aes: ^1.2.0
+ evp_bytestokey: ^1.0.3
+ hash-base: ~3.0
+ pbkdf2: ^3.1.2
+ safe-buffer: ^5.2.1
+ checksum: 93c7194c1ed63a13e0b212d854b5213ad1aca0ace41c66b311e97cca0519cf9240f79435a0306a3b412c257f0ea3f1953fd0d9549419a0952c9e995ab361fd6c
+ languageName: node
+ linkType: hard
+
"parse-duration@npm:0.4.4":
version: 0.4.4
resolution: "parse-duration@npm:0.4.4"
languageName: node
linkType: hard
-"parse-json@npm:^2.2.0":
- version: 2.2.0
- resolution: "parse-json@npm:2.2.0"
- dependencies:
- error-ex: ^1.2.0
- checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca
- languageName: node
- linkType: hard
-
"parse-json@npm:^4.0.0":
version: 4.0.0
resolution: "parse-json@npm:4.0.0"
languageName: node
linkType: hard
-"parse5@npm:4.0.0":
- version: 4.0.0
- resolution: "parse5@npm:4.0.0"
- checksum: 2123cec690689fed44e6c76aa8a08215d2dadece7eff7b35156dda7485e6a232c9b737313688ee715eb0678b6a87a31026927dd74690154f8a0811059845ba46
- languageName: node
- linkType: hard
-
-"parse5@npm:5.1.0":
- version: 5.1.0
- resolution: "parse5@npm:5.1.0"
- checksum: 13c44c6d47035a3cc75303655ae5630dc264f9b9ab8344feb3f79ca195d8b57a2a246af902abef1d780ad1eee92eb9b88cd03098a7ee7dd111f032152ebaf0a6
- languageName: node
- linkType: hard
-
-"parse5@npm:^6.0.1":
+"parse5@npm:6.0.1, parse5@npm:^6.0.1":
version: 6.0.1
resolution: "parse5@npm:6.0.1"
checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd
languageName: node
linkType: hard
-"path-exists@npm:^2.0.0":
- version: 2.1.0
- resolution: "path-exists@npm:2.1.0"
- dependencies:
- pinkie-promise: ^2.0.0
- checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84
- languageName: node
- linkType: hard
-
"path-exists@npm:^3.0.0":
version: 3.0.0
resolution: "path-exists@npm:3.0.0"
languageName: node
linkType: hard
-"path-is-absolute@npm:^1.0.0, path-is-absolute@npm:^1.0.1":
+"path-is-absolute@npm:^1.0.0":
version: 1.0.1
resolution: "path-is-absolute@npm:1.0.1"
checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8
checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
languageName: node
linkType: hard
-
-"path-parse@npm:^1.0.6":
- version: 1.0.7
- resolution: "path-parse@npm:1.0.7"
- checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
- languageName: node
- linkType: hard
-
-"path-to-regexp@npm:0.1.7":
- version: 0.1.7
- resolution: "path-to-regexp@npm:0.1.7"
- checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce
- languageName: node
- linkType: hard
-
-"path-to-regexp@npm:^1.7.0":
- version: 1.8.0
- resolution: "path-to-regexp@npm:1.8.0"
- dependencies:
- isarray: 0.0.1
- checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd
- languageName: node
- linkType: hard
-
-"path-type@npm:^1.0.0":
- version: 1.1.0
- resolution: "path-type@npm:1.1.0"
- dependencies:
- graceful-fs: ^4.1.2
- pify: ^2.0.0
- pinkie-promise: ^2.0.0
- checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79
+
+"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "path-parse@npm:1.0.7"
+ checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
languageName: node
linkType: hard
-"path-type@npm:^2.0.0":
- version: 2.0.0
- resolution: "path-type@npm:2.0.0"
- dependencies:
- pify: ^2.0.0
- checksum: 749dc0c32d4ebe409da155a0022f9be3d08e6fd276adb3dfa27cb2486519ab2aa277d1453b3fde050831e0787e07b0885a75653fefcc82d883753c5b91121b1c
+"path-to-regexp@npm:0.1.7":
+ version: 0.1.7
+ resolution: "path-to-regexp@npm:0.1.7"
+ checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce
languageName: node
linkType: hard
-"path-type@npm:^3.0.0":
- version: 3.0.0
- resolution: "path-type@npm:3.0.0"
+"path-to-regexp@npm:^1.7.0":
+ version: 1.8.0
+ resolution: "path-to-regexp@npm:1.8.0"
dependencies:
- pify: ^3.0.0
- checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6
+ isarray: 0.0.1
+ checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd
languageName: node
linkType: hard
languageName: node
linkType: hard
-"pbkdf2@npm:^3.0.3":
+"pbkdf2@npm:^3.0.3, pbkdf2@npm:^3.1.2":
version: 3.1.2
resolution: "pbkdf2@npm:3.1.2"
dependencies:
languageName: node
linkType: hard
-"picomatch@npm:^2.3.1":
+"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
languageName: node
linkType: hard
-"pify@npm:^3.0.0":
- version: 3.0.0
- resolution: "pify@npm:3.0.0"
- checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde
- languageName: node
- linkType: hard
-
"pify@npm:^4.0.1":
version: 4.0.1
resolution: "pify@npm:4.0.1"
languageName: node
linkType: hard
-"pkg-dir@npm:^1.0.0":
- version: 1.0.0
- resolution: "pkg-dir@npm:1.0.0"
- dependencies:
- find-up: ^1.0.0
- checksum: ce49878797dd81a5cee1cb7f05fdd431729309e4854c9f83d7748491b9d25c5f8ef04b3b7658134361fa036934c0aaa7fc7f984e46970dd227aa490f3869d36a
- languageName: node
- linkType: hard
-
-"pkg-dir@npm:^2.0.0":
- version: 2.0.0
- resolution: "pkg-dir@npm:2.0.0"
- dependencies:
- find-up: ^2.1.0
- checksum: 8c72b712305b51e1108f0ffda5ec1525a8307e54a5855db8fb1dcf77561a5ae98e2ba3b4814c9806a679f76b2f7e5dd98bde18d07e594ddd9fdd25e9cf242ea1
- languageName: node
- linkType: hard
-
"pkg-dir@npm:^3.0.0":
version: 3.0.0
resolution: "pkg-dir@npm:3.0.0"
languageName: node
linkType: hard
-"pkg-dir@npm:^4.1.0":
+"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
dependencies:
languageName: node
linkType: hard
-"pkg-up@npm:3.1.0, pkg-up@npm:^3.1.0":
+"pkg-up@npm:3.1.0":
version: 3.1.0
resolution: "pkg-up@npm:3.1.0"
dependencies:
languageName: node
linkType: hard
-"pn@npm:^1.1.0":
- version: 1.1.0
- resolution: "pn@npm:1.1.0"
- checksum: e4654186dc92a187c8c7fe4ccda902f4d39dd9c10f98d1c5a08ce5fad5507ef1e33ddb091240c3950bee81bd201b4c55098604c433a33b5e8bdd97f38b732fa0
- languageName: node
- linkType: hard
-
"pnp-webpack-plugin@npm:1.6.4":
version: 1.6.4
resolution: "pnp-webpack-plugin@npm:1.6.4"
languageName: node
linkType: hard
+"possible-typed-array-names@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "possible-typed-array-names@npm:1.0.0"
+ checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae
+ languageName: node
+ linkType: hard
+
"postcss-attribute-case-insensitive@npm:^4.0.1":
version: 4.0.2
resolution: "postcss-attribute-case-insensitive@npm:4.0.2"
languageName: node
linkType: hard
-"postcss-flexbugs-fixes@npm:4.1.0":
- version: 4.1.0
- resolution: "postcss-flexbugs-fixes@npm:4.1.0"
+"postcss-flexbugs-fixes@npm:4.2.1":
+ version: 4.2.1
+ resolution: "postcss-flexbugs-fixes@npm:4.2.1"
dependencies:
- postcss: ^7.0.0
- checksum: b5f2c39f4315a0eacfc23cafe6d20cff36e4605d266aa38f261e1db7f65e913e5fe3044d952d9435850f67525d5b1c7cc22eb6edeb51e19657c7a9a53b361dc5
+ postcss: ^7.0.26
+ checksum: 51a626bc80dbe42fcc8b0895b4f23a558bb809ec52cdc05aa27fb24cdffd4c9dc53f25218085ddf407c53d76573bc6d7568219c912161609f02532a8f5f59b43
languageName: node
linkType: hard
languageName: node
linkType: hard
-"postcss-modules-local-by-default@npm:^3.0.2":
+"postcss-modules-local-by-default@npm:^3.0.3":
version: 3.0.3
resolution: "postcss-modules-local-by-default@npm:3.0.3"
dependencies:
languageName: node
linkType: hard
-"postcss-modules-scope@npm:^2.1.1":
+"postcss-modules-scope@npm:^2.2.0":
version: 2.2.0
resolution: "postcss-modules-scope@npm:2.2.0"
dependencies:
languageName: node
linkType: hard
-"postcss-safe-parser@npm:4.0.1":
- version: 4.0.1
- resolution: "postcss-safe-parser@npm:4.0.1"
+"postcss-safe-parser@npm:5.0.2":
+ version: 5.0.2
+ resolution: "postcss-safe-parser@npm:5.0.2"
dependencies:
- postcss: ^7.0.0
- checksum: e4db1e5153521cfa77c046ea5c2600605339148c1ed039c61e8acea37e74ceea245f4ec4047bcea7782a34866a9c4b1321981c35374f211c292e8648e2ac4e33
+ postcss: ^8.1.0
+ checksum: b786eca091f856f2d31856d903c24c1b591ecbc0b607af0824e1cf12b9b254b5e1f24bc842cc2b95bc561f097d8b358fb4c9e04c73c1ba9c118d21bde9a83253
languageName: node
linkType: hard
languageName: node
linkType: hard
-"postcss@npm:7.0.21":
- version: 7.0.21
- resolution: "postcss@npm:7.0.21"
+"postcss@npm:7.0.36":
+ version: 7.0.36
+ resolution: "postcss@npm:7.0.36"
dependencies:
chalk: ^2.4.2
source-map: ^0.6.1
supports-color: ^6.1.0
- checksum: 5c11d58a4ffd54ddaf2f2f18ef7be10fc44405559ee56b52e41db8305d1b184d162138994dcce506ab77eef7283887a72d1b81cd1036c7fee106f50af0ef86d3
+ checksum: 4cfc0989b9ad5d0e8971af80d87f9c5beac5c84cb89ff22ad69852edf73c0a2fa348e7e0a135b5897bf893edad0fe86c428769050431ad9b532f072ff530828d
languageName: node
linkType: hard
languageName: node
linkType: hard
-"postcss@npm:^7, postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.23, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.5, postcss@npm:^7.0.6":
+"postcss@npm:^7, postcss@npm:^7.0.0, postcss@npm:^7.0.1, postcss@npm:^7.0.14, postcss@npm:^7.0.17, postcss@npm:^7.0.2, postcss@npm:^7.0.26, postcss@npm:^7.0.27, postcss@npm:^7.0.32, postcss@npm:^7.0.5, postcss@npm:^7.0.6":
version: 7.0.39
resolution: "postcss@npm:7.0.39"
dependencies:
languageName: node
linkType: hard
+"postcss@npm:^8.1.0":
+ version: 8.4.38
+ resolution: "postcss@npm:8.4.38"
+ dependencies:
+ nanoid: ^3.3.7
+ picocolors: ^1.0.0
+ source-map-js: ^1.2.0
+ checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451
+ languageName: node
+ linkType: hard
+
+"prelude-ls@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "prelude-ls@npm:1.2.1"
+ checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a
+ languageName: node
+ linkType: hard
+
"prelude-ls@npm:~1.1.2":
version: 1.1.2
resolution: "prelude-ls@npm:1.1.2"
languageName: node
linkType: hard
-"pretty-bytes@npm:^5.1.0, pretty-bytes@npm:^5.6.0":
+"pretty-bytes@npm:^5.3.0, pretty-bytes@npm:^5.6.0":
version: 5.6.0
resolution: "pretty-bytes@npm:5.6.0"
checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd
languageName: node
linkType: hard
-"pretty-format@npm:^24.9.0":
- version: 24.9.0
- resolution: "pretty-format@npm:24.9.0"
- dependencies:
- "@jest/types": ^24.9.0
- ansi-regex: ^4.0.0
- ansi-styles: ^3.2.0
- react-is: ^16.8.4
- checksum: ba9291c8dafd50d2fea1fbad5d2863a6f94e0c8835cce9778ec03bc11bb0f52b9ed0e4ee56aaa331d022ccae2fe52b92f73465a0af58fd0edb59deb6391c6847
- languageName: node
- linkType: hard
-
-"pretty-format@npm:^26.0.0, pretty-format@npm:^26.6.2":
+"pretty-format@npm:^26.0.0, pretty-format@npm:^26.6.0, pretty-format@npm:^26.6.2":
version: 26.6.2
resolution: "pretty-format@npm:26.6.2"
dependencies:
languageName: node
linkType: hard
-"private@npm:^0.1.8":
- version: 0.1.8
- resolution: "private@npm:0.1.8"
- checksum: a00abd713d25389f6de7294f0e7879b8a5d09a9ec5fd81cc2f21b29d4f9a80ec53bc4222927d3a281d4aadd4cd373d9a28726fca3935921950dc75fd71d1fdbb
- languageName: node
- linkType: hard
-
"process-nextick-args@npm:~2.0.0":
version: 2.0.1
resolution: "process-nextick-args@npm:2.0.1"
languageName: node
linkType: hard
-"promise@npm:^8.0.3":
- version: 8.1.0
- resolution: "promise@npm:8.1.0"
+"promise@npm:^8.1.0":
+ version: 8.3.0
+ resolution: "promise@npm:8.3.0"
dependencies:
asap: ~2.0.6
- checksum: 89b71a56154ed7d66a73236d8e8351a9c59adddba3929ecc845f75421ff37fc08ea0c67ad76cd5c0b0d81812c7d07a32bed27e7df5fcc960c6d68b0c1cd771f7
+ checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5
+ languageName: node
+ linkType: hard
+
+"prompts@npm:2.4.0":
+ version: 2.4.0
+ resolution: "prompts@npm:2.4.0"
+ dependencies:
+ kleur: ^3.0.3
+ sisteransi: ^1.0.5
+ checksum: 96c7bef8eb3c0bb2076d2bc5ee473f06e6d8ac01ac4d0f378dfeb0ddaf2f31c339360ec8f0f8486f78601d16ebef7c6bd9886d44b937ba01bab568b937190265
languageName: node
linkType: hard
languageName: node
linkType: hard
-"prop-types@npm:^15.5.6":
+"prop-types@npm:^15.5.6, prop-types@npm:^15.8.1":
version: 15.8.1
resolution: "prop-types@npm:15.8.1"
dependencies:
languageName: node
linkType: hard
-"proxy-addr@npm:~2.0.5":
+"proxy-addr@npm:~2.0.7":
version: 2.0.7
resolution: "proxy-addr@npm:2.0.7"
dependencies:
languageName: node
linkType: hard
+"proxy-from-env@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "proxy-from-env@npm:1.1.0"
+ checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4
+ languageName: node
+ linkType: hard
+
"prr@npm:~1.0.1":
version: 1.0.1
resolution: "prr@npm:1.0.1"
languageName: node
linkType: hard
-"qs@npm:6.7.0":
- version: 6.7.0
- resolution: "qs@npm:6.7.0"
- checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347
+"qs@npm:6.11.0":
+ version: 6.11.0
+ resolution: "qs@npm:6.11.0"
+ dependencies:
+ side-channel: ^1.0.4
+ checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297
languageName: node
linkType: hard
languageName: node
linkType: hard
+"querystring@npm:^0.2.0":
+ version: 0.2.1
+ resolution: "querystring@npm:0.2.1"
+ checksum: 7b83b45d641e75fd39cd6625ddfd44e7618e741c61e95281b57bbae8fde0afcc12cf851924559e5cc1ef9baa3b1e06e22b164ea1397d65dd94b801f678d9c8ce
+ languageName: node
+ linkType: hard
+
"querystringify@npm:^2.1.1":
version: 2.2.0
resolution: "querystringify@npm:2.2.0"
languageName: node
linkType: hard
-"raw-body@npm:2.4.0":
- version: 2.4.0
- resolution: "raw-body@npm:2.4.0"
+"raw-body@npm:2.5.2":
+ version: 2.5.2
+ resolution: "raw-body@npm:2.5.2"
dependencies:
- bytes: 3.1.0
- http-errors: 1.7.2
+ bytes: 3.1.2
+ http-errors: 2.0.0
iconv-lite: 0.4.24
unpipe: 1.0.0
- checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb
+ checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676
languageName: node
linkType: hard
-"react-app-polyfill@npm:^1.0.6":
- version: 1.0.6
- resolution: "react-app-polyfill@npm:1.0.6"
+"react-app-polyfill@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "react-app-polyfill@npm:2.0.0"
dependencies:
- core-js: ^3.5.0
+ core-js: ^3.6.5
object-assign: ^4.1.1
- promise: ^8.0.3
+ promise: ^8.1.0
raf: ^3.4.1
- regenerator-runtime: ^0.13.3
- whatwg-fetch: ^3.0.0
- checksum: d38fb0e5f773eb618e39832e78e34b2382a33a2f633ecbc7aba3af819134938f25f4b6915f40dcbb46efa1096efdfabe44030165142000dcf522f564db7cb3b9
+ regenerator-runtime: ^0.13.7
+ whatwg-fetch: ^3.4.1
+ checksum: 99e52a6b2229c7ca730cfd44ac95640f955be71d144225bd6c24fa47922a742658a371d0a2f0876d732533f1055b7cd7e9d534c89c29f8ca889ecd1b8d15f065
languageName: node
linkType: hard
languageName: node
linkType: hard
-"react-dev-utils@npm:^10.2.1":
- version: 10.2.1
- resolution: "react-dev-utils@npm:10.2.1"
+"react-dev-utils@npm:^11.0.1":
+ version: 11.0.4
+ resolution: "react-dev-utils@npm:11.0.4"
dependencies:
- "@babel/code-frame": 7.8.3
+ "@babel/code-frame": 7.10.4
address: 1.1.2
- browserslist: 4.10.0
+ browserslist: 4.14.2
chalk: 2.4.2
- cross-spawn: 7.0.1
+ cross-spawn: 7.0.3
detect-port-alt: 1.1.6
escape-string-regexp: 2.0.0
- filesize: 6.0.1
+ filesize: 6.1.0
find-up: 4.1.0
- fork-ts-checker-webpack-plugin: 3.1.1
+ fork-ts-checker-webpack-plugin: 4.1.6
global-modules: 2.0.0
- globby: 8.0.2
+ globby: 11.0.1
gzip-size: 5.1.1
- immer: 1.10.0
- inquirer: 7.0.4
+ immer: 8.0.1
is-root: 2.1.0
- loader-utils: 1.2.3
+ loader-utils: 2.0.0
open: ^7.0.2
pkg-up: 3.1.0
- react-error-overlay: ^6.0.7
+ prompts: 2.4.0
+ react-error-overlay: ^6.0.9
recursive-readdir: 2.2.2
shell-quote: 1.7.2
strip-ansi: 6.0.0
text-table: 0.2.0
- checksum: af58950075c69d5b179b5d527d59fe7072b18258042c412665a4e7425b796a4af24456e05b93ff837bdeec84746cd7d9ed9dce2119a8d57139b8ff71a6053dfc
+ checksum: b41c95010a4fb60d4ea6309423520e6268757b68df34de7e9e8dbc72549236a1f5a698ff99ad72a034ac51b042aa79ee53994330ce4df05bf867e63c5464bb3f
languageName: node
linkType: hard
languageName: node
linkType: hard
-"react-error-overlay@npm:^6.0.7":
- version: 6.0.9
- resolution: "react-error-overlay@npm:6.0.9"
- checksum: 695853bc885e798008a00c10d8d94e5ac91626e8130802fea37345f9c037f41b80104345db2ee87f225feb4a4ef71b0df572b17c378a6d397b6815f6d4a84293
+"react-error-overlay@npm:^6.0.9":
+ version: 6.0.11
+ resolution: "react-error-overlay@npm:6.0.11"
+ checksum: ce7b44c38fadba9cedd7c095cf39192e632daeccf1d0747292ed524f17dcb056d16bc197ddee5723f9dd888f0b9b19c3b486c430319e30504289b9296f2d2c42
languageName: node
linkType: hard
languageName: node
linkType: hard
-"react-is@npm:^16.13.1, react-is@npm:^16.6.3, react-is@npm:^16.7.0, react-is@npm:^16.8.1, react-is@npm:^16.8.4, react-is@npm:^16.8.6":
+"react-is@npm:^16.13.1, react-is@npm:^16.6.3, react-is@npm:^16.7.0, react-is@npm:^16.8.1, react-is@npm:^16.8.6":
version: 16.13.1
resolution: "react-is@npm:16.13.1"
checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f
languageName: node
linkType: hard
+"react-refresh@npm:^0.8.3":
+ version: 0.8.3
+ resolution: "react-refresh@npm:0.8.3"
+ checksum: 3cffe5a9cbac1c5d59bf74bf9fff43c987d87ef32098b9092ea94b6637377d86c08565b9374d9397f446b3fbcd95de986ec77220a16f979687cb39b7b89e2f91
+ languageName: node
+ linkType: hard
+
"react-router-dom@npm:4.3.1":
version: 4.3.1
resolution: "react-router-dom@npm:4.3.1"
languageName: node
linkType: hard
-"react-scripts@npm:3.4.4":
- version: 3.4.4
- resolution: "react-scripts@npm:3.4.4"
- dependencies:
- "@babel/core": 7.9.0
- "@svgr/webpack": 4.3.3
- "@typescript-eslint/eslint-plugin": ^2.10.0
- "@typescript-eslint/parser": ^2.10.0
- babel-eslint: 10.1.0
- babel-jest: ^24.9.0
+"react-scripts@npm:4.0.1":
+ version: 4.0.1
+ resolution: "react-scripts@npm:4.0.1"
+ dependencies:
+ "@babel/core": 7.12.3
+ "@pmmmwh/react-refresh-webpack-plugin": 0.4.2
+ "@svgr/webpack": 5.4.0
+ "@typescript-eslint/eslint-plugin": ^4.5.0
+ "@typescript-eslint/parser": ^4.5.0
+ babel-eslint: ^10.1.0
+ babel-jest: ^26.6.0
babel-loader: 8.1.0
- babel-plugin-named-asset-import: ^0.3.6
- babel-preset-react-app: ^9.1.2
- camelcase: ^5.3.1
+ babel-plugin-named-asset-import: ^0.3.7
+ babel-preset-react-app: ^10.0.0
+ bfj: ^7.0.2
+ camelcase: ^6.1.0
case-sensitive-paths-webpack-plugin: 2.3.0
- css-loader: 3.4.2
+ css-loader: 4.3.0
dotenv: 8.2.0
dotenv-expand: 5.1.0
- eslint: ^6.6.0
- eslint-config-react-app: ^5.2.1
- eslint-loader: 3.0.3
- eslint-plugin-flowtype: 4.6.0
- eslint-plugin-import: 2.20.1
- eslint-plugin-jsx-a11y: 6.2.3
- eslint-plugin-react: 7.19.0
- eslint-plugin-react-hooks: ^1.6.1
- file-loader: 4.3.0
- fs-extra: ^8.1.0
- fsevents: 2.1.2
- html-webpack-plugin: 4.0.0-beta.11
+ eslint: ^7.11.0
+ eslint-config-react-app: ^6.0.0
+ eslint-plugin-flowtype: ^5.2.0
+ eslint-plugin-import: ^2.22.1
+ eslint-plugin-jest: ^24.1.0
+ eslint-plugin-jsx-a11y: ^6.3.1
+ eslint-plugin-react: ^7.21.5
+ eslint-plugin-react-hooks: ^4.2.0
+ eslint-plugin-testing-library: ^3.9.2
+ eslint-webpack-plugin: ^2.1.0
+ file-loader: 6.1.1
+ fs-extra: ^9.0.1
+ fsevents: ^2.1.3
+ html-webpack-plugin: 4.5.0
identity-obj-proxy: 3.0.0
- jest: 24.9.0
- jest-environment-jsdom-fourteen: 1.0.1
- jest-resolve: 24.9.0
- jest-watch-typeahead: 0.4.2
- mini-css-extract-plugin: 0.9.0
- optimize-css-assets-webpack-plugin: 5.0.3
+ jest: 26.6.0
+ jest-circus: 26.6.0
+ jest-resolve: 26.6.0
+ jest-watch-typeahead: 0.6.1
+ mini-css-extract-plugin: 0.11.3
+ optimize-css-assets-webpack-plugin: 5.0.4
pnp-webpack-plugin: 1.6.4
- postcss-flexbugs-fixes: 4.1.0
+ postcss-flexbugs-fixes: 4.2.1
postcss-loader: 3.0.0
postcss-normalize: 8.0.1
postcss-preset-env: 6.7.0
- postcss-safe-parser: 4.0.1
- react-app-polyfill: ^1.0.6
- react-dev-utils: ^10.2.1
- resolve: 1.15.0
- resolve-url-loader: 3.1.2
+ postcss-safe-parser: 5.0.2
+ prompts: 2.4.0
+ react-app-polyfill: ^2.0.0
+ react-dev-utils: ^11.0.1
+ react-refresh: ^0.8.3
+ resolve: 1.18.1
+ resolve-url-loader: ^3.1.2
sass-loader: 8.0.2
- semver: 6.3.0
- style-loader: 0.23.1
- terser-webpack-plugin: 2.3.8
- ts-pnp: 1.1.6
- url-loader: 2.3.0
- webpack: 4.42.0
+ semver: 7.3.2
+ style-loader: 1.3.0
+ terser-webpack-plugin: 4.2.3
+ ts-pnp: 1.2.0
+ url-loader: 4.1.1
+ webpack: 4.44.2
webpack-dev-server: 3.11.0
webpack-manifest-plugin: 2.2.0
- workbox-webpack-plugin: 4.3.1
+ workbox-webpack-plugin: 5.1.4
peerDependencies:
typescript: ^3.2.1
dependenciesMeta:
typescript:
optional: true
bin:
- react-scripts: bin/react-scripts.js
- checksum: a3ea2dfbecb595c471b23153c86fcd9da09093576f90646ca79e2653baaf209c1c5b73eeb4ed02f591e91e2505a6b963ec4de7f4ef76f2e52c73839d735dc680
+ react-scripts: ./bin/react-scripts.js
+ checksum: 5f3d284c63c3649f175daa72f40be43cd33f539370225c395b31a3fc812d5cea26135a7796760a0f0701489e6212739c72b87e01ede716c815016f1295b20aaa
languageName: node
linkType: hard
languageName: node
linkType: hard
-"read-pkg-up@npm:^1.0.1":
- version: 1.0.1
- resolution: "read-pkg-up@npm:1.0.1"
- dependencies:
- find-up: ^1.0.0
- read-pkg: ^1.0.0
- checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7
- languageName: node
- linkType: hard
-
-"read-pkg-up@npm:^2.0.0":
- version: 2.0.0
- resolution: "read-pkg-up@npm:2.0.0"
- dependencies:
- find-up: ^2.0.0
- read-pkg: ^2.0.0
- checksum: 22f9026fb72219ecd165f94f589461c70a88461dc7ea0d439a310ef2a5271ff176a4df4e5edfad087d8ac89b8553945eb209476b671e8ed081c990f30fc40b27
- languageName: node
- linkType: hard
-
-"read-pkg-up@npm:^4.0.0":
- version: 4.0.0
- resolution: "read-pkg-up@npm:4.0.0"
- dependencies:
- find-up: ^3.0.0
- read-pkg: ^3.0.0
- checksum: dd867d9a912707bc11340aebc91780be9f36f34ee1d27a5dafb8520e0cb6344138b80eb8bf8325bebf519d26ecf14cbf6190d9e5f765f0120da5ede4013f4d13
- languageName: node
- linkType: hard
-
"read-pkg-up@npm:^7.0.1":
version: 7.0.1
resolution: "read-pkg-up@npm:7.0.1"
languageName: node
linkType: hard
-"read-pkg@npm:^1.0.0":
- version: 1.1.0
- resolution: "read-pkg@npm:1.1.0"
- dependencies:
- load-json-file: ^1.0.0
- normalize-package-data: ^2.3.2
- path-type: ^1.0.0
- checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366
- languageName: node
- linkType: hard
-
-"read-pkg@npm:^2.0.0":
- version: 2.0.0
- resolution: "read-pkg@npm:2.0.0"
- dependencies:
- load-json-file: ^2.0.0
- normalize-package-data: ^2.3.2
- path-type: ^2.0.0
- checksum: 85c5bf35f2d96acdd756151ba83251831bb2b1040b7d96adce70b2cb119b5320417f34876de0929f2d06c67f3df33ef4636427df3533913876f9ef2487a6f48f
- languageName: node
- linkType: hard
-
-"read-pkg@npm:^3.0.0":
- version: 3.0.0
- resolution: "read-pkg@npm:3.0.0"
- dependencies:
- load-json-file: ^4.0.0
- normalize-package-data: ^2.3.2
- path-type: ^3.0.0
- checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6
- languageName: node
- linkType: hard
-
"read-pkg@npm:^5.2.0":
version: 5.2.0
resolution: "read-pkg@npm:5.2.0"
languageName: node
linkType: hard
+"readable-stream@npm:^2.3.8":
+ version: 2.3.8
+ resolution: "readable-stream@npm:2.3.8"
+ dependencies:
+ core-util-is: ~1.0.0
+ inherits: ~2.0.3
+ isarray: ~1.0.0
+ process-nextick-args: ~2.0.0
+ safe-buffer: ~5.1.1
+ string_decoder: ~1.1.1
+ util-deprecate: ~1.0.1
+ checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42
+ languageName: node
+ linkType: hard
+
"readable-stream@npm:^3.0.6, readable-stream@npm:^3.6.0":
version: 3.6.0
resolution: "readable-stream@npm:3.6.0"
languageName: node
linkType: hard
-"realpath-native@npm:^1.1.0":
- version: 1.1.0
- resolution: "realpath-native@npm:1.1.0"
- dependencies:
- util.promisify: ^1.0.0
- checksum: 75ef0595dea6186384b785a9e0993c58ec604f8be2e39b602fec6d7837c7f770af4a4eb3c81f864a7d81c518a7167a6eaabbc7695b7a88c56e1ef04b91c1d586
- languageName: node
- linkType: hard
-
"recompose@npm:0.28.0 - 0.30.0":
version: 0.30.0
resolution: "recompose@npm:0.30.0"
languageName: node
linkType: hard
-"redent@npm:^1.0.0":
- version: 1.0.0
- resolution: "redent@npm:1.0.0"
- dependencies:
- indent-string: ^2.1.0
- strip-indent: ^1.0.1
- checksum: 2bb8f76fda9c9f44e26620047b0ba9dd1834b0a80309d0badcc23fdcf7bb27a7ca74e66b683baa0d4b8cb5db787f11be086504036d63447976f409dd3e73fd7d
- languageName: node
- linkType: hard
-
"redent@npm:^3.0.0":
version: 3.0.0
resolution: "redent@npm:3.0.0"
languageName: node
linkType: hard
+"reflect.getprototypeof@npm:^1.0.4":
+ version: 1.0.6
+ resolution: "reflect.getprototypeof@npm:1.0.6"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.1
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.4
+ globalthis: ^1.0.3
+ which-builtin-type: ^1.1.3
+ checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba
+ languageName: node
+ linkType: hard
+
"reflect.ownkeys@npm:^0.2.0":
version: 0.2.0
resolution: "reflect.ownkeys@npm:0.2.0"
languageName: node
linkType: hard
-"regenerate-unicode-properties@npm:^8.2.0":
- version: 8.2.0
- resolution: "regenerate-unicode-properties@npm:8.2.0"
+"regenerate-unicode-properties@npm:^10.1.0":
+ version: 10.1.1
+ resolution: "regenerate-unicode-properties@npm:10.1.1"
dependencies:
- regenerate: ^1.4.0
- checksum: ee7db70ab25b95f2e3f39537089fc3eddba0b39fc9b982d6602f127996ce873d8c55584d5428486ca00dc0a85d174d943354943cd4a745cda475c8fe314b4f8a
+ regenerate: ^1.4.2
+ checksum: b80958ef40f125275824c2c47d5081dfaefebd80bff26c76761e9236767c748a4a95a69c053fe29d2df881177f2ca85df4a71fe70a82360388b31159ef19adcf
languageName: node
linkType: hard
-"regenerate@npm:^1.4.0":
+"regenerate@npm:^1.4.2":
version: 1.4.2
resolution: "regenerate@npm:1.4.2"
checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0
languageName: node
linkType: hard
-"regenerator-runtime@npm:^0.13.3, regenerator-runtime@npm:^0.13.4":
+"regenerator-runtime@npm:^0.13.4":
version: 0.13.7
resolution: "regenerator-runtime@npm:0.13.7"
checksum: 52b66e6669152c0b1bccd95c8e11aabbfe67bb97bdf00e223bdf723b0f0052d4da5c02001d4c4bef576bdc5bcdc38a20496d1b5363b65c950c8434ed5071d9e0
languageName: node
linkType: hard
-"regenerator-transform@npm:^0.14.2":
- version: 0.14.5
- resolution: "regenerator-transform@npm:0.14.5"
+"regenerator-runtime@npm:^0.13.7":
+ version: 0.13.11
+ resolution: "regenerator-runtime@npm:0.13.11"
+ checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4
+ languageName: node
+ linkType: hard
+
+"regenerator-runtime@npm:^0.14.0":
+ version: 0.14.1
+ resolution: "regenerator-runtime@npm:0.14.1"
+ checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38
+ languageName: node
+ linkType: hard
+
+"regenerator-transform@npm:^0.15.2":
+ version: 0.15.2
+ resolution: "regenerator-transform@npm:0.15.2"
dependencies:
"@babel/runtime": ^7.8.4
- checksum: a467a3b652b4ec26ff964e9c5f1817523a73fc44cb928b8d21ff11aebeac5d10a84d297fe02cea9f282bcec81a0b0d562237da69ef0f40a0160b30a4fa98bc94
+ checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27
languageName: node
linkType: hard
languageName: node
linkType: hard
-"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.3.1":
+"regexp.prototype.flags@npm:^1.2.0":
version: 1.3.1
resolution: "regexp.prototype.flags@npm:1.3.1"
dependencies:
languageName: node
linkType: hard
-"regexpp@npm:^2.0.1":
- version: 2.0.1
- resolution: "regexpp@npm:2.0.1"
- checksum: 1f41cf80ac08514c6665812e3dcc0673569431d3285db27053f8b237a758992fb55d6ddfbc264db399ff4f7a7db432900ca3a029daa28a75e0436231872091b1
+"regexp.prototype.flags@npm:^1.5.2":
+ version: 1.5.2
+ resolution: "regexp.prototype.flags@npm:1.5.2"
+ dependencies:
+ call-bind: ^1.0.6
+ define-properties: ^1.2.1
+ es-errors: ^1.3.0
+ set-function-name: ^2.0.1
+ checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64
languageName: node
linkType: hard
languageName: node
linkType: hard
-"regexpu-core@npm:^4.7.1":
- version: 4.7.1
- resolution: "regexpu-core@npm:4.7.1"
+"regexpu-core@npm:^5.3.1":
+ version: 5.3.2
+ resolution: "regexpu-core@npm:5.3.2"
dependencies:
- regenerate: ^1.4.0
- regenerate-unicode-properties: ^8.2.0
- regjsgen: ^0.5.1
- regjsparser: ^0.6.4
- unicode-match-property-ecmascript: ^1.0.4
- unicode-match-property-value-ecmascript: ^1.2.0
- checksum: 368b4aab72132ba3c8bd114822572c920d390ae99d3d219e0c7f872c6a0a3b1fbe30c88188ff90ec6f8e681667fa8e51d84a78bb05c460996a0df6a060b7ae80
- languageName: node
- linkType: hard
-
-"regjsgen@npm:^0.5.1":
- version: 0.5.2
- resolution: "regjsgen@npm:0.5.2"
- checksum: 87c83d8488affae2493a823904de1a29a1867a07433c5e1142ad749b5606c5589b305fe35bfcc0972cf5a3b0d66b1f7999009e541be39a5d42c6041c59e2fb52
+ "@babel/regjsgen": ^0.8.0
+ regenerate: ^1.4.2
+ regenerate-unicode-properties: ^10.1.0
+ regjsparser: ^0.9.1
+ unicode-match-property-ecmascript: ^2.0.0
+ unicode-match-property-value-ecmascript: ^2.1.0
+ checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2
languageName: node
linkType: hard
-"regjsparser@npm:^0.6.4":
- version: 0.6.9
- resolution: "regjsparser@npm:0.6.9"
+"regjsparser@npm:^0.9.1":
+ version: 0.9.1
+ resolution: "regjsparser@npm:0.9.1"
dependencies:
jsesc: ~0.5.0
bin:
regjsparser: bin/parser
- checksum: 1c439ec46a0be7834ec82fbb109396e088b6b73f0e9562cd67c37e3bdf85cc7cffe0192b3324da4491c7f709ce2b06fb2d59e12f0f9836b2e0cf26d5e54263aa
+ checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc
languageName: node
linkType: hard
languageName: node
linkType: hard
-"repeating@npm:^2.0.0":
- version: 2.0.1
- resolution: "repeating@npm:2.0.1"
- dependencies:
- is-finite: ^1.0.0
- checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0
- languageName: node
- linkType: hard
-
"request-progress@npm:^3.0.0":
version: 3.0.0
resolution: "request-progress@npm:3.0.0"
languageName: node
linkType: hard
-"request-promise-native@npm:^1.0.5, request-promise-native@npm:^1.0.8":
+"request-promise-native@npm:^1.0.8":
version: 1.0.9
resolution: "request-promise-native@npm:1.0.9"
dependencies:
languageName: node
linkType: hard
-"request@npm:^2.87.0, request@npm:^2.88.0, request@npm:^2.88.2":
+"request@npm:^2.88.2":
version: 2.88.2
resolution: "request@npm:2.88.2"
dependencies:
languageName: node
linkType: hard
-"require-main-filename@npm:^1.0.1":
- version: 1.0.1
- resolution: "require-main-filename@npm:1.0.1"
- checksum: 1fef30754da961f4e13c450c3eb60c7ae898a529c6ad6fa708a70bd2eed01564ceb299187b2899f5562804d797a059f39a5789884d0ac7b7ae1defc68fba4abf
+"require-from-string@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "require-from-string@npm:2.0.2"
+ checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b
languageName: node
linkType: hard
languageName: node
linkType: hard
+"resolve-cwd@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "resolve-cwd@npm:3.0.0"
+ dependencies:
+ resolve-from: ^5.0.0
+ checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81
+ languageName: node
+ linkType: hard
+
"resolve-from@npm:^3.0.0":
version: 3.0.0
resolution: "resolve-from@npm:3.0.0"
languageName: node
linkType: hard
+"resolve-from@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "resolve-from@npm:5.0.0"
+ checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf
+ languageName: node
+ linkType: hard
+
"resolve-pathname@npm:^3.0.0":
version: 3.0.0
resolution: "resolve-pathname@npm:3.0.0"
languageName: node
linkType: hard
-"resolve-url-loader@npm:3.1.2":
- version: 3.1.2
- resolution: "resolve-url-loader@npm:3.1.2"
+"resolve-url-loader@npm:^3.1.2":
+ version: 3.1.5
+ resolution: "resolve-url-loader@npm:3.1.5"
dependencies:
adjust-sourcemap-loader: 3.0.0
camelcase: 5.3.1
compose-function: 3.0.3
convert-source-map: 1.7.0
es6-iterator: 2.0.3
- loader-utils: 1.2.3
- postcss: 7.0.21
+ loader-utils: ^1.2.3
+ postcss: 7.0.36
rework: 1.0.1
rework-visit: 1.0.0
source-map: 0.6.1
- checksum: 02e559af8d10a8fda8d2cb1c61290b932787309309839288820438b4f25339a8c8cbd52598af89c1c1d277133d74914407e7a760e49acd966425a038798a6e70
+ checksum: eb52911eff20723f07409cc12138d254fa0dd4a4f3b1ba11ee1b29912afb03f1272aaddb523658be1e3a946e0d1bf6f603d0e107753ab83d48ad2116cf04b7f6
languageName: node
linkType: hard
languageName: node
linkType: hard
-"resolve@npm:1.1.7":
- version: 1.1.7
- resolution: "resolve@npm:1.1.7"
- checksum: afd20873fbde7641c9125efe3f940c2a99f6b1f90f1b7b743e744bdaac1cb105b2e4e0317bcc052ed7e31d57afa86b394a4dc9a1b33a297977be134fdf0250ab
- languageName: node
- linkType: hard
-
-"resolve@npm:1.15.0":
- version: 1.15.0
- resolution: "resolve@npm:1.15.0"
+"resolve@npm:1.18.1":
+ version: 1.18.1
+ resolution: "resolve@npm:1.18.1"
dependencies:
+ is-core-module: ^2.0.0
path-parse: ^1.0.6
- checksum: 6d5a48c4ddaad067d7d0d0557c58d0db342d878abccd4843af81ffd439b865157e8bf38029d05fdc02137da5bc7528d5120e3c270b38db2cb26973ffa9e2bebc
+ checksum: bab3686fa87576ac7e7f68481e25494f99b8413f3bc5048c5284eabe021f98917a50c625f8a1920a87ffc347b076c12a4a685d46d5fc98f337cf2dd3792014f4
languageName: node
linkType: hard
-"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.15.1, resolve@npm:^1.3.2, resolve@npm:^1.8.1":
+"resolve@npm:^1.10.0, resolve@npm:^1.12.0, resolve@npm:^1.14.2, resolve@npm:^1.3.2":
version: 1.20.0
resolution: "resolve@npm:1.20.0"
dependencies:
languageName: node
linkType: hard
-"resolve@patch:resolve@1.1.7#~builtin<compat/resolve>":
- version: 1.1.7
- resolution: "resolve@patch:resolve@npm%3A1.1.7#~builtin<compat/resolve>::version=1.1.7&hash=07638b"
- checksum: e9dbca78600ae56835c43a09f1276876c883e4b4bbd43e2683fa140671519d2bdebeb1c1576ca87c8c508ae2987b3ec481645ac5d3054b0f23254cfc1ce49942
+"resolve@npm:^1.17.0, resolve@npm:^1.18.1, resolve@npm:^1.19.0, resolve@npm:^1.22.4":
+ version: 1.22.8
+ resolution: "resolve@npm:1.22.8"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c
languageName: node
linkType: hard
-"resolve@patch:resolve@1.15.0#~builtin<compat/resolve>":
- version: 1.15.0
- resolution: "resolve@patch:resolve@npm%3A1.15.0#~builtin<compat/resolve>::version=1.15.0&hash=07638b"
+"resolve@npm:^2.0.0-next.5":
+ version: 2.0.0-next.5
+ resolution: "resolve@npm:2.0.0-next.5"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f
+ languageName: node
+ linkType: hard
+
+"resolve@patch:resolve@1.18.1#~builtin<compat/resolve>":
+ version: 1.18.1
+ resolution: "resolve@patch:resolve@npm%3A1.18.1#~builtin<compat/resolve>::version=1.18.1&hash=07638b"
dependencies:
+ is-core-module: ^2.0.0
path-parse: ^1.0.6
- checksum: fd308e2054e85f829a29e2a5f4634942272b9bfc2771f95fbd1c2068f47a7f4f0f5d4ccb11cb4522f9a8490edd036299f7a85e76327ed8b91bd1a41d314e2bf0
+ checksum: 7439c8f3d8fa00c9dc800ef3c8ed0bd8e8772823e6e4948b1a77487759e0fb905381808caae96398d135619af90654d8e74cac778e5b8c9d7138f2dd52bb2bba
languageName: node
linkType: hard
-"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.12.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.13.1#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.15.1#~builtin<compat/resolve>, resolve@patch:resolve@^1.3.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.8.1#~builtin<compat/resolve>":
+"resolve@patch:resolve@^1.10.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.12.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.14.2#~builtin<compat/resolve>, resolve@patch:resolve@^1.3.2#~builtin<compat/resolve>":
version: 1.20.0
resolution: "resolve@patch:resolve@npm%3A1.20.0#~builtin<compat/resolve>::version=1.20.0&hash=07638b"
dependencies:
languageName: node
linkType: hard
+"resolve@patch:resolve@^1.17.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.18.1#~builtin<compat/resolve>, resolve@patch:resolve@^1.19.0#~builtin<compat/resolve>, resolve@patch:resolve@^1.22.4#~builtin<compat/resolve>":
+ version: 1.22.8
+ resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin<compat/resolve>::version=1.22.8&hash=07638b"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847
+ languageName: node
+ linkType: hard
+
+"resolve@patch:resolve@^2.0.0-next.5#~builtin<compat/resolve>":
+ version: 2.0.0-next.5
+ resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin<compat/resolve>::version=2.0.0-next.5&hash=07638b"
+ dependencies:
+ is-core-module: ^2.13.0
+ path-parse: ^1.0.7
+ supports-preserve-symlinks-flag: ^1.0.0
+ bin:
+ resolve: bin/resolve
+ checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c
+ languageName: node
+ linkType: hard
+
"restore-cursor@npm:^3.1.0":
version: 3.1.0
resolution: "restore-cursor@npm:3.1.0"
languageName: node
linkType: hard
-"rimraf@npm:2, rimraf@npm:^2.5.4, rimraf@npm:^2.6.3, rimraf@npm:^2.7.1":
+"rimraf@npm:2, rimraf@npm:^2.5.4, rimraf@npm:^2.6.3":
version: 2.7.1
resolution: "rimraf@npm:2.7.1"
dependencies:
languageName: node
linkType: hard
-"rimraf@npm:2.6.3":
- version: 2.6.3
- resolution: "rimraf@npm:2.6.3"
- dependencies:
- glob: ^7.1.3
- bin:
- rimraf: ./bin.js
- checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10
- languageName: node
- linkType: hard
-
"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2":
version: 3.0.2
resolution: "rimraf@npm:3.0.2"
languageName: node
linkType: hard
+"rollup-plugin-babel@npm:^4.3.3":
+ version: 4.4.0
+ resolution: "rollup-plugin-babel@npm:4.4.0"
+ dependencies:
+ "@babel/helper-module-imports": ^7.0.0
+ rollup-pluginutils: ^2.8.1
+ peerDependencies:
+ "@babel/core": 7 || ^7.0.0-rc.2
+ rollup: ">=0.60.0 <3"
+ checksum: 5b8ed7c0a4192d7c74689074c910c1670eb07dfc875b1f4af5694a94c46bcb168ba85e2c9753030131efd6261ece7c252b9695953d0ea96d944977c6e79930d3
+ languageName: node
+ linkType: hard
+
+"rollup-plugin-terser@npm:^5.3.1":
+ version: 5.3.1
+ resolution: "rollup-plugin-terser@npm:5.3.1"
+ dependencies:
+ "@babel/code-frame": ^7.5.5
+ jest-worker: ^24.9.0
+ rollup-pluginutils: ^2.8.2
+ serialize-javascript: ^4.0.0
+ terser: ^4.6.2
+ peerDependencies:
+ rollup: ">=0.66.0 <3"
+ checksum: 50f9e8fa6737fa5e8aeca6a52b59ea3bc66faebe743bdfe9ce0484298cd1978082026721b182d79bcc88240429842dc58feae88d6c238b47cafc1684e0320a73
+ languageName: node
+ linkType: hard
+
+"rollup-pluginutils@npm:^2.8.1, rollup-pluginutils@npm:^2.8.2":
+ version: 2.8.2
+ resolution: "rollup-pluginutils@npm:2.8.2"
+ dependencies:
+ estree-walker: ^0.6.1
+ checksum: 339fdf866d8f4ff6e408fa274c0525412f7edb01dc46b5ccda51f575b7e0d20ad72965773376fb5db95a77a7fcfcab97bf841ec08dbadf5d6b08af02b7a2cf5e
+ languageName: node
+ linkType: hard
+
+"rollup@npm:^1.31.1":
+ version: 1.32.1
+ resolution: "rollup@npm:1.32.1"
+ dependencies:
+ "@types/estree": "*"
+ "@types/node": "*"
+ acorn: ^7.1.0
+ bin:
+ rollup: dist/bin/rollup
+ checksum: 3a02731c20c71321fae647c9c9cab0febee0580c6af029fdcd5dd6f424b8c85119d92c8554c6837327fd323c2458e92d955bbebc90ca6bed87cc626695e7c31f
+ languageName: node
+ linkType: hard
+
"rst-selector-parser@npm:^2.2.3":
version: 2.2.3
resolution: "rst-selector-parser@npm:2.2.3"
languageName: node
linkType: hard
-"run-async@npm:^2.2.0, run-async@npm:^2.4.0":
- version: 2.4.1
- resolution: "run-async@npm:2.4.1"
- checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797
- languageName: node
- linkType: hard
-
"run-parallel@npm:^1.1.9":
version: 1.2.0
resolution: "run-parallel@npm:1.2.0"
languageName: node
linkType: hard
-"rxjs@npm:^6.5.3, rxjs@npm:^6.5.5, rxjs@npm:^6.6.0":
+"rxjs@npm:^6.5.5":
version: 6.6.7
resolution: "rxjs@npm:6.6.7"
dependencies:
version: 7.8.1
resolution: "rxjs@npm:7.8.1"
dependencies:
- tslib: ^2.1.0
- checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119
+ tslib: ^2.1.0
+ checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119
+ languageName: node
+ linkType: hard
+
+"safe-array-concat@npm:^1.1.2":
+ version: 1.1.2
+ resolution: "safe-array-concat@npm:1.1.2"
+ dependencies:
+ call-bind: ^1.0.7
+ get-intrinsic: ^1.2.4
+ has-symbols: ^1.0.3
+ isarray: ^2.0.5
+ checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4
languageName: node
linkType: hard
languageName: node
linkType: hard
-"safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
languageName: node
linkType: hard
+"safe-regex-test@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "safe-regex-test@npm:1.0.3"
+ dependencies:
+ call-bind: ^1.0.6
+ es-errors: ^1.3.0
+ is-regex: ^1.1.4
+ checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489
+ languageName: node
+ linkType: hard
+
"safe-regex@npm:^1.1.0":
version: 1.1.0
resolution: "safe-regex@npm:1.1.0"
languageName: node
linkType: hard
-"sass-graph@npm:^2.2.4":
- version: 2.2.6
- resolution: "sass-graph@npm:2.2.6"
- dependencies:
- glob: ^7.0.0
- lodash: ^4.0.0
- scss-tokenizer: ^0.2.3
- yargs: ^7.0.0
- bin:
- sassgraph: bin/sassgraph
- checksum: 1fb1719c659fdea00a9f55be9722c5902c3d1f1a0919d2e5ceb8a318064f2b214981d98b7d7fecaafc25f522302f919a948351e4ae1d1680b9c045d563550a93
- languageName: node
- linkType: hard
-
"sass-graph@npm:^4.0.1":
version: 4.0.1
resolution: "sass-graph@npm:4.0.1"
languageName: node
linkType: hard
-"sax@npm:^1.2.4, sax@npm:~1.2.4":
+"sax@npm:~1.2.4":
version: 1.2.4
resolution: "sax@npm:1.2.4"
checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe
languageName: node
linkType: hard
-"saxes@npm:^3.1.9":
- version: 3.1.11
- resolution: "saxes@npm:3.1.11"
+"saxes@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "saxes@npm:5.0.1"
dependencies:
- xmlchars: ^2.1.1
- checksum: 3b69918c013fffae51c561f629a0f620c02dba70f762dab38f3cd92676dfe5edf1f0a523ca567882838f1a80e26e4671a8c2c689afa05c68f45a78261445aba0
+ xmlchars: ^2.2.0
+ checksum: 5636b55cf15f7cf0baa73f2797bf992bdcf75d1b39d82c0aa4608555c774368f6ac321cb641fd5f3d3ceb87805122cd47540da6a7b5960fe0dbdb8f8c263f000
languageName: node
linkType: hard
languageName: node
linkType: hard
-"schema-utils@npm:^2.5.0, schema-utils@npm:^2.6.0, schema-utils@npm:^2.6.1, schema-utils@npm:^2.6.5, schema-utils@npm:^2.6.6":
+"schema-utils@npm:^2.6.1, schema-utils@npm:^2.6.5, schema-utils@npm:^2.7.0, schema-utils@npm:^2.7.1":
version: 2.7.1
resolution: "schema-utils@npm:2.7.1"
dependencies:
languageName: node
linkType: hard
-"scss-tokenizer@npm:^0.2.3":
- version: 0.2.3
- resolution: "scss-tokenizer@npm:0.2.3"
+"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1":
+ version: 3.3.0
+ resolution: "schema-utils@npm:3.3.0"
dependencies:
- js-base64: ^2.1.8
- source-map: ^0.4.2
- checksum: ad78bba4466ff7aa6449931a57a980479223c3cad9eccf2180251c2f6fce5b3d982a51f924709e0a0bb2d328dedbb2fad0ccb2a5fdc175513a27cb4e8cf8cfd2
+ "@types/json-schema": ^7.0.8
+ ajv: ^6.12.5
+ ajv-keywords: ^3.5.2
+ checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0
languageName: node
linkType: hard
languageName: node
linkType: hard
-"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.5.1, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1":
+"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.0, semver@npm:^5.7.1":
version: 5.7.2
resolution: "semver@npm:5.7.2"
bin:
languageName: node
linkType: hard
-"semver@npm:6.3.0":
- version: 6.3.0
- resolution: "semver@npm:6.3.0"
- bin:
- semver: ./bin/semver.js
- checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9
- languageName: node
- linkType: hard
-
-"semver@npm:7.0.0":
- version: 7.0.0
- resolution: "semver@npm:7.0.0"
+"semver@npm:7.3.2":
+ version: 7.3.2
+ resolution: "semver@npm:7.3.2"
bin:
semver: bin/semver.js
- checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778
+ checksum: 692f4900dadb43919614b0df9af23fe05743051cda0d1735b5e4d76f93c9e43a266fae73cfc928f5d1489f022c5c0e65dfd2900fcf5b1839c4e9a239729afa7b
languageName: node
linkType: hard
-"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.2.0, semver@npm:^6.3.0":
+"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1":
version: 6.3.1
resolution: "semver@npm:6.3.1"
bin:
languageName: node
linkType: hard
-"semver@npm:^7.3.4, semver@npm:^7.3.5":
- version: 7.5.4
- resolution: "semver@npm:7.5.4"
+"semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.5.3":
+ version: 7.6.0
+ resolution: "semver@npm:7.6.0"
dependencies:
lru-cache: ^6.0.0
bin:
semver: bin/semver.js
- checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
+ checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c
languageName: node
linkType: hard
-"semver@npm:^7.5.3":
- version: 7.6.0
- resolution: "semver@npm:7.6.0"
+"semver@npm:^7.3.4, semver@npm:^7.3.5":
+ version: 7.5.4
+ resolution: "semver@npm:7.5.4"
dependencies:
lru-cache: ^6.0.0
bin:
semver: bin/semver.js
- checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c
+ checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
languageName: node
linkType: hard
-"send@npm:0.17.1":
- version: 0.17.1
- resolution: "send@npm:0.17.1"
+"send@npm:0.18.0":
+ version: 0.18.0
+ resolution: "send@npm:0.18.0"
dependencies:
debug: 2.6.9
- depd: ~1.1.2
- destroy: ~1.0.4
+ depd: 2.0.0
+ destroy: 1.2.0
encodeurl: ~1.0.2
escape-html: ~1.0.3
etag: ~1.8.1
fresh: 0.5.2
- http-errors: ~1.7.2
+ http-errors: 2.0.0
mime: 1.6.0
- ms: 2.1.1
- on-finished: ~2.3.0
+ ms: 2.1.3
+ on-finished: 2.4.1
range-parser: ~1.2.1
- statuses: ~1.5.0
- checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0
+ statuses: 2.0.1
+ checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
languageName: node
linkType: hard
languageName: node
linkType: hard
+"serialize-javascript@npm:^5.0.1":
+ version: 5.0.1
+ resolution: "serialize-javascript@npm:5.0.1"
+ dependencies:
+ randombytes: ^2.1.0
+ checksum: bb45a427690c3d2711e28499de0fbf25036af1e23c63c6a9237ed0aa572fd0941fcdefe50a2dccf26d9df8c8b86ae38659e19d8ba7afd3fbc1f1c7539a2a48d2
+ languageName: node
+ linkType: hard
+
"serve-index@npm:^1.9.1":
version: 1.9.1
resolution: "serve-index@npm:1.9.1"
languageName: node
linkType: hard
-"serve-static@npm:1.14.1":
- version: 1.14.1
- resolution: "serve-static@npm:1.14.1"
+"serve-static@npm:1.15.0":
+ version: 1.15.0
+ resolution: "serve-static@npm:1.15.0"
dependencies:
encodeurl: ~1.0.2
escape-html: ~1.0.3
parseurl: ~1.3.3
- send: 0.17.1
- checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8
+ send: 0.18.0
+ checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
languageName: node
linkType: hard
languageName: node
linkType: hard
+"set-function-length@npm:^1.2.1":
+ version: 1.2.2
+ resolution: "set-function-length@npm:1.2.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ function-bind: ^1.1.2
+ get-intrinsic: ^1.2.4
+ gopd: ^1.0.1
+ has-property-descriptors: ^1.0.2
+ checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72
+ languageName: node
+ linkType: hard
+
+"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2":
+ version: 2.0.2
+ resolution: "set-function-name@npm:2.0.2"
+ dependencies:
+ define-data-property: ^1.1.4
+ es-errors: ^1.3.0
+ functions-have-names: ^1.2.3
+ has-property-descriptors: ^1.0.2
+ checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f
+ languageName: node
+ linkType: hard
+
"set-value@npm:2.0.1, set-value@npm:^2.0.0, set-value@npm:^2.0.1":
version: 2.0.1
resolution: "set-value@npm:2.0.1"
languageName: node
linkType: hard
-"setprototypeof@npm:1.1.1":
- version: 1.1.1
- resolution: "setprototypeof@npm:1.1.1"
- checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b
+"setprototypeof@npm:1.2.0":
+ version: 1.2.0
+ resolution: "setprototypeof@npm:1.2.0"
+ checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89
languageName: node
linkType: hard
languageName: node
linkType: hard
-"shallow-clone@npm:^0.1.2":
- version: 0.1.2
- resolution: "shallow-clone@npm:0.1.2"
- dependencies:
- is-extendable: ^0.1.1
- kind-of: ^2.0.1
- lazy-cache: ^0.2.3
- mixin-object: ^2.0.1
- checksum: cc4c85c6e42186fec33a81a85622c48dbcfdf280f3a7bd0800b4de57df8e365a8760aa2e31dd79df365b317dddb2fd0bbd92be0aab14dbd2de6a65992eab2177
- languageName: node
- linkType: hard
-
"shallow-clone@npm:^3.0.0":
version: 3.0.1
resolution: "shallow-clone@npm:3.0.1"
languageName: node
linkType: hard
+"side-channel@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "side-channel@npm:1.0.6"
+ dependencies:
+ call-bind: ^1.0.7
+ es-errors: ^1.3.0
+ get-intrinsic: ^1.2.4
+ object-inspect: ^1.13.1
+ checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97
+ languageName: node
+ linkType: hard
+
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2":
version: 3.0.3
resolution: "signal-exit@npm:3.0.3"
languageName: node
linkType: hard
-"slash@npm:^1.0.0":
- version: 1.0.0
- resolution: "slash@npm:1.0.0"
- checksum: 4b6e21b1fba6184a7e2efb1dd173f692d8a845584c1bbf9dc818ff86f5a52fc91b413008223d17cc684604ee8bb9263a420b1182027ad9762e35388434918860
- languageName: node
- linkType: hard
-
-"slash@npm:^2.0.0":
- version: 2.0.0
- resolution: "slash@npm:2.0.0"
- checksum: 512d4350735375bd11647233cb0e2f93beca6f53441015eea241fe784d8068281c3987fbaa93e7ef1c38df68d9c60013045c92837423c69115297d6169aa85e6
- languageName: node
- linkType: hard
-
"slash@npm:^3.0.0":
version: 3.0.0
resolution: "slash@npm:3.0.0"
languageName: node
linkType: hard
-"slice-ansi@npm:^2.1.0":
- version: 2.1.0
- resolution: "slice-ansi@npm:2.1.0"
- dependencies:
- ansi-styles: ^3.2.0
- astral-regex: ^1.0.0
- is-fullwidth-code-point: ^2.0.0
- checksum: 4e82995aa59cef7eb03ef232d73c2239a15efa0ace87a01f3012ebb942e963fbb05d448ce7391efcd52ab9c32724164aba2086f5143e0445c969221dde3b6b1e
- languageName: node
- linkType: hard
-
"slice-ansi@npm:^3.0.0":
version: 3.0.0
resolution: "slice-ansi@npm:3.0.0"
languageName: node
linkType: hard
+"source-map-js@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "source-map-js@npm:1.2.0"
+ checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97
+ languageName: node
+ linkType: hard
+
"source-map-resolve@npm:^0.5.0, source-map-resolve@npm:^0.5.2":
version: 0.5.3
resolution: "source-map-resolve@npm:0.5.3"
languageName: node
linkType: hard
-"source-map-support@npm:^0.4.15":
- version: 0.4.18
- resolution: "source-map-support@npm:0.4.18"
- dependencies:
- source-map: ^0.5.6
- checksum: 669aa7e992fec586fac0ba9a8dea8ce81b7328f92806335f018ffac5709afb2920e3870b4e56c68164282607229f04b8bbcf5d0e5c845eb1b5119b092e7585c0
- languageName: node
- linkType: hard
-
"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12":
version: 0.5.19
resolution: "source-map-support@npm:0.5.19"
languageName: node
linkType: hard
+"source-map-support@npm:~0.5.20":
+ version: 0.5.21
+ resolution: "source-map-support@npm:0.5.21"
+ dependencies:
+ buffer-from: ^1.0.0
+ source-map: ^0.6.0
+ checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137
+ languageName: node
+ linkType: hard
+
"source-map-url@npm:^0.4.0":
version: 0.4.1
resolution: "source-map-url@npm:0.4.1"
languageName: node
linkType: hard
-"source-map@npm:^0.4.2":
- version: 0.4.4
- resolution: "source-map@npm:0.4.4"
- dependencies:
- amdefine: ">=0.0.4"
- checksum: b31992fcb4a2a6c335617f187bd36f392896dfcc111830ebdb8b716923cf6554b665833b975fc998bdf3a63881b2c8b4c5c34fda0280357b8c18fe6aa5d148ea
- languageName: node
- linkType: hard
-
-"source-map@npm:^0.5.0, source-map@npm:^0.5.6, source-map@npm:^0.5.7":
+"source-map@npm:^0.5.0, source-map@npm:^0.5.6":
version: 0.5.7
resolution: "source-map@npm:0.5.7"
checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d
languageName: node
linkType: hard
+"sourcemap-codec@npm:^1.4.8":
+ version: 1.4.8
+ resolution: "sourcemap-codec@npm:1.4.8"
+ checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316
+ languageName: node
+ linkType: hard
+
"spdx-correct@npm:^3.0.0":
version: 3.1.1
resolution: "spdx-correct@npm:3.1.1"
languageName: node
linkType: hard
-"ssri@npm:^7.0.0":
- version: 7.1.1
- resolution: "ssri@npm:7.1.1"
- dependencies:
- figgy-pudding: ^3.5.1
- minipass: ^3.1.1
- checksum: 8bdb3c198a3cebda54344b3cd9599338c18a4b29f1c857c0ab98cb39ff11a36b4cb6ea5a388c22bd71ac1ae6d8129103336173f77487d94d772eeb9aa0c8545f
- languageName: node
- linkType: hard
-
"ssri@npm:^8.0.0, ssri@npm:^8.0.1":
version: 8.0.1
resolution: "ssri@npm:8.0.1"
languageName: node
linkType: hard
-"stack-utils@npm:^1.0.1":
- version: 1.0.5
- resolution: "stack-utils@npm:1.0.5"
+"stack-utils@npm:^2.0.2":
+ version: 2.0.6
+ resolution: "stack-utils@npm:2.0.6"
dependencies:
escape-string-regexp: ^2.0.0
- checksum: f82baf8d89536252a55c76866d5be3d04c96b09693a8d2ab3794b9fdec3674e05bd3f3d19345093e2cbba116a1f8f413858e0537bc3c81c605249261c3d26182
+ checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7
+ languageName: node
+ linkType: hard
+
+"stackframe@npm:^1.3.4":
+ version: 1.3.4
+ resolution: "stackframe@npm:1.3.4"
+ checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d
+ languageName: node
+ linkType: hard
+
+"static-eval@npm:2.0.2":
+ version: 2.0.2
+ resolution: "static-eval@npm:2.0.2"
+ dependencies:
+ escodegen: ^1.8.1
+ checksum: 335a923c5ccb29add404ac23d0a55c0da6cee3071f6f67a7053aeac0dedc6dbfc53ac9269e9c25f403f5b7603a291ef47d7114f99bde241184f7aa3f9286dc32
languageName: node
linkType: hard
languageName: node
linkType: hard
-"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0":
+"statuses@npm:2.0.1":
+ version: 2.0.1
+ resolution: "statuses@npm:2.0.1"
+ checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb
+ languageName: node
+ linkType: hard
+
+"statuses@npm:>= 1.4.0 < 2":
version: 1.5.0
resolution: "statuses@npm:1.5.0"
checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c
languageName: node
linkType: hard
-"string-length@npm:^2.0.0":
- version: 2.0.0
- resolution: "string-length@npm:2.0.0"
- dependencies:
- astral-regex: ^1.0.0
- strip-ansi: ^4.0.0
- checksum: 3a339b63fd39d6a1077dfbbe3279545e1b67fa4b0a558906158cf0121632b280f34c8768ec7270fb25db732d6323eceb9c7254f6026509694b6a7533ca8cb89e
- languageName: node
- linkType: hard
-
-"string-length@npm:^3.1.0":
- version: 3.1.0
- resolution: "string-length@npm:3.1.0"
+"string-length@npm:^4.0.1":
+ version: 4.0.2
+ resolution: "string-length@npm:4.0.2"
dependencies:
- astral-regex: ^1.0.0
- strip-ansi: ^5.2.0
- checksum: b09ccacc2f96ba3ade9f2b3163901e05f668a2b14bc353853165c1f3b19185421ac004e9957b62827083d163e049c41a1b15170e252eaf44fdd686553c372714
+ char-regex: ^1.0.2
+ strip-ansi: ^6.0.0
+ checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505
languageName: node
linkType: hard
-"string-width@npm:^1.0.1, string-width@npm:^1.0.2":
- version: 1.0.2
- resolution: "string-width@npm:1.0.2"
- dependencies:
- code-point-at: ^1.0.0
- is-fullwidth-code-point: ^1.0.0
- strip-ansi: ^3.0.0
- checksum: 5c79439e95bc3bd7233a332c5f5926ab2ee90b23816ed4faa380ce3b2576d7800b0a5bb15ae88ed28737acc7ea06a518c2eef39142dd727adad0e45c776cd37e
+"string-natural-compare@npm:^3.0.1":
+ version: 3.0.1
+ resolution: "string-natural-compare@npm:3.0.1"
+ checksum: 65910d9995074086e769a68728395effbba9b7186be5b4c16a7fad4f4ef50cae95ca16e3e9086e019cbb636ae8daac9c7b8fe91b5f21865c5c0f26e3c0725406
languageName: node
linkType: hard
languageName: node
linkType: hard
-"string.prototype.matchall@npm:^4.0.2":
- version: 4.0.5
- resolution: "string.prototype.matchall@npm:4.0.5"
+"string.prototype.matchall@npm:^4.0.10":
+ version: 4.0.11
+ resolution: "string.prototype.matchall@npm:4.0.11"
dependencies:
- call-bind: ^1.0.2
- define-properties: ^1.1.3
- es-abstract: ^1.18.2
- get-intrinsic: ^1.1.1
- has-symbols: ^1.0.2
- internal-slot: ^1.0.3
- regexp.prototype.flags: ^1.3.1
- side-channel: ^1.0.4
- checksum: 0a9d64661ecf089e7712aed18a4b0d7e4093ae1dfc6d8134747a98271564065a2a667a3408fced4a77137528b3b2c0efe9d37868acae000ee13d0857a3d0f430
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.2
+ es-errors: ^1.3.0
+ es-object-atoms: ^1.0.0
+ get-intrinsic: ^1.2.4
+ gopd: ^1.0.1
+ has-symbols: ^1.0.3
+ internal-slot: ^1.0.7
+ regexp.prototype.flags: ^1.5.2
+ set-function-name: ^2.0.2
+ side-channel: ^1.0.6
+ checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae
languageName: node
linkType: hard
languageName: node
linkType: hard
+"string.prototype.trim@npm:^1.2.9":
+ version: 1.2.9
+ resolution: "string.prototype.trim@npm:1.2.9"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-abstract: ^1.23.0
+ es-object-atoms: ^1.0.0
+ checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193
+ languageName: node
+ linkType: hard
+
"string.prototype.trimend@npm:^1.0.4":
version: 1.0.4
resolution: "string.prototype.trimend@npm:1.0.4"
languageName: node
linkType: hard
+"string.prototype.trimend@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "string.prototype.trimend@npm:1.0.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd
+ languageName: node
+ linkType: hard
+
"string.prototype.trimstart@npm:^1.0.4":
version: 1.0.4
resolution: "string.prototype.trimstart@npm:1.0.4"
languageName: node
linkType: hard
+"string.prototype.trimstart@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "string.prototype.trimstart@npm:1.0.8"
+ dependencies:
+ call-bind: ^1.0.7
+ define-properties: ^1.2.1
+ es-object-atoms: ^1.0.0
+ checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96
+ languageName: node
+ linkType: hard
+
"string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1":
version: 1.3.0
resolution: "string_decoder@npm:1.3.0"
languageName: node
linkType: hard
-"strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1":
+"strip-ansi@npm:^3.0.1":
version: 3.0.1
resolution: "strip-ansi@npm:3.0.1"
dependencies:
languageName: node
linkType: hard
-"strip-ansi@npm:^4.0.0":
- version: 4.0.0
- resolution: "strip-ansi@npm:4.0.0"
- dependencies:
- ansi-regex: ^3.0.0
- checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca
- languageName: node
- linkType: hard
-
"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.1.0, strip-ansi@npm:^5.2.0":
version: 5.2.0
resolution: "strip-ansi@npm:5.2.0"
languageName: node
linkType: hard
-"strip-bom@npm:^2.0.0":
- version: 2.0.0
- resolution: "strip-bom@npm:2.0.0"
- dependencies:
- is-utf8: ^0.2.0
- checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944
- languageName: node
- linkType: hard
-
"strip-bom@npm:^3.0.0":
version: 3.0.0
resolution: "strip-bom@npm:3.0.0"
languageName: node
linkType: hard
+"strip-bom@npm:^4.0.0":
+ version: 4.0.0
+ resolution: "strip-bom@npm:4.0.0"
+ checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3
+ languageName: node
+ linkType: hard
+
"strip-comments@npm:^1.0.2":
version: 1.0.2
resolution: "strip-comments@npm:1.0.2"
languageName: node
linkType: hard
-"strip-indent@npm:^1.0.1":
- version: 1.0.1
- resolution: "strip-indent@npm:1.0.1"
- dependencies:
- get-stdin: ^4.0.1
- bin:
- strip-indent: cli.js
- checksum: 81ad9a0b8a558bdbd05b66c6c437b9ab364aa2b5479ed89969ca7908e680e21b043d40229558c434b22b3d640622e39b66288e0456d601981ac9289de9700fbd
- languageName: node
- linkType: hard
-
"strip-indent@npm:^3.0.0":
version: 3.0.0
resolution: "strip-indent@npm:3.0.0"
languageName: node
linkType: hard
-"strip-json-comments@npm:^3.0.1":
+"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443
languageName: node
linkType: hard
-"style-loader@npm:0.23.1":
- version: 0.23.1
- resolution: "style-loader@npm:0.23.1"
+"style-loader@npm:1.3.0":
+ version: 1.3.0
+ resolution: "style-loader@npm:1.3.0"
dependencies:
- loader-utils: ^1.1.0
- schema-utils: ^1.0.0
- checksum: 0a513a2d881e88bbfd574750df3dc61f57424684458d94cb6ae41e635d03abfa8974bb591eab9051650082c5f5502994dc17c7ca9fb0fc9e8d31f651f6737479
+ loader-utils: ^2.0.0
+ schema-utils: ^2.7.0
+ peerDependencies:
+ webpack: ^4.0.0 || ^5.0.0
+ checksum: 1be9e8705307f5b8eb89e80f3703fa27296dccec349d790eace7aabe212f08c7c8f3ea6b6cb97bc53e82fbebfb9aa0689259671a8315f4655e24a850781e062a
languageName: node
linkType: hard
languageName: node
linkType: hard
-"supports-color@npm:^2.0.0":
- version: 2.0.0
- resolution: "supports-color@npm:2.0.0"
- checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0
- languageName: node
- linkType: hard
-
"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
languageName: node
linkType: hard
-"supports-color@npm:^8.1.1":
+"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1":
version: 8.1.1
resolution: "supports-color@npm:8.1.1"
dependencies:
languageName: node
linkType: hard
-"svg-parser@npm:^2.0.0":
+"supports-hyperlinks@npm:^2.0.0":
+ version: 2.3.0
+ resolution: "supports-hyperlinks@npm:2.3.0"
+ dependencies:
+ has-flag: ^4.0.0
+ supports-color: ^7.0.0
+ checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8
+ languageName: node
+ linkType: hard
+
+"supports-preserve-symlinks-flag@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
+ checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae
+ languageName: node
+ linkType: hard
+
+"svg-parser@npm:^2.0.2":
version: 2.0.4
resolution: "svg-parser@npm:2.0.4"
checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf
languageName: node
linkType: hard
-"symbol-tree@npm:^3.2.2":
+"symbol-tree@npm:^3.2.4":
version: 3.2.4
resolution: "symbol-tree@npm:3.2.4"
checksum: 6e8fc7e1486b8b54bea91199d9535bb72f10842e40c79e882fc94fb7b14b89866adf2fd79efa5ebb5b658bc07fb459ccce5ac0e99ef3d72f474e74aaf284029d
languageName: node
linkType: hard
-"table@npm:^5.2.3":
- version: 5.4.6
- resolution: "table@npm:5.4.6"
+"table@npm:^6.0.9":
+ version: 6.8.2
+ resolution: "table@npm:6.8.2"
dependencies:
- ajv: ^6.10.2
- lodash: ^4.17.14
- slice-ansi: ^2.1.0
- string-width: ^3.0.0
- checksum: 9e35d3efa788edc17237eef8852f8e4b9178efd65a7d115141777b2ee77df4b7796c05f4ed3712d858f98894ac5935a481ceeb6dcb9895e2f67a61cce0e63b6c
+ ajv: ^8.0.1
+ lodash.truncate: ^4.4.2
+ slice-ansi: ^4.0.0
+ string-width: ^4.2.3
+ strip-ansi: ^6.0.1
+ checksum: 61188652f53a980d1759ca460ca8dea5c5322aece3210457e7084882f053c2b6a870041295e08a82cb1d676e31b056406845d94b0abf3c79a4b104777bec413b
languageName: node
linkType: hard
linkType: hard
"tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2":
- version: 6.2.0
- resolution: "tar@npm:6.2.0"
+ version: 6.2.1
+ resolution: "tar@npm:6.2.1"
dependencies:
chownr: ^2.0.0
fs-minipass: ^2.0.0
minizlib: ^2.1.1
mkdirp: ^1.0.3
yallist: ^4.0.0
- checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c
+ checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c
languageName: node
linkType: hard
-"terser-webpack-plugin@npm:2.3.8":
- version: 2.3.8
- resolution: "terser-webpack-plugin@npm:2.3.8"
+"temp-dir@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "temp-dir@npm:1.0.0"
+ checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2
+ languageName: node
+ linkType: hard
+
+"tempy@npm:^0.3.0":
+ version: 0.3.0
+ resolution: "tempy@npm:0.3.0"
+ dependencies:
+ temp-dir: ^1.0.0
+ type-fest: ^0.3.1
+ unique-string: ^1.0.0
+ checksum: f81ef72a7ee6d512439af8d8891e4fc6595309451910d7ac9d760f1242a1f87272b2b97c830c8f74aaa93a3aa550483bb16db17e6345601f64d614d240edc322
+ languageName: node
+ linkType: hard
+
+"terminal-link@npm:^2.0.0":
+ version: 2.1.1
+ resolution: "terminal-link@npm:2.1.1"
+ dependencies:
+ ansi-escapes: ^4.2.1
+ supports-hyperlinks: ^2.0.0
+ checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f
+ languageName: node
+ linkType: hard
+
+"terser-webpack-plugin@npm:4.2.3":
+ version: 4.2.3
+ resolution: "terser-webpack-plugin@npm:4.2.3"
dependencies:
- cacache: ^13.0.1
+ cacache: ^15.0.5
find-cache-dir: ^3.3.1
- jest-worker: ^25.4.0
- p-limit: ^2.3.0
- schema-utils: ^2.6.6
- serialize-javascript: ^4.0.0
+ jest-worker: ^26.5.0
+ p-limit: ^3.0.2
+ schema-utils: ^3.0.0
+ serialize-javascript: ^5.0.1
source-map: ^0.6.1
- terser: ^4.6.12
+ terser: ^5.3.4
webpack-sources: ^1.4.3
peerDependencies:
webpack: ^4.0.0 || ^5.0.0
- checksum: a772d7d58a4730b619f71c4a8d7cf1fa90ded0d01b4fb9a094437c3380e3c35ce78caa030c2867a10cdd12527dfc2fb46bee949bd067ee0cd41e9890cbd85263
+ checksum: ec1b3a85e2645c57e359d5e4831f3e1d78eca2a0c94b156db70eb846ae35b5e6e98ad8784b12e153fc273e57445ce69d017075bbe9fc42868a258ef121f11537
languageName: node
linkType: hard
languageName: node
linkType: hard
-"terser@npm:^4.1.2, terser@npm:^4.6.12, terser@npm:^4.6.3":
+"terser@npm:^4.1.2, terser@npm:^4.6.2, terser@npm:^4.6.3":
version: 4.8.1
resolution: "terser@npm:4.8.1"
dependencies:
languageName: node
linkType: hard
-"test-exclude@npm:^5.2.3":
- version: 5.2.3
- resolution: "test-exclude@npm:5.2.3"
+"terser@npm:^5.3.4":
+ version: 5.30.3
+ resolution: "terser@npm:5.30.3"
dependencies:
- glob: ^7.1.3
+ "@jridgewell/source-map": ^0.3.3
+ acorn: ^8.8.2
+ commander: ^2.20.0
+ source-map-support: ~0.5.20
+ bin:
+ terser: bin/terser
+ checksum: 8c680ed32a948f806fade0969c52aab94b6de174e4a78610f5d3abf9993b161eb19b88b2ceadff09b153858727c02deb6709635e4bfbd519f67d54e0394e2983
+ languageName: node
+ linkType: hard
+
+"test-exclude@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "test-exclude@npm:6.0.0"
+ dependencies:
+ "@istanbuljs/schema": ^0.1.2
+ glob: ^7.1.4
minimatch: ^3.0.4
- read-pkg-up: ^4.0.0
- require-main-filename: ^2.0.0
- checksum: 3a67bee51b0afb0b7a51b649a7dacd920d929de2b3eccb52fa818f0b0bf2ebfced1d1a77a206b74f95c50f6682e313eedb8000cfdd5ac2f9cc6ed8a32fc4ff2e
+ checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28
languageName: node
linkType: hard
languageName: node
linkType: hard
-"throat@npm:^4.0.0":
- version: 4.1.0
- resolution: "throat@npm:4.1.0"
- checksum: 43519b0cea6d3b2a8fe056fcbc319e289037be67d2204d4d33513d20d6ee9da6255f7ba8c89e2ec8c97b0f188a910b8666def38d1058d2bf4a39613812c36d98
+"throat@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "throat@npm:5.0.0"
+ checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2
languageName: node
linkType: hard
languageName: node
linkType: hard
-"through@npm:^2.3.6, through@npm:^2.3.8":
+"through@npm:^2.3.8":
version: 2.3.8
resolution: "through@npm:2.3.8"
checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd
languageName: node
linkType: hard
-"tmp@npm:^0.0.33":
- version: 0.0.33
- resolution: "tmp@npm:0.0.33"
- dependencies:
- os-tmpdir: ~1.0.2
- checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28
- languageName: node
- linkType: hard
-
"tmp@npm:~0.2.1":
version: 0.2.1
resolution: "tmp@npm:0.2.1"
"to-arraybuffer@npm:^1.0.0":
version: 1.0.1
resolution: "to-arraybuffer@npm:1.0.1"
- checksum: 31433c10b388722729f5da04c6b2a06f40dc84f797bb802a5a171ced1e599454099c6c5bc5118f4b9105e7d049d3ad9d0f71182b77650e4fdb04539695489941
- languageName: node
- linkType: hard
-
-"to-fast-properties@npm:^1.0.3":
- version: 1.0.3
- resolution: "to-fast-properties@npm:1.0.3"
- checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580
+ checksum: 31433c10b388722729f5da04c6b2a06f40dc84f797bb802a5a171ced1e599454099c6c5bc5118f4b9105e7d049d3ad9d0f71182b77650e4fdb04539695489941
languageName: node
linkType: hard
languageName: node
linkType: hard
-"toidentifier@npm:1.0.0":
- version: 1.0.0
- resolution: "toidentifier@npm:1.0.0"
- checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e
+"toidentifier@npm:1.0.1":
+ version: 1.0.1
+ resolution: "toidentifier@npm:1.0.1"
+ checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45
languageName: node
linkType: hard
-"tough-cookie@npm:^2.3.3, tough-cookie@npm:^2.3.4, tough-cookie@npm:^2.5.0, tough-cookie@npm:~2.5.0":
+"tough-cookie@npm:^2.3.3, tough-cookie@npm:~2.5.0":
version: 2.5.0
resolution: "tough-cookie@npm:2.5.0"
dependencies:
languageName: node
linkType: hard
-"tough-cookie@npm:^4.1.3":
+"tough-cookie@npm:^4.0.0, tough-cookie@npm:^4.1.3":
version: 4.1.3
resolution: "tough-cookie@npm:4.1.3"
dependencies:
languageName: node
linkType: hard
-"tr46@npm:^1.0.1":
- version: 1.0.1
- resolution: "tr46@npm:1.0.1"
+"tr46@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "tr46@npm:2.1.0"
dependencies:
- punycode: ^2.1.0
- checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a
+ punycode: ^2.1.1
+ checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3
languageName: node
linkType: hard
languageName: node
linkType: hard
-"trim-newlines@npm:^1.0.0, trim-newlines@npm:^3.0.0":
+"trim-newlines@npm:^3.0.0":
version: 3.0.1
resolution: "trim-newlines@npm:3.0.1"
checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206
languageName: node
linkType: hard
-"trim-right@npm:^1.0.1":
- version: 1.0.1
- resolution: "trim-right@npm:1.0.1"
- checksum: 9120af534e006a7424a4f9358710e6e707887b6ccf7ea69e50d6ac6464db1fe22268400def01752f09769025d480395159778153fb98d4a2f6f40d4cf5d4f3b6
- languageName: node
- linkType: hard
-
-"true-case-path@npm:^1.0.2":
- version: 1.0.3
- resolution: "true-case-path@npm:1.0.3"
- dependencies:
- glob: ^7.1.2
- checksum: 2e2e3bf37b4b05db2e2a1d60329960a4aa697ad7a89bd97c66f5f4da83977897c29c704276e62bca62d055d8078065bc08a1c7a01f409de11c6592af8b442cbe
- languageName: node
- linkType: hard
-
"true-case-path@npm:^2.2.1":
version: 2.2.1
resolution: "true-case-path@npm:2.2.1"
languageName: node
linkType: hard
+"tryer@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "tryer@npm:1.0.1"
+ checksum: 1cf14d7f67c79613f054b569bfc9a89c7020d331573a812dfcf7437244e8f8e6eb6893b210cbd9cc217f67c1d72617f89793df231e4fe7d53634ed91cf3a89d1
+ languageName: node
+ linkType: hard
+
"ts-mock-imports@npm:1.3.7":
version: 1.3.7
resolution: "ts-mock-imports@npm:1.3.7"
languageName: node
linkType: hard
-"ts-pnp@npm:1.1.6":
- version: 1.1.6
- resolution: "ts-pnp@npm:1.1.6"
- peerDependenciesMeta:
- typescript:
- optional: true
- checksum: 78a05096ac3b1391bbb8d0b292d76d433f841fb3e698b9bdff961ca1f794e0644e3f0b93d78c6b42dd0e90ef34676cf164855e6010f7b71fed63f2102a387eb9
- languageName: node
- linkType: hard
-
-"ts-pnp@npm:^1.1.6":
+"ts-pnp@npm:1.2.0, ts-pnp@npm:^1.1.6":
version: 1.2.0
resolution: "ts-pnp@npm:1.2.0"
peerDependenciesMeta:
languageName: node
linkType: hard
+"tsconfig-paths@npm:^3.15.0":
+ version: 3.15.0
+ resolution: "tsconfig-paths@npm:3.15.0"
+ dependencies:
+ "@types/json5": ^0.0.29
+ json5: ^1.0.2
+ minimist: ^1.2.6
+ strip-bom: ^3.0.0
+ checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201
+ languageName: node
+ linkType: hard
+
"tslib@npm:2.5.0":
version: 2.5.0
resolution: "tslib@npm:2.5.0"
languageName: node
linkType: hard
-"tsutils@npm:^3.0.0, tsutils@npm:^3.21.0":
+"tsutils@npm:^3.0.0, tsutils@npm:^3.17.1, tsutils@npm:^3.21.0":
version: 3.21.0
resolution: "tsutils@npm:3.21.0"
dependencies:
languageName: node
linkType: hard
+"type-check@npm:^0.4.0, type-check@npm:~0.4.0":
+ version: 0.4.0
+ resolution: "type-check@npm:0.4.0"
+ dependencies:
+ prelude-ls: ^1.2.1
+ checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a
+ languageName: node
+ linkType: hard
+
"type-check@npm:~0.3.2":
version: 0.3.2
resolution: "type-check@npm:0.3.2"
languageName: node
linkType: hard
+"type-fest@npm:^0.20.2":
+ version: 0.20.2
+ resolution: "type-fest@npm:0.20.2"
+ checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73
+ languageName: node
+ linkType: hard
+
"type-fest@npm:^0.21.3":
version: 0.21.3
resolution: "type-fest@npm:0.21.3"
languageName: node
linkType: hard
+"type-fest@npm:^0.3.1":
+ version: 0.3.1
+ resolution: "type-fest@npm:0.3.1"
+ checksum: 347ff46c2285616635cb59f722e7f396bee81b8988b6fc1f1536b725077f2abf6ccfa22ab7a78e9b6ce7debea0e6614bbf5946cbec6674ec1bde12113af3a65c
+ languageName: node
+ linkType: hard
+
"type-fest@npm:^0.6.0":
version: 0.6.0
resolution: "type-fest@npm:0.6.0"
languageName: node
linkType: hard
-"type-is@npm:~1.6.17, type-is@npm:~1.6.18":
+"type-is@npm:~1.6.18":
version: 1.6.18
resolution: "type-is@npm:1.6.18"
dependencies:
languageName: node
linkType: hard
+"type@npm:^2.7.2":
+ version: 2.7.2
+ resolution: "type@npm:2.7.2"
+ checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4
+ languageName: node
+ linkType: hard
+
+"typed-array-buffer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "typed-array-buffer@npm:1.0.2"
+ dependencies:
+ call-bind: ^1.0.7
+ es-errors: ^1.3.0
+ is-typed-array: ^1.1.13
+ checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-length@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "typed-array-byte-length@npm:1.0.1"
+ dependencies:
+ call-bind: ^1.0.7
+ for-each: ^0.3.3
+ gopd: ^1.0.1
+ has-proto: ^1.0.3
+ is-typed-array: ^1.1.13
+ checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d
+ languageName: node
+ linkType: hard
+
+"typed-array-byte-offset@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "typed-array-byte-offset@npm:1.0.2"
+ dependencies:
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.7
+ for-each: ^0.3.3
+ gopd: ^1.0.1
+ has-proto: ^1.0.3
+ is-typed-array: ^1.1.13
+ checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67
+ languageName: node
+ linkType: hard
+
+"typed-array-length@npm:^1.0.6":
+ version: 1.0.6
+ resolution: "typed-array-length@npm:1.0.6"
+ dependencies:
+ call-bind: ^1.0.7
+ for-each: ^0.3.3
+ gopd: ^1.0.1
+ has-proto: ^1.0.3
+ is-typed-array: ^1.1.13
+ possible-typed-array-names: ^1.0.0
+ checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c
+ languageName: node
+ linkType: hard
+
+"typedarray-to-buffer@npm:^3.1.5":
+ version: 3.1.5
+ resolution: "typedarray-to-buffer@npm:3.1.5"
+ dependencies:
+ is-typedarray: ^1.0.0
+ checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60
+ languageName: node
+ linkType: hard
+
"typedarray@npm:^0.0.6":
version: 0.0.6
resolution: "typedarray@npm:0.0.6"
languageName: node
linkType: hard
-"unicode-canonical-property-names-ecmascript@npm:^1.0.4":
- version: 1.0.4
- resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4"
- checksum: cc1973b18d0e1a151711e5551f87f4b3086c4f542cd5142aa691307d5720fd725fa7d36c24e12e944e108b91c72554237b0c236772d35592839434da5506c40f
+"unbox-primitive@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "unbox-primitive@npm:1.0.2"
+ dependencies:
+ call-bind: ^1.0.2
+ has-bigints: ^1.0.2
+ has-symbols: ^1.0.3
+ which-boxed-primitive: ^1.0.2
+ checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9
languageName: node
linkType: hard
-"unicode-match-property-ecmascript@npm:^1.0.4":
- version: 1.0.4
- resolution: "unicode-match-property-ecmascript@npm:1.0.4"
+"underscore@npm:1.12.1":
+ version: 1.12.1
+ resolution: "underscore@npm:1.12.1"
+ checksum: ec327603aa112b99fe9d74cd9bf3b3b7451465a9d2610ceab269a532e3f191650ab017903be34dc86fe406a11d04d8905a3b04dd4c129493e51bee09a3f3074c
+ languageName: node
+ linkType: hard
+
+"unicode-canonical-property-names-ecmascript@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0"
+ checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45
+ languageName: node
+ linkType: hard
+
+"unicode-match-property-ecmascript@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "unicode-match-property-ecmascript@npm:2.0.0"
dependencies:
- unicode-canonical-property-names-ecmascript: ^1.0.4
- unicode-property-aliases-ecmascript: ^1.0.4
- checksum: 08e269fac71b5ace0f8331df9e87b9b533fe97b00c43ea58de69ae81816581490f846050e0c472279a3e7434524feba99915a93816f90dbbc0a30bcbd082da88
+ unicode-canonical-property-names-ecmascript: ^2.0.0
+ unicode-property-aliases-ecmascript: ^2.0.0
+ checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a
languageName: node
linkType: hard
-"unicode-match-property-value-ecmascript@npm:^1.2.0":
- version: 1.2.0
- resolution: "unicode-match-property-value-ecmascript@npm:1.2.0"
- checksum: 2e663cfec8e2cf317b69613566314979f717034ea8f58a237dd63234795044a87337410064fe839774d71e1d7e12195520e9edd69ed8e28f2a9eb28a2db38595
+"unicode-match-property-value-ecmascript@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "unicode-match-property-value-ecmascript@npm:2.1.0"
+ checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220
languageName: node
linkType: hard
-"unicode-property-aliases-ecmascript@npm:^1.0.4":
- version: 1.1.0
- resolution: "unicode-property-aliases-ecmascript@npm:1.1.0"
- checksum: 1a96dc462d251bb1c5237f7bc77956b29f01cefce7f3e7448430742930961557c3d1515a9669715ebb06209bf01072e2f78ba1627247017daa84346414bc02f1
+"unicode-property-aliases-ecmascript@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "unicode-property-aliases-ecmascript@npm:2.1.0"
+ checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b
languageName: node
linkType: hard
languageName: node
linkType: hard
+"unique-string@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "unique-string@npm:1.0.0"
+ dependencies:
+ crypto-random-string: ^1.0.0
+ checksum: 588f16bd4ec99b5130f237793d1a5694156adde20460366726573238e41e93b739b87987e863792aeb2392b26f8afb292490ace119c82ed12c46816c9c859f5f
+ languageName: node
+ linkType: hard
+
"universalify@npm:^0.1.0":
version: 0.1.2
resolution: "universalify@npm:0.1.2"
languageName: node
linkType: hard
-"upath@npm:^1.1.1":
+"upath@npm:^1.1.1, upath@npm:^1.1.2, upath@npm:^1.2.0":
version: 1.2.0
resolution: "upath@npm:1.2.0"
checksum: 4c05c094797cb733193a0784774dbea5b1889d502fc9f0572164177e185e4a59ba7099bf0b0adf945b232e2ac60363f9bf18aac9b2206fb99cbef971a8455445
languageName: node
linkType: hard
-"url-loader@npm:2.3.0":
- version: 2.3.0
- resolution: "url-loader@npm:2.3.0"
+"url-loader@npm:4.1.1":
+ version: 4.1.1
+ resolution: "url-loader@npm:4.1.1"
dependencies:
- loader-utils: ^1.2.3
- mime: ^2.4.4
- schema-utils: ^2.5.0
+ loader-utils: ^2.0.0
+ mime-types: ^2.1.27
+ schema-utils: ^3.0.0
peerDependencies:
file-loader: "*"
- webpack: ^4.0.0
+ webpack: ^4.0.0 || ^5.0.0
peerDependenciesMeta:
file-loader:
optional: true
- checksum: c0a8a6e728331e2189a6538373b9ce4b5589389805c4e98a0386ee5d18cc4ba4c5dec5514d8c852dd533b857461c30c3efc135ed07b6b31a96c5a6fb812a4757
+ checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd
languageName: node
linkType: hard
languageName: node
linkType: hard
-"util.promisify@npm:^1.0.0":
- version: 1.1.1
- resolution: "util.promisify@npm:1.1.1"
- dependencies:
- call-bind: ^1.0.0
- define-properties: ^1.1.3
- for-each: ^0.3.3
- has-symbols: ^1.0.1
- object.getownpropertydescriptors: ^2.1.1
- checksum: ea371c30b90576862487ae4efd7182aa5855019549a4019d82629acc2709e8ccb0f38944403eebec622fff8ebb44ac3f46a52d745d5f543d30606132a4905f96
- languageName: node
- linkType: hard
-
"util.promisify@npm:~1.0.0":
version: 1.0.1
resolution: "util.promisify@npm:1.0.1"
languageName: node
linkType: hard
-"uuid@npm:^8.3.2":
+"uuid@npm:^8.3.0, uuid@npm:^8.3.2":
version: 8.3.2
resolution: "uuid@npm:8.3.2"
bin:
languageName: node
linkType: hard
+"v8-to-istanbul@npm:^7.0.0":
+ version: 7.1.2
+ resolution: "v8-to-istanbul@npm:7.1.2"
+ dependencies:
+ "@types/istanbul-lib-coverage": ^2.0.1
+ convert-source-map: ^1.6.0
+ source-map: ^0.7.3
+ checksum: e52b48764f55aed62ff87f2b5f710c874f992cd1313eac8f438bf65aeeb0689153d85bb76e39514fd90ba3521d6ebea929a8ae1339b6d7b0cf18fb0ed13d8b40
+ languageName: node
+ linkType: hard
+
"validate-npm-package-license@npm:^3.0.1":
version: 3.0.4
resolution: "validate-npm-package-license@npm:3.0.4"
languageName: node
linkType: hard
-"w3c-hr-time@npm:^1.0.1":
+"w3c-hr-time@npm:^1.0.2":
version: 1.0.2
resolution: "w3c-hr-time@npm:1.0.2"
dependencies:
languageName: node
linkType: hard
-"w3c-xmlserializer@npm:^1.1.2":
- version: 1.1.2
- resolution: "w3c-xmlserializer@npm:1.1.2"
+"w3c-xmlserializer@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "w3c-xmlserializer@npm:2.0.0"
dependencies:
- domexception: ^1.0.1
- webidl-conversions: ^4.0.2
xml-name-validator: ^3.0.0
- checksum: 1683e083d0dfc1529988f8956510a3a26e90738b41c4df0c7eb95283bfbeabeb492308117dcd32afef2a141e2a959ddf10ce562983d91b9f474a530b9dcdd337
+ checksum: ae25c51cf71f1fb2516df1ab33a481f83461a117565b95e3d0927432522323f93b1b2846cbb60196d337970c421adb604fc2d0d180c6a47a839da01db5b9973b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"watchpack@npm:^1.6.0":
+"watchpack@npm:^1.7.4":
version: 1.7.5
resolution: "watchpack@npm:1.7.5"
dependencies:
languageName: node
linkType: hard
-"webidl-conversions@npm:^4.0.2":
- version: 4.0.2
- resolution: "webidl-conversions@npm:4.0.2"
- checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374
+"webidl-conversions@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "webidl-conversions@npm:5.0.0"
+ checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69
+ languageName: node
+ linkType: hard
+
+"webidl-conversions@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "webidl-conversions@npm:6.1.0"
+ checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb
languageName: node
linkType: hard
languageName: node
linkType: hard
-"webpack-sources@npm:^1.1.0, webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1, webpack-sources@npm:^1.4.3":
+"webpack-sources@npm:^1.1.0, webpack-sources@npm:^1.3.0, webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1, webpack-sources@npm:^1.4.3":
version: 1.4.3
resolution: "webpack-sources@npm:1.4.3"
dependencies:
languageName: node
linkType: hard
-"webpack@npm:4.42.0":
- version: 4.42.0
- resolution: "webpack@npm:4.42.0"
+"webpack@npm:4.44.2":
+ version: 4.44.2
+ resolution: "webpack@npm:4.44.2"
dependencies:
- "@webassemblyjs/ast": 1.8.5
- "@webassemblyjs/helper-module-context": 1.8.5
- "@webassemblyjs/wasm-edit": 1.8.5
- "@webassemblyjs/wasm-parser": 1.8.5
- acorn: ^6.2.1
+ "@webassemblyjs/ast": 1.9.0
+ "@webassemblyjs/helper-module-context": 1.9.0
+ "@webassemblyjs/wasm-edit": 1.9.0
+ "@webassemblyjs/wasm-parser": 1.9.0
+ acorn: ^6.4.1
ajv: ^6.10.2
ajv-keywords: ^3.4.1
chrome-trace-event: ^1.0.2
- enhanced-resolve: ^4.1.0
+ enhanced-resolve: ^4.3.0
eslint-scope: ^4.0.3
json-parse-better-errors: ^1.0.2
loader-runner: ^2.4.0
loader-utils: ^1.2.3
memory-fs: ^0.4.1
micromatch: ^3.1.10
- mkdirp: ^0.5.1
+ mkdirp: ^0.5.3
neo-async: ^2.6.1
node-libs-browser: ^2.2.1
schema-utils: ^1.0.0
tapable: ^1.1.3
terser-webpack-plugin: ^1.4.3
- watchpack: ^1.6.0
+ watchpack: ^1.7.4
webpack-sources: ^1.4.1
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ webpack-command:
+ optional: true
bin:
webpack: bin/webpack.js
- checksum: c297519655f431d749abf0383a0c565d3fdad14baef70fc96b09285f1da6cdad22b24f7f1974ef07314f0d088235ad2e26090ebd497fb4b7fbe5e8372117d734
+ checksum: 3d42ee6af7a0ff14fc00136d02f4a36381fd5b6ad0636b95a8b83e6d99bc7e02f888f4994c095ae986e567033fe7bb1d445e27afe49d2872b8fe5c3a57d20de6
languageName: node
linkType: hard
languageName: node
linkType: hard
-"whatwg-encoding@npm:^1.0.1, whatwg-encoding@npm:^1.0.3, whatwg-encoding@npm:^1.0.5":
+"whatwg-encoding@npm:^1.0.5":
version: 1.0.5
resolution: "whatwg-encoding@npm:1.0.5"
dependencies:
languageName: node
linkType: hard
-"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.0.0":
+"whatwg-fetch@npm:>=0.10.0":
version: 3.6.2
resolution: "whatwg-fetch@npm:3.6.2"
checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed
languageName: node
linkType: hard
-"whatwg-mimetype@npm:^2.1.0, whatwg-mimetype@npm:^2.2.0, whatwg-mimetype@npm:^2.3.0":
+"whatwg-fetch@npm:^3.4.1":
+ version: 3.6.20
+ resolution: "whatwg-fetch@npm:3.6.20"
+ checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5
+ languageName: node
+ linkType: hard
+
+"whatwg-mimetype@npm:^2.3.0":
version: 2.3.0
resolution: "whatwg-mimetype@npm:2.3.0"
checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383
languageName: node
linkType: hard
-"whatwg-url@npm:^6.4.1":
- version: 6.5.0
- resolution: "whatwg-url@npm:6.5.0"
- dependencies:
- lodash.sortby: ^4.7.0
- tr46: ^1.0.1
- webidl-conversions: ^4.0.2
- checksum: a10bd5e29f4382cd19789c2a7bbce25416e606b6fefc241c7fe34a2449de5bc5709c165bd13634eda433942d917ca7386a52841780b82dc37afa8141c31a8ebd
- languageName: node
- linkType: hard
-
-"whatwg-url@npm:^7.0.0":
- version: 7.1.0
- resolution: "whatwg-url@npm:7.1.0"
+"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0":
+ version: 8.7.0
+ resolution: "whatwg-url@npm:8.7.0"
dependencies:
- lodash.sortby: ^4.7.0
- tr46: ^1.0.1
- webidl-conversions: ^4.0.2
- checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd
+ lodash: ^4.7.0
+ tr46: ^2.1.0
+ webidl-conversions: ^6.1.0
+ checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e
languageName: node
linkType: hard
languageName: node
linkType: hard
-"which-module@npm:^1.0.0":
- version: 1.0.0
- resolution: "which-module@npm:1.0.0"
- checksum: 98434f7deb36350cb543c1f15612188541737e1f12d39b23b1c371dff5cf4aa4746210f2bdec202d5fe9da8682adaf8e3f7c44c520687d30948cfc59d5534edb
+"which-builtin-type@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "which-builtin-type@npm:1.1.3"
+ dependencies:
+ function.prototype.name: ^1.1.5
+ has-tostringtag: ^1.0.0
+ is-async-function: ^2.0.0
+ is-date-object: ^1.0.5
+ is-finalizationregistry: ^1.0.2
+ is-generator-function: ^1.0.10
+ is-regex: ^1.1.4
+ is-weakref: ^1.0.2
+ isarray: ^2.0.5
+ which-boxed-primitive: ^1.0.2
+ which-collection: ^1.0.1
+ which-typed-array: ^1.1.9
+ checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36
+ languageName: node
+ linkType: hard
+
+"which-collection@npm:^1.0.1":
+ version: 1.0.2
+ resolution: "which-collection@npm:1.0.2"
+ dependencies:
+ is-map: ^2.0.3
+ is-set: ^2.0.3
+ is-weakmap: ^2.0.2
+ is-weakset: ^2.0.3
+ checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9
languageName: node
linkType: hard
languageName: node
linkType: hard
-"which@npm:^1.2.9, which@npm:^1.3.0, which@npm:^1.3.1":
+"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9":
+ version: 1.1.15
+ resolution: "which-typed-array@npm:1.1.15"
+ dependencies:
+ available-typed-arrays: ^1.0.7
+ call-bind: ^1.0.7
+ for-each: ^0.3.3
+ gopd: ^1.0.1
+ has-tostringtag: ^1.0.2
+ checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75
+ languageName: node
+ linkType: hard
+
+"which@npm:^1.2.9, which@npm:^1.3.1":
version: 1.3.1
resolution: "which@npm:1.3.1"
dependencies:
languageName: node
linkType: hard
-"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5":
+"wide-align@npm:^1.1.5":
version: 1.1.5
resolution: "wide-align@npm:1.1.5"
dependencies:
languageName: node
linkType: hard
-"workbox-background-sync@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-background-sync@npm:4.3.1"
+"workbox-background-sync@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-background-sync@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: 25564fb0adc36396ea60308c4f8184cffe245eca9bd931a8154fc25736297071448be43de85b0b477da74e61410cdf60a295b25d4d3e780fa36b73ef983cc678
+ workbox-core: ^5.1.4
+ checksum: 14655d0254813d2580935c88fe4768eb4794158a3c0700505aa06784dcd8d7498563e8b55152f0a4afb609163e76787a3a3eb61813b810bd76830c866d6ceb9e
languageName: node
linkType: hard
-"workbox-broadcast-update@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-broadcast-update@npm:4.3.1"
+"workbox-broadcast-update@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-broadcast-update@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: f62035645d37b0763f09a5b688dbdba14b28ac69c2b8d609b6a68be888c8a9c384186cde01fc1c41ac9d45e383320a6cf743a9209d7390d97d27c61c5ace64f3
+ workbox-core: ^5.1.4
+ checksum: b56df2fde652c2efa8afbb8880562aaac6932be313ddcbbb688bb48beeb3164c928a644407f359168789a31592c765f63526608afe6cd803ac89402f786064d1
languageName: node
linkType: hard
-"workbox-build@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-build@npm:4.3.1"
+"workbox-build@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-build@npm:5.1.4"
dependencies:
- "@babel/runtime": ^7.3.4
- "@hapi/joi": ^15.0.0
+ "@babel/core": ^7.8.4
+ "@babel/preset-env": ^7.8.4
+ "@babel/runtime": ^7.8.4
+ "@hapi/joi": ^15.1.0
+ "@rollup/plugin-node-resolve": ^7.1.1
+ "@rollup/plugin-replace": ^2.3.1
+ "@surma/rollup-plugin-off-main-thread": ^1.1.1
common-tags: ^1.8.0
- fs-extra: ^4.0.2
- glob: ^7.1.3
- lodash.template: ^4.4.0
- pretty-bytes: ^5.1.0
+ fast-json-stable-stringify: ^2.1.0
+ fs-extra: ^8.1.0
+ glob: ^7.1.6
+ lodash.template: ^4.5.0
+ pretty-bytes: ^5.3.0
+ rollup: ^1.31.1
+ rollup-plugin-babel: ^4.3.3
+ rollup-plugin-terser: ^5.3.1
+ source-map: ^0.7.3
+ source-map-url: ^0.4.0
stringify-object: ^3.3.0
strip-comments: ^1.0.2
- workbox-background-sync: ^4.3.1
- workbox-broadcast-update: ^4.3.1
- workbox-cacheable-response: ^4.3.1
- workbox-core: ^4.3.1
- workbox-expiration: ^4.3.1
- workbox-google-analytics: ^4.3.1
- workbox-navigation-preload: ^4.3.1
- workbox-precaching: ^4.3.1
- workbox-range-requests: ^4.3.1
- workbox-routing: ^4.3.1
- workbox-strategies: ^4.3.1
- workbox-streams: ^4.3.1
- workbox-sw: ^4.3.1
- workbox-window: ^4.3.1
- checksum: 3bf0f400512b621a67f2f7ab9f1beb7964c12cb12186da1a2a51ec456a8b63e0c9a2e0fbd31c003aecd2779fb4061e8cad73b8fe94e790e141aa110169d6504b
- languageName: node
- linkType: hard
-
-"workbox-cacheable-response@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-cacheable-response@npm:4.3.1"
+ tempy: ^0.3.0
+ upath: ^1.2.0
+ workbox-background-sync: ^5.1.4
+ workbox-broadcast-update: ^5.1.4
+ workbox-cacheable-response: ^5.1.4
+ workbox-core: ^5.1.4
+ workbox-expiration: ^5.1.4
+ workbox-google-analytics: ^5.1.4
+ workbox-navigation-preload: ^5.1.4
+ workbox-precaching: ^5.1.4
+ workbox-range-requests: ^5.1.4
+ workbox-routing: ^5.1.4
+ workbox-strategies: ^5.1.4
+ workbox-streams: ^5.1.4
+ workbox-sw: ^5.1.4
+ workbox-window: ^5.1.4
+ checksum: 873833d0ea5c39c3f9adae9b2cd8ff33c013ff57f189dbec94d4d02917281495f38bbfa508d24425176ea8d31d6a27590658c83c30d44d9d5a9f4eb4d0798694
+ languageName: node
+ linkType: hard
+
+"workbox-cacheable-response@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-cacheable-response@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: c281f40388891a7920b7ecf73a61b0b9274174c17d703ef2a4c6ecb2e0a277ff447c24205594e50a922adca40de39767ebc34c79cfba9040abf10e4b879142b5
+ workbox-core: ^5.1.4
+ checksum: 3d8940dbee11880fdd86d76f85c063cf0a42d722be828332acf2f69ff5eaaedc8a0d779e44175adba4e8485f98392052539b2126df79125cebcec57dea0bee3c
languageName: node
linkType: hard
-"workbox-core@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-core@npm:4.3.1"
- checksum: c3e31bb24c4bfbc2be129c7745c12512c6e061dfa032b0dbe3620aa1b15fe12df433c6f39f17bcaebef2d2826a5ca18760b778d12c86876295e2cf121725ca09
+"workbox-core@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-core@npm:5.1.4"
+ checksum: 6062bc3131bb7fcf1922be619cbc28ba528b033ba18acced5e42eb62b6c0a763814e905106c081c1c100a5d520ef104957e99e592e5e954767df76db49a7c874
languageName: node
linkType: hard
-"workbox-expiration@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-expiration@npm:4.3.1"
+"workbox-expiration@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-expiration@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: c1bfa47278720d1729a88562b1e2a5d0d7d27d6b625190ad6db2a3518ad4907833b1b9182a6e7dae687e4f12e13047b102b1b82f6fe9529523c82e74729d023a
+ workbox-core: ^5.1.4
+ checksum: c4648a008d19ee1281d5d588e10f14bd01530d8601c6ebf27e63b109663530fd381709539f1dd8a32e75d68a04e40e5f31ec6fbcc9ea052ee39000a2d76ade50
languageName: node
linkType: hard
-"workbox-google-analytics@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-google-analytics@npm:4.3.1"
+"workbox-google-analytics@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-google-analytics@npm:5.1.4"
dependencies:
- workbox-background-sync: ^4.3.1
- workbox-core: ^4.3.1
- workbox-routing: ^4.3.1
- workbox-strategies: ^4.3.1
- checksum: 225cea09758767bba9be553578e5d6f509ef055149a07df0b366c6f17dcd98220a939e48d1cacb3132f1d4d2e896d093a6ee00744498522b3aa25d48e9f21eb4
+ workbox-background-sync: ^5.1.4
+ workbox-core: ^5.1.4
+ workbox-routing: ^5.1.4
+ workbox-strategies: ^5.1.4
+ checksum: 2783e93f8a5aeccc038f51a9960c05aebd104fd8d113b5fd78a09bac2da8ed8e2be4c9fd7d8a6751682301d6b5e36ba055240a74a3591b4e887aabb2784cd531
languageName: node
linkType: hard
-"workbox-navigation-preload@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-navigation-preload@npm:4.3.1"
+"workbox-navigation-preload@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-navigation-preload@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: 50c2bc59b66f980e5d5c9798f8e8883a6fd5af982ccfd4938e17de126cb2f4a614b143e3cff8862e140ccb7db3ce695162c98be8cf798d69e41266b20f74a74c
+ workbox-core: ^5.1.4
+ checksum: ed6b19f063f17e2dd12ef08594ea338fcf96d994ea8f7d9b2987099cb08a890c73f139a23b68c9c5523308fba4634f24aca079deb7d00684c8d76fdfb07b0fc9
languageName: node
linkType: hard
-"workbox-precaching@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-precaching@npm:4.3.1"
+"workbox-precaching@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-precaching@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: afac7991d4f1d660d0fa97437f18a3e67ed978991c4f1f159b0bb3d267f3d6b6aa34f0a7f505e298acb0d66af33224b0f1b8eac0f05c39a319d1a3b4203c6ee5
+ workbox-core: ^5.1.4
+ checksum: 5593c5b9c3c928bb5d3b4c998625be610d05a3b55523e5abb0fc5f12ff2e32412114e933e60d54ba9e2661fa3cbbbab7e11f91c7170742cfe9525437d1c44ae8
languageName: node
linkType: hard
-"workbox-range-requests@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-range-requests@npm:4.3.1"
+"workbox-range-requests@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-range-requests@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: bf0a2daebc4611c97f83c068911f7724e8c92c7270ee40f1e815fc227eb29a920fced0ce88421b413ca688574d1b5731bc45b0c34a208f9e0eace4d2b302eb5f
+ workbox-core: ^5.1.4
+ checksum: c67b467023e85a45599c411079907585c4d4b7aab77205dd905cd0d8b1487aa248469bc2f89045e8bd4a08eed4ede14795fc9089d01beff65ff3c6f2f1deff45
languageName: node
linkType: hard
-"workbox-routing@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-routing@npm:4.3.1"
+"workbox-routing@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-routing@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: fb8bc5f67246c418b6fd15d9763a4200633cc099edb13d4a266ddf8c23f5a0c1fe2e2fc8380928eb1c1ee0d821d677355706e294113650638bd809c589ae24d4
+ workbox-core: ^5.1.4
+ checksum: 4199a02b433eb645dfcaf2a5056a04d79f337b6f368b1ab5aa18262857835d4b995536062c294d6f4db6da236235b5736af4b29d0ea1b0c3f0db339b04d3cd40
languageName: node
linkType: hard
-"workbox-strategies@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-strategies@npm:4.3.1"
+"workbox-strategies@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-strategies@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: dc49af50ddc9c240160f997e195cbe57efe8cb764eb2652174778bc44f3697b9680784a00af2c55ad56d41ed507c4140c4985c2f74ee9d4b3f68e99c889a54f4
+ workbox-core: ^5.1.4
+ workbox-routing: ^5.1.4
+ checksum: 6ed247bfc0037331043cd0e772c6fd8d48e487875fac75d6692eb3936536ca2d4ac5ac9d12ec9b0ad5eefd4a69afd1ad2a993829ce3a373390880a019fd33d3d
languageName: node
linkType: hard
-"workbox-streams@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-streams@npm:4.3.1"
+"workbox-streams@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-streams@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: 7a06e4a10eb30ed6ba90ed6647049355db251d970e9f3d1e3f4d20b4ca9d25082275301d31c0f506761bbc494956cd542c073db67d6a6bb4ff069f5e77bce510
+ workbox-core: ^5.1.4
+ workbox-routing: ^5.1.4
+ checksum: daaedb22dae6eb4723e7a21d758854adb36b75f1fa2453a914b6768628d91555e3db76fccb70a101f5cf1a39056e783eab1c8b0f4a59649f7ef4fad173c6f7d3
languageName: node
linkType: hard
-"workbox-sw@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-sw@npm:4.3.1"
- checksum: 349a9b1a3c9b57dc1925a8709f9af3e90d6c6b8e56f10c88c70236abdf5ba8e3a66f8c004356fc1cb7c24cfabf0f162b132930454e1fb390d29e2ce46696f3a5
+"workbox-sw@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-sw@npm:5.1.4"
+ checksum: eda970f62c26715b806828cab3000240843bab2e6577c341ccd30747a77a60d23f4f08d8d85fba680bfefa95c673c4d48a62a969a2540916dcf6506c627c69cc
languageName: node
linkType: hard
-"workbox-webpack-plugin@npm:4.3.1":
- version: 4.3.1
- resolution: "workbox-webpack-plugin@npm:4.3.1"
+"workbox-webpack-plugin@npm:5.1.4":
+ version: 5.1.4
+ resolution: "workbox-webpack-plugin@npm:5.1.4"
dependencies:
- "@babel/runtime": ^7.0.0
- json-stable-stringify: ^1.0.1
- workbox-build: ^4.3.1
+ "@babel/runtime": ^7.5.5
+ fast-json-stable-stringify: ^2.0.0
+ source-map-url: ^0.4.0
+ upath: ^1.1.2
+ webpack-sources: ^1.3.0
+ workbox-build: ^5.1.4
peerDependencies:
- webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
- checksum: 7282d849d96c90a82b985784279d28bf1a95534429b3f95cc9f028142f10cea78e13a608f7e29a545e4f82cbe7b081a6e82ad57131dc09604c239a4b53a7a860
+ webpack: ^4.0.0
+ checksum: 7a9093d4ccfedc27ee6716443bcb7ce12d1f92831f48d09e6cf829a62d2ba7948a84ed38964923136d6b296e8f60bda359645a82c5a19e2c5a8e8aab6dae0a55
languageName: node
linkType: hard
-"workbox-window@npm:^4.3.1":
- version: 4.3.1
- resolution: "workbox-window@npm:4.3.1"
+"workbox-window@npm:^5.1.4":
+ version: 5.1.4
+ resolution: "workbox-window@npm:5.1.4"
dependencies:
- workbox-core: ^4.3.1
- checksum: 60b854fb0febdde236b0285eb050131043446a0c011629f8480224b1cee3a2f9f13f4c851f4a30dd8a76aa58503436c16f17662ef0eb40d0e1c630842165e718
+ workbox-core: ^5.1.4
+ checksum: bd5bc967ea1202c555db4360892518f5479027d05e4bd02fd38ebef3faf6605ee7e3887225e0920624cd2685e5217c3c4bd43a7d458860d186400c12f410df5b
languageName: node
linkType: hard
languageName: node
linkType: hard
-"wrap-ansi@npm:^2.0.0":
- version: 2.1.0
- resolution: "wrap-ansi@npm:2.1.0"
- dependencies:
- string-width: ^1.0.1
- strip-ansi: ^3.0.1
- checksum: 2dacd4b3636f7a53ee13d4d0fe7fa2ed9ad81e9967e17231924ea88a286ec4619a78288de8d41881ee483f4449ab2c0287cde8154ba1bd0126c10271101b2ee3
- languageName: node
- linkType: hard
-
"wrap-ansi@npm:^5.1.0":
version: 5.1.0
resolution: "wrap-ansi@npm:5.1.0"
languageName: node
linkType: hard
-"write-file-atomic@npm:2.4.1":
- version: 2.4.1
- resolution: "write-file-atomic@npm:2.4.1"
+"write-file-atomic@npm:^3.0.0":
+ version: 3.0.3
+ resolution: "write-file-atomic@npm:3.0.3"
dependencies:
- graceful-fs: ^4.1.11
imurmurhash: ^0.1.4
+ is-typedarray: ^1.0.0
signal-exit: ^3.0.2
- checksum: 9a032212214fb281fa7004e53115dfe38cd6f7191902ac7b691524c42f565f9083f2bb810aa30936b25559ed9f9b1772a2e385c29e5e7e4ef1253388610acdf1
- languageName: node
- linkType: hard
-
-"write@npm:1.0.3":
- version: 1.0.3
- resolution: "write@npm:1.0.3"
- dependencies:
- mkdirp: ^0.5.1
- checksum: 6496197ceb2d6faeeb8b5fe2659ca804e801e4989dff9fb8a66fe76179ce4ccc378c982ef906733caea1220c8dbe05a666d82127959ac4456e70111af8b8df73
+ typedarray-to-buffer: ^3.1.5
+ checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280
languageName: node
linkType: hard
-"ws@npm:^5.2.0":
- version: 5.2.3
- resolution: "ws@npm:5.2.3"
- dependencies:
- async-limiter: ~1.0.0
- checksum: bdb2223a40c2c68cf91b25a6c9b8c67d5275378ec6187f343314d3df7530e55b77cb9fe79fb1c6a9758389ac5aefc569d24236924b5c65c5dbbaff409ef739fc
- languageName: node
- linkType: hard
-
-"ws@npm:^6.1.2, ws@npm:^6.2.1":
+"ws@npm:^6.2.1":
version: 6.2.2
resolution: "ws@npm:6.2.2"
dependencies:
languageName: node
linkType: hard
+"ws@npm:^7.4.6":
+ version: 7.5.9
+ resolution: "ws@npm:7.5.9"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138
+ languageName: node
+ linkType: hard
+
"xml-name-validator@npm:^3.0.0":
version: 3.0.0
resolution: "xml-name-validator@npm:3.0.0"
languageName: node
linkType: hard
-"xmlchars@npm:^2.1.1":
+"xmlchars@npm:^2.2.0":
version: 2.2.0
resolution: "xmlchars@npm:2.2.0"
checksum: 8c70ac94070ccca03f47a81fcce3b271bd1f37a591bf5424e787ae313fcb9c212f5f6786e1fa82076a2c632c0141552babcd85698c437506dfa6ae2d58723062
languageName: node
linkType: hard
-"xregexp@npm:^4.3.0":
- version: 4.4.1
- resolution: "xregexp@npm:4.4.1"
- dependencies:
- "@babel/runtime-corejs3": ^7.12.1
- checksum: 134d70116655f0de90725a0d2aaf73b2a69f8b4cd7f1908e394c7ff4de53819a0a2d9595e1722d71334a33d9392071b1f983f5954c57d83ab3e451116d9f8499
- languageName: node
- linkType: hard
-
"xtend@npm:^4.0.0, xtend@npm:~4.0.1":
version: 4.0.2
resolution: "xtend@npm:4.0.2"
languageName: node
linkType: hard
-"y18n@npm:^3.2.1":
- version: 3.2.2
- resolution: "y18n@npm:3.2.2"
- checksum: 6154fd7544f8bbf5b18cdf77692ed88d389be49c87238ecb4e0d6a5276446cd2a5c29cc4bdbdddfc7e4e498b08df9d7e38df4a1453cf75eecfead392246ea74a
- languageName: node
- linkType: hard
-
"y18n@npm:^4.0.0":
version: 4.0.3
resolution: "y18n@npm:4.0.3"
languageName: node
linkType: hard
-"yaml@npm:^1.7.2":
+"yaml@npm:^1.10.0":
version: 1.10.2
resolution: "yaml@npm:1.10.2"
checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f
languageName: node
linkType: hard
+"yargs-parser@npm:^18.1.2":
+ version: 18.1.3
+ resolution: "yargs-parser@npm:18.1.3"
+ dependencies:
+ camelcase: ^5.0.0
+ decamelize: ^1.2.0
+ checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9
+ languageName: node
+ linkType: hard
+
"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3":
version: 20.2.9
resolution: "yargs-parser@npm:20.2.9"
languageName: node
linkType: hard
-"yargs-parser@npm:^5.0.1":
- version: 5.0.1
- resolution: "yargs-parser@npm:5.0.1"
- dependencies:
- camelcase: ^3.0.0
- object.assign: ^4.1.0
- checksum: 8eff7f3653afc9185cb917ee034d189c1ba4bc0fd5005c9588442e25557e9bf69c7331663a6f9a2bb897cd4c1544ba9675ed3335133e19e660a3086fedc259db
- languageName: node
- linkType: hard
-
-"yargs@npm:^13.3.0, yargs@npm:^13.3.2":
+"yargs@npm:^13.3.2":
version: 13.3.2
resolution: "yargs@npm:13.3.2"
dependencies:
languageName: node
linkType: hard
+"yargs@npm:^15.4.1":
+ version: 15.4.1
+ resolution: "yargs@npm:15.4.1"
+ dependencies:
+ cliui: ^6.0.0
+ decamelize: ^1.2.0
+ find-up: ^4.1.0
+ get-caller-file: ^2.0.1
+ require-directory: ^2.1.1
+ require-main-filename: ^2.0.0
+ set-blocking: ^2.0.0
+ string-width: ^4.2.0
+ which-module: ^2.0.0
+ y18n: ^4.0.0
+ yargs-parser: ^18.1.2
+ checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373
+ languageName: node
+ linkType: hard
+
"yargs@npm:^17.0.0":
version: 17.0.1
resolution: "yargs@npm:17.0.1"
languageName: node
linkType: hard
-"yargs@npm:^7.0.0":
- version: 7.1.2
- resolution: "yargs@npm:7.1.2"
- dependencies:
- camelcase: ^3.0.0
- cliui: ^3.2.0
- decamelize: ^1.1.1
- get-caller-file: ^1.0.1
- os-locale: ^1.4.0
- read-pkg-up: ^1.0.1
- require-directory: ^2.1.1
- require-main-filename: ^1.0.1
- set-blocking: ^2.0.0
- string-width: ^1.0.2
- which-module: ^1.0.0
- y18n: ^3.2.1
- yargs-parser: ^5.0.1
- checksum: 0c330ce1338cd9f293157bf8955af6833ae59032ab1bc936510ce7a216de9bb65b05b39a82ff0e7359bfb643342cc05de5049ce50ee9404b0818f65911fb59a5
- languageName: node
- linkType: hard
-
"yauzl@npm:^2.10.0":
version: 2.10.0
resolution: "yauzl@npm:2.10.0"
checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b
languageName: node
linkType: hard
+
+"yocto-queue@npm:^0.1.0":
+ version: 0.1.0
+ resolution: "yocto-queue@npm:0.1.0"
+ checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700
+ languageName: node
+ linkType: hard
#
# SPDX-License-Identifier: AGPL-3.0
-export RUBY_VERSION=3.2.2
-export BUNDLER_VERSION=2.4.22
-
export DEBIAN_FRONTEND=noninteractive
export PATH=${PATH}:/usr/local/go/bin:/var/lib/arvados/bin:/opt/arvados-py/bin:/usr/src/arvados/sdk/cli/binstubs
export npm_config_cache=/var/lib/npm
fi
run_bundler() {
- flock $GEMLOCK /var/lib/arvados/bin/gem install --no-document --user bundler:$BUNDLER_VERSION
+ flock $GEMLOCK /var/lib/arvados/bin/gem install --conservative --no-document --user --version '~> 2.4.0' bundler
BUNDLER=bundle
if test -x $PWD/bin/bundle ; then
done
}
-# $DIST should not have a dot if there is one in /etc/os-release (e.g. 18.04)
-DIST=$(. /etc/os-release; echo $ID$VERSION_ID | tr -d '.')
+. /etc/os-release
+DISTRO_ID="$ID"
# Run apt-get update
$SUDO DEBIAN_FRONTEND=noninteractive apt-get --yes update
mkdir -p /var/lib/cloud/scripts/per-boot
fi
-TMP_LSB=`/usr/bin/lsb_release -c -s`
-LSB_RELEASE_CODENAME=${TMP_LSB//[$'\t\r\n ']}
-
SET_RESOLVER=
if [ -n "$RESOLVER" ]; then
SET_RESOLVER="--dns ${RESOLVER}"
# Add the arvados apt repository
echo "# apt.arvados.org" |$SUDO tee --append /etc/apt/sources.list.d/apt.arvados.org.list
-echo "deb http://apt.arvados.org/$LSB_RELEASE_CODENAME $LSB_RELEASE_CODENAME${REPOSUFFIX} main" |$SUDO tee --append /etc/apt/sources.list.d/apt.arvados.org.list
+echo "deb http://apt.arvados.org/$VERSION_CODENAME $VERSION_CODENAME${REPOSUFFIX} main" |$SUDO tee --append /etc/apt/sources.list.d/apt.arvados.org.list
# Add the arvados signing key
cat /tmp/1078ECD7.asc | $SUDO apt-key add -
python3-arvados-fuse \
arvados-docker-cleaner
-# We want Docker 20.10 or later so that we support glibc 2.33 and up in the container, cf.
-# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1005906
-dockerversion=5:20.10.13~3-0
-if [[ "$DIST" =~ ^debian ]]; then
- family="debian"
- if [ "$DIST" == "debian11" ]; then
- distro="bullseye"
- elif [ "$DIST" == "debian12" ]; then
- distro="bookworm"
- fi
-elif [[ "$DIST" =~ ^ubuntu ]]; then
- family="ubuntu"
- if [ "$DIST" == "ubuntu2004" ]; then
- distro="focal"
- elif [ "$DIST" == "ubuntu2204" ]; then
- distro="jammy"
- fi
-else
- echo "Unsupported distribution $DIST"
- exit 1
-fi
-curl -fsSL https://download.docker.com/linux/$family/gpg | $SUDO gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-echo deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$family/ $distro stable | \
+DOCKER_URL="https://download.docker.com/linux/$DISTRO_ID"
+curl -fsSL "$DOCKER_URL/gpg" | $SUDO gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
+echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $DOCKER_URL/ $VERSION_CODENAME stable" | \
$SUDO tee /etc/apt/sources.list.d/docker.list
$SUDO apt-get update
-$SUDO apt-get -yq --no-install-recommends install docker-ce=${dockerversion}~${family}-${distro}
+$SUDO apt-get -yq --no-install-recommends install docker-ce
# Set a higher ulimit and the resolver (if set) for docker
$SUDO sed "s/ExecStart=\(.*\)/ExecStart=\1 --default-ulimit nofile=10000:10000 ${SET_RESOLVER}/g" \
if [ "$NVIDIA_GPU_SUPPORT" == "1" ]; then
# We need a kernel and matching headers
- if [[ "$DIST" =~ ^debian ]]; then
+ if [[ "$DISTRO_ID" == debian ]]; then
$SUDO apt-get -y install linux-image-cloud-amd64 linux-headers-cloud-amd64
elif [ "$CLOUD" == "azure" ]; then
$SUDO apt-get -y install linux-image-azure linux-headers-azure
fi
# Install CUDA
- $SUDO apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/$DIST/x86_64/7fa2af80.pub
- $SUDO apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/$DIST/x86_64/3bf863cc.pub
+ NVIDIA_URL="https://developer.download.nvidia.com/compute/cuda/repos/$(echo "$DISTRO_ID$VERSION_ID" | tr -d .)/x86_64"
+ $SUDO apt-key adv --fetch-keys "$NVIDIA_URL/7fa2af80.pub"
+ $SUDO apt-key adv --fetch-keys "$NVIDIA_URL/3bf863cc.pub"
$SUDO apt-get -y install software-properties-common
- $SUDO add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/$DIST/x86_64/ /"
+ $SUDO add-apt-repository "deb $NVIDIA_URL/ /"
$SUDO add-apt-repository contrib
$SUDO apt-get update
$SUDO apt-get -y install cuda
# Install libnvidia-container, the tooling for Docker/Singularity
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | \
$SUDO apt-key add -
- if [ "$DIST" == "debian11" ]; then
+ if [[ "$VERSION_CODENAME" == bullseye ]]; then
# As of 2021-12-16 libnvidia-container and friends are only available for
# Debian 10, not yet Debian 11. Install experimental rc1 package as per this
# workaround:
$SUDO tee /etc/apt/sources.list.d/libnvidia-container.list
$SUDO sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/libnvidia-container.list
else
- # here, $DIST should have a dot if there is one in /etc/os-release (e.g. 18.04)...
- DIST=$(. /etc/os-release; echo $ID$VERSION_ID)
- curl -s -L https://nvidia.github.io/libnvidia-container/$DIST/libnvidia-container.list | \
+ curl -s -L "https://nvidia.github.io/libnvidia-container/$DISTRO_ID$VERSION_ID/libnvidia-container.list" | \
$SUDO tee /etc/apt/sources.list.d/libnvidia-container.list
fi
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../../sdk/python")),
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
+
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
- return read_version(setup_dir, module)
+# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
+if __name__ == '__main__':
+ print(get_version())
from setuptools import setup, find_packages
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "crunchstat_summary")
-if os.environ.get('ARVADOS_BUILDING_VERSION', False):
- pysdk_dep = "=={}".format(version)
-else:
- # On dev releases, arvados-python-client may have a different timestamp
- pysdk_dep = "<={}".format(version)
-
-short_tests_only = False
-if '--short-tests-only' in sys.argv:
- short_tests_only = True
- sys.argv.remove('--short-tests-only')
+version = arvados_version.get_version()
+short_tests_only = arvados_version.short_tests_only()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
setup(name='crunchstat_summary',
version=version,
('share/doc/crunchstat_summary', ['agpl-3.0.txt']),
],
install_requires=[
- 'arvados-python-client{}'.format(pysdk_dep),
+ *arvados_version.iter_dependencies(version),
],
python_requires="~=3.8",
test_suite='tests',
- tests_require=['pbr<1.7.0', 'mock>=1.0'],
zip_safe=False,
)
import gzip
import io
import logging
-import mock
import os
import sys
import unittest
+from unittest import mock
+
from crunchstat_summary.command import UTF8Decode
from crunchstat_summary import logger, reader
--- /dev/null
+---
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+# The logrotate formula checks that an associated service is running.
+# The default it checks is cron.
+# All the distributions Arvados supports (Debian 11+/Ubuntu 20.04+)
+# have switched to a systemd timer, so check that instead.
+# Refer to logrotate-formula's documentation for details
+# https://github.com/salt-formulas/salt-formula-logrotate/blob/master/README.rst
+
+logrotate:
+ service: logrotate.timer
- access_log: /var/log/nginx/api.__DOMAIN__-upstream.access.log combined
- error_log: /var/log/nginx/api.__DOMAIN__-upstream.error.log
- passenger_enabled: 'on'
+ - passenger_preload_bundler: 'on'
- client_max_body_size: 128m
--- /dev/null
+---
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+# The logrotate formula checks that an associated service is running.
+# The default it checks is cron.
+# All the distributions Arvados supports (Debian 11+/Ubuntu 20.04+)
+# have switched to a systemd timer, so check that instead.
+# Refer to logrotate-formula's documentation for details
+# https://github.com/salt-formulas/salt-formula-logrotate/blob/master/README.rst
+
+logrotate:
+ service: logrotate.timer
- access_log: /var/log/nginx/api.__CLUSTER__.__DOMAIN__-upstream.access.log combined
- error_log: /var/log/nginx/api.__CLUSTER__.__DOMAIN__-upstream.error.log
- passenger_enabled: 'on'
+ - passenger_preload_bundler: 'on'
- client_max_body_size: 128m
--- /dev/null
+---
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+# The logrotate formula checks that an associated service is running.
+# The default it checks is cron.
+# All the distributions Arvados supports (Debian 11+/Ubuntu 20.04+)
+# have switched to a systemd timer, so check that instead.
+# Refer to logrotate-formula's documentation for details
+# https://github.com/salt-formulas/salt-formula-logrotate/blob/master/README.rst
+
+logrotate:
+ service: logrotate.timer
- access_log: /var/log/nginx/api.__CLUSTER__.__DOMAIN__-upstream.access.log combined
- error_log: /var/log/nginx/api.__CLUSTER__.__DOMAIN__-upstream.error.log
- passenger_enabled: 'on'
+ - passenger_preload_bundler: 'on'
- client_max_body_size: 128m
- root: /var/www/arvados-workbench/current/public
- index: index.html index.htm
- passenger_enabled: 'on'
+ - passenger_preload_bundler: 'on'
# yamllint disable-line rule:line-length
- access_log: /var/log/nginx/workbench.__CLUSTER__.__DOMAIN__-upstream.access.log combined
- error_log: /var/log/nginx/workbench.__CLUSTER__.__DOMAIN__-upstream.error.log
# We pin the salt version to avoid potential incompatibilities when a new
# stable version is released.
-SALT_VERSION="3004"
+SALT_VERSION="3006"
# Other formula versions we depend on
-#POSTGRES_TAG="v0.44.0"
-#POSTGRES_URL="https://github.com/saltstack-formulas/postgres-formula.git"
-POSTGRES_TAG="0.45.0-bugfix327"
-POSTGRES_URL="https://github.com/arvados/postgres-formula.git"
+POSTGRES_TAG="7529300c287b1c288af0f494ca668c2217bd1c5d"
+POSTGRES_URL="https://github.com/saltstack-formulas/postgres-formula.git"
NGINX_TAG="v2.8.1"
DOCKER_TAG="v2.4.2"
-LOCALE_TAG="v0.3.4"
-LETSENCRYPT_TAG="v2.1.0"
+LOCALE_TAG="v0.3.5"
+LETSENCRYPT_TAG="v3.2.0"
LOGROTATE_TAG="v0.14.0"
PROMETHEUS_TAG="v5.6.5"
GRAFANA_TAG="v3.1.3"
if [ "${DUMP_CONFIG}" = "yes" ]; then
echo "The provision installer will just dump a config under ${DUMP_SALT_CONFIG_DIR} and exit"
else
- # Install a few dependency packages
- # First, let's figure out the OS we're working on
OS_IDS="$(. /etc/os-release && echo "${ID:-} ${ID_LIKE:-}")"
echo "Detected distro families: $OS_IDS"
+ # Several of our formulas use the cron module, which requires the crontab
+ # command. We install systemd-cron to ensure we have that.
+ # The rest of these packages are required by the rest of the script.
for OS_ID in $OS_IDS; do
case "$OS_ID" in
rhel)
echo "WARNING! Disabling SELinux, see https://dev.arvados.org/issues/18019"
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/sysconfig/selinux
setenforce permissive
- yum install -y curl git jq
+ yum install -y curl git jq systemd-cron
break
;;
debian)
DEBIAN_FRONTEND=noninteractive apt -o DPkg::Lock::Timeout=120 update
- DEBIAN_FRONTEND=noninteractive apt install -y curl git jq
+ DEBIAN_FRONTEND=noninteractive apt install -y curl git jq systemd-cron
break
;;
esac
echo "Salt already installed"
else
curl -L https://bootstrap.saltstack.com -o /tmp/bootstrap_salt.sh
- sh /tmp/bootstrap_salt.sh -XdfP -x python3 old-stable ${SALT_VERSION}
+ sh /tmp/bootstrap_salt.sh -XdfP -x python3 stable ${SALT_VERSION}
/bin/systemctl stop salt-minion.service
/bin/systemctl disable salt-minion.service
fi
echo "...postgres"
test -d postgres && ( cd postgres && git fetch ) \
|| git clone --quiet ${POSTGRES_URL} ${F_DIR}/postgres
-( cd postgres && git checkout --quiet tags/"${POSTGRES_TAG}" )
+( cd postgres && git checkout --quiet "${POSTGRES_TAG}" )
echo "...prometheus"
test -d prometheus && ( cd prometheus && git fetch ) \
# Pillars
echo " - docker" >> ${PILLARS_TOP}
echo " - nginx_api_configuration" >> ${PILLARS_TOP}
+ echo " - logrotate" >> ${PILLARS_TOP}
echo " - logrotate_api" >> ${PILLARS_TOP}
echo " - nginx_controller_configuration" >> ${PILLARS_TOP}
echo " - nginx_keepproxy_configuration" >> ${PILLARS_TOP}
grep -q "arvados.controller" ${STATES_TOP} || echo " - arvados.controller" >> ${STATES_TOP}
### Pillars ###
+ grep -q "logrotate" ${PILLARS_TOP} || echo " - logrotate" >> ${PILLARS_TOP}
grep -q "logrotate_api" ${PILLARS_TOP} || echo " - logrotate_api" >> ${PILLARS_TOP}
grep -q "aws_credentials" ${PILLARS_TOP} || echo " - aws_credentials" >> ${PILLARS_TOP}
grep -q "postgresql" ${PILLARS_TOP} || echo " - postgresql" >> ${PILLARS_TOP}
# Copyright (C) The Arvados Authors. All rights reserved.
#
# SPDX-License-Identifier: Apache-2.0
+#
+# This file runs in one of three modes:
+#
+# 1. If the ARVADOS_BUILDING_VERSION environment variable is set, it writes
+# _version.py and generates dependencies based on that value.
+# 2. If running from an arvados Git checkout, it writes _version.py
+# and generates dependencies from Git.
+# 3. Otherwise, we expect this is source previously generated from Git, and
+# it reads _version.py and generates dependencies from it.
-import subprocess
-import time
import os
import re
+import runpy
+import subprocess
import sys
-SETUP_DIR = os.path.dirname(os.path.abspath(__file__))
-VERSION_PATHS = {
- SETUP_DIR,
- os.path.abspath(os.path.join(SETUP_DIR, "../../sdk/python")),
- os.path.abspath(os.path.join(SETUP_DIR, "../../build/version-at-commit.sh"))
- }
+from pathlib import Path
+
+# These maps explain the relationships between different Python modules in
+# the arvados repository. We use these to help generate setup.py.
+PACKAGE_DEPENDENCY_MAP = {
+ 'arvados-cwl-runner': ['arvados-python-client', 'crunchstat_summary'],
+ 'arvados-user-activity': ['arvados-python-client'],
+ 'arvados_fuse': ['arvados-python-client'],
+ 'crunchstat_summary': ['arvados-python-client'],
+}
+PACKAGE_MODULE_MAP = {
+ 'arvados-cwl-runner': 'arvados_cwl',
+ 'arvados-docker-cleaner': 'arvados_docker',
+ 'arvados-python-client': 'arvados',
+ 'arvados-user-activity': 'arvados_user_activity',
+ 'arvados_fuse': 'arvados_fuse',
+ 'crunchstat_summary': 'crunchstat_summary',
+}
+PACKAGE_SRCPATH_MAP = {
+ 'arvados-cwl-runner': Path('sdk', 'cwl'),
+ 'arvados-docker-cleaner': Path('services', 'dockercleaner'),
+ 'arvados-python-client': Path('sdk', 'python'),
+ 'arvados-user-activity': Path('tools', 'user-activity'),
+ 'arvados_fuse': Path('services', 'fuse'),
+ 'crunchstat_summary': Path('tools', 'crunchstat-summary'),
+}
+
+ENV_VERSION = os.environ.get("ARVADOS_BUILDING_VERSION")
+SETUP_DIR = Path(__file__).absolute().parent
+try:
+ REPO_PATH = Path(subprocess.check_output(
+ ['git', '-C', str(SETUP_DIR), 'rev-parse', '--show-toplevel'],
+ stderr=subprocess.DEVNULL,
+ text=True,
+ ).rstrip('\n'))
+except (subprocess.CalledProcessError, OSError):
+ REPO_PATH = None
+else:
+ # Verify this is the arvados monorepo
+ if all((REPO_PATH / path).exists() for path in PACKAGE_SRCPATH_MAP.values()):
+ PACKAGE_NAME, = (
+ pkg_name for pkg_name, path in PACKAGE_SRCPATH_MAP.items()
+ if (REPO_PATH / path) == SETUP_DIR
+ )
+ MODULE_NAME = PACKAGE_MODULE_MAP[PACKAGE_NAME]
+ VERSION_SCRIPT_PATH = Path(REPO_PATH, 'build', 'version-at-commit.sh')
+ else:
+ REPO_PATH = None
+if REPO_PATH is None:
+ (PACKAGE_NAME, MODULE_NAME), = (
+ (pkg_name, mod_name)
+ for pkg_name, mod_name in PACKAGE_MODULE_MAP.items()
+ if (SETUP_DIR / mod_name).is_dir()
+ )
+
+def short_tests_only(arglist=sys.argv):
+ try:
+ arglist.remove('--short-tests-only')
+ except ValueError:
+ return False
+ else:
+ return True
+
+def git_log_output(path, *args):
+ return subprocess.check_output(
+ ['git', '-C', str(REPO_PATH),
+ 'log', '--first-parent', '--max-count=1',
+ *args, str(path)],
+ text=True,
+ ).rstrip('\n')
def choose_version_from():
- ts = {}
- for path in VERSION_PATHS:
- ts[subprocess.check_output(
- ['git', 'log', '--first-parent', '--max-count=1',
- '--format=format:%ct', path]).strip()] = path
-
- sorted_ts = sorted(ts.items())
- getver = sorted_ts[-1][1]
- print("Using "+getver+" for version number calculation of "+SETUP_DIR, file=sys.stderr)
+ ver_paths = [SETUP_DIR, VERSION_SCRIPT_PATH, *(
+ PACKAGE_SRCPATH_MAP[pkg]
+ for pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ())
+ )]
+ getver = max(ver_paths, key=lambda path: git_log_output(path, '--format=format:%ct'))
+ print(f"Using {getver} for version number calculation of {SETUP_DIR}", file=sys.stderr)
return getver
def git_version_at_commit():
curdir = choose_version_from()
- myhash = subprocess.check_output(['git', 'log', '-n1', '--first-parent',
- '--format=%H', curdir]).strip()
- myversion = subprocess.check_output([SETUP_DIR+'/../../build/version-at-commit.sh', myhash]).strip().decode()
- return myversion
+ myhash = git_log_output(curdir, '--format=%H')
+ return subprocess.check_output(
+ [str(VERSION_SCRIPT_PATH), myhash],
+ text=True,
+ ).rstrip('\n')
def save_version(setup_dir, module, v):
- v = v.replace("~dev", ".dev").replace("~rc", "rc")
- with open(os.path.join(setup_dir, module, "_version.py"), 'wt') as fp:
- return fp.write("__version__ = '%s'\n" % v)
+ with Path(setup_dir, module, '_version.py').open('w') as fp:
+ print(f"__version__ = {v!r}", file=fp)
def read_version(setup_dir, module):
- with open(os.path.join(setup_dir, module, "_version.py"), 'rt') as fp:
- return re.match("__version__ = '(.*)'$", fp.read()).groups()[0]
-
-def get_version(setup_dir, module):
- env_version = os.environ.get("ARVADOS_BUILDING_VERSION")
+ file_vars = runpy.run_path(Path(setup_dir, module, '_version.py'))
+ return file_vars['__version__']
- if env_version:
- save_version(setup_dir, module, env_version)
+def get_version(setup_dir=SETUP_DIR, module=MODULE_NAME):
+ if ENV_VERSION:
+ version = ENV_VERSION
+ elif REPO_PATH is None:
+ return read_version(setup_dir, module)
else:
- try:
- save_version(setup_dir, module, git_version_at_commit())
- except (subprocess.CalledProcessError, OSError) as err:
- print("ERROR: {0}".format(err), file=sys.stderr)
- pass
+ version = git_version_at_commit()
+ version = version.replace("~dev", ".dev").replace("~rc", "rc")
+ save_version(setup_dir, module, version)
+ return version
+
+def iter_dependencies(version=None):
+ if version is None:
+ version = get_version()
+ # A packaged development release should be installed with other
+ # development packages built from the same source, but those
+ # dependencies may have earlier "dev" versions (read: less recent
+ # Git commit timestamps). This compatible version dependency
+ # expresses that as closely as possible. Allowing versions
+ # compatible with .dev0 allows any development release.
+ # Regular expression borrowed partially from
+ # <https://packaging.python.org/en/latest/specifications/version-specifiers/#version-specifiers-regex>
+ dep_ver, match_count = re.subn(r'\.dev(0|[1-9][0-9]*)$', '.dev0', version, 1)
+ dep_op = '~=' if match_count else '=='
+ for dep_pkg in PACKAGE_DEPENDENCY_MAP.get(PACKAGE_NAME, ()):
+ yield f'{dep_pkg}{dep_op}{dep_ver}'
- return read_version(setup_dir, module)
+# Called from calculate_python_sdk_cwl_package_versions() in run-library.sh
+if __name__ == '__main__':
+ print(get_version())
from setuptools import setup, find_packages
-SETUP_DIR = os.path.dirname(__file__) or '.'
-README = os.path.join(SETUP_DIR, 'README.rst')
-
import arvados_version
-version = arvados_version.get_version(SETUP_DIR, "arvados_user_activity")
+version = arvados_version.get_version()
+README = os.path.join(arvados_version.SETUP_DIR, 'README.rst')
setup(name='arvados-user-activity',
version=version,
('share/doc/arvados_user_activity', ['agpl-3.0.txt']),
],
install_requires=[
- 'arvados-python-client >= 2.2.0.dev20201118185221',
+ *arvados_version.iter_dependencies(version),
],
python_requires="~=3.8",
zip_safe=True,