From b3a54b15835d617a9ec5ed3c637b3ae58ff50a67 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 9 Aug 2022 16:38:06 -0500 Subject: [PATCH 001/105] Drop Debian 9 builds for EOL * Update default R version in README --- Makefile | 2 +- README.md | 21 ++++++------- builder/Dockerfile.debian-9 | 25 ---------------- builder/docker-compose.yml | 11 ------- builder/package.debian-9 | 59 ------------------------------------- serverless-resources.yml | 14 --------- serverless.yml | 4 +-- 7 files changed, 11 insertions(+), 125 deletions(-) delete mode 100644 builder/Dockerfile.debian-9 delete mode 100644 builder/package.debian-9 diff --git a/Makefile b/Makefile index 9eaaf02..2e28140 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-9 debian-10 debian-11 centos-7 centos-8 opensuse-153 +PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 opensuse-153 SLS_BINARY ?= ./node_modules/serverless/bin/serverless deps: diff --git a/README.md b/README.md index a4d9957..d6bf989 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ bug, or ask questions on [RStudio Community](https://community.rstudio.com). R binaries are built for the following Linux operating systems: - Ubuntu 18.04, 20.04, 22.04 -- Debian 9, 10, 11 +- Debian 10, 11 - CentOS 7 - Red Hat Enterprise Linux 7, 8 - openSUSE 15.3 @@ -48,7 +48,7 @@ bash -c "$(curl -L https://rstd.io/r-install)" Define the version of R that you want to install. Available versions of R can be found here: https://cdn.rstudio.com/r/versions.json ```bash -R_VERSION=3.5.3 +R_VERSION=4.1.3 ``` ### Download and install R @@ -65,9 +65,6 @@ wget https://cdn.rstudio.com/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 22.04 wget https://cdn.rstudio.com/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb -# Debian 9 -wget https://cdn.rstudio.com/r/debian-9/pkgs/r-${R_VERSION}_1_amd64.deb - # Debian 10 wget https://cdn.rstudio.com/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb @@ -185,8 +182,8 @@ environment: - LOCAL_STORE=/tmp/output # ensures that output tarballs are persisted locally build: context: . - dockerfile: Dockerfile.debian-9 -image: r-builds:debian-9 + dockerfile: Dockerfile.debian-11 +image: r-builds:debian-11 volumes: - ./integration/tmp:/tmp/output # path to output tarballs ``` @@ -196,7 +193,7 @@ volumes: IN `serverless-resources.yml` you'll need to add a job definition that points to the ECR image. ``` -rBuildsBatchJobDefinitionDebian9: +rBuildsBatchJobDefinitionDebian11: Type: AWS::Batch::JobDefinition Properties: Type: container @@ -207,7 +204,7 @@ rBuildsBatchJobDefinitionDebian9: Memory: 4096 JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] - Image: #{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-9 + Image: #{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11 ``` ### Environment variables in the serverless.yml functions. @@ -220,9 +217,9 @@ The serverless functions which trigger R builds need to be informed of new platf ``` environment: # snip - JOB_DEFINITION_ARN_debian_9: - Ref: rBuildsBatchJobDefinitionDebian9 - SUPPORTED_PLATFORMS: ubuntu-1804,debian-9,debian-10,centos-7,centos-8 + JOB_DEFINITION_ARN_debian_11: + Ref: rBuildsBatchJobDefinitionDebian11 + SUPPORTED_PLATFORMS: ubuntu-1804,debian-10,centos-7,centos-8 ``` ### Makefile diff --git a/builder/Dockerfile.debian-9 b/builder/Dockerfile.debian-9 deleted file mode 100644 index 4325a67..0000000 --- a/builder/Dockerfile.debian-9 +++ /dev/null @@ -1,25 +0,0 @@ -FROM debian:stretch - -ENV OS_IDENTIFIER debian-9 - -RUN set -x \ - && export DEBIAN_FRONTEND=noninteractive \ - && echo 'deb-src http://deb.debian.org/debian stretch main' >> /etc/apt/sources.list \ - && apt-get update \ - && apt-get install -y gcc libcurl4-openssl-dev libicu-dev \ - libopenblas-base libpcre2-dev make python-pip ruby ruby-dev wget \ - && apt-get build-dep -y r-base - -RUN pip install awscli - -RUN chmod 0777 /opt - -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 - -# Override the default pager used by R -ENV PAGER /usr/bin/pager - -COPY package.debian-9 /package.sh -COPY build.sh . -ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 6c36898..9eed916 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -34,17 +34,6 @@ services: image: r-builds:ubuntu-2204 volumes: - ./integration/tmp:/tmp/output - debian-9: - command: ./build.sh - environment: - - R_VERSION=${R_VERSION} - - LOCAL_STORE=/tmp/output - build: - context: . - dockerfile: Dockerfile.debian-9 - image: r-builds:debian-9 - volumes: - - ./integration/tmp:/tmp/output debian-10: command: ./build.sh environment: diff --git a/builder/package.debian-9 b/builder/package.debian-9 deleted file mode 100644 index 508a15d..0000000 --- a/builder/package.debian-9 +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -if [[ ! -d /tmp/output/debian-9 ]]; then - mkdir -p /tmp/output/debian-9 -fi - -# R 3.x requires PCRE1 -pcre_lib='libpcre2-dev' -if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3-dev' -fi - -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/debian-9/ \ - -d ca-certificates \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4-openssl-dev \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d liblzma-dev \ - -d libopenblas-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - -d ${pcre_lib} \ - -d libpng16-16 \ - -d libreadline7 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} - -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/debian-9/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) - diff --git a/serverless-resources.yml b/serverless-resources.yml index 4b05aee..4318ed0 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -172,20 +172,6 @@ rBuildsBatchJobDefinitionUbuntu2204: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" Timeout: AttemptDurationSeconds: 7200 -rBuildsBatchJobDefinitionDebian9: - Type: AWS::Batch::JobDefinition - Properties: - Type: container - ContainerProperties: - Command: - - ./build.sh - Vcpus: 4 - Memory: 4096 - JobRoleArn: - "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] - Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-9" - Timeout: - AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian10: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index d3846e0..8e618f8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -41,8 +41,6 @@ provider: Ref: rBuildsBatchJobDefinitionUbuntu2004 JOB_DEFINITION_ARN_ubuntu_2204: Ref: rBuildsBatchJobDefinitionUbuntu2204 - JOB_DEFINITION_ARN_debian_9: - Ref: rBuildsBatchJobDefinitionDebian9 JOB_DEFINITION_ARN_debian_10: Ref: rBuildsBatchJobDefinitionDebian10 JOB_DEFINITION_ARN_debian_11: @@ -53,7 +51,7 @@ provider: Ref: rBuildsBatchJobDefinitionCentos8 JOB_DEFINITION_ARN_opensuse_153: Ref: rBuildsBatchJobDefinitionOpensuse153 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-9,debian-10,debian-11,centos-7,centos-8,opensuse-153 + SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,opensuse-153 functions: queueBuilds: From 1de359f3e6b095bcf7d577933bb2823b30da2f58 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 17:17:01 -0500 Subject: [PATCH 002/105] Add tests for R builds --- test/docker-compose.yml | 75 ++++++++++++++++++++ test/test-centos.sh | 25 +++++++ test/test-deb.sh | 25 +++++++ test/test-opensuse.sh | 23 +++++++ test/test-r.sh | 18 +++++ test/test-rhel.sh | 26 +++++++ test/test.R | 103 ++++++++++++++++++++++++++++ test/testpkg/.Rbuildignore | 2 + test/testpkg/.gitignore | 2 + test/testpkg/DESCRIPTION | 12 ++++ test/testpkg/NAMESPACE | 6 ++ test/testpkg/R/testpkg.R | 32 +++++++++ test/testpkg/README.md | 3 + test/testpkg/man/add_it.Rd | 19 +++++ test/testpkg/man/square_it.Rd | 17 +++++ test/testpkg/man/subtract_it.Rd | 19 +++++ test/testpkg/man/testpkg-package.Rd | 14 ++++ test/testpkg/src/Makevars | 2 + test/testpkg/src/add.c | 10 +++ test/testpkg/src/init.c | 33 +++++++++ test/testpkg/src/square.f | 5 ++ test/testpkg/src/subtract.cpp | 10 +++ test/testpkg/testpkg.Rproj | 19 +++++ test/testpkg/tests/test.R | 5 ++ 24 files changed, 505 insertions(+) create mode 100644 test/docker-compose.yml create mode 100755 test/test-centos.sh create mode 100755 test/test-deb.sh create mode 100755 test/test-opensuse.sh create mode 100755 test/test-r.sh create mode 100755 test/test-rhel.sh create mode 100644 test/test.R create mode 100644 test/testpkg/.Rbuildignore create mode 100644 test/testpkg/.gitignore create mode 100644 test/testpkg/DESCRIPTION create mode 100644 test/testpkg/NAMESPACE create mode 100644 test/testpkg/R/testpkg.R create mode 100644 test/testpkg/README.md create mode 100644 test/testpkg/man/add_it.Rd create mode 100644 test/testpkg/man/square_it.Rd create mode 100644 test/testpkg/man/subtract_it.Rd create mode 100644 test/testpkg/man/testpkg-package.Rd create mode 100644 test/testpkg/src/Makevars create mode 100644 test/testpkg/src/add.c create mode 100644 test/testpkg/src/init.c create mode 100644 test/testpkg/src/square.f create mode 100644 test/testpkg/src/subtract.cpp create mode 100644 test/testpkg/testpkg.Rproj create mode 100644 test/testpkg/tests/test.R diff --git a/test/docker-compose.yml b/test/docker-compose.yml new file mode 100644 index 0000000..91ea366 --- /dev/null +++ b/test/docker-compose.yml @@ -0,0 +1,75 @@ +version: '2.0' + +services: + ubuntu-1804: + image: ubuntu:bionic + command: /test/test-deb.sh + environment: + - OS_IDENTIFIER=ubuntu-1804 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + ubuntu-2004: + image: ubuntu:focal + command: /test/test-deb.sh + environment: + - OS_IDENTIFIER=ubuntu-2004 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + ubuntu-2204: + image: ubuntu:jammy + command: /test/test-deb.sh + environment: + - OS_IDENTIFIER=ubuntu-2204 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + debian-11: + image: debian:bullseye + command: /test/test-deb.sh + environment: + - OS_IDENTIFIER=debian-11 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + debian-10: + image: debian:buster + command: /test/test-deb.sh + environment: + - OS_IDENTIFIER=debian-10 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + centos-7: + image: centos:centos7 + command: /test/test-centos.sh + environment: + - OS_IDENTIFIER=centos-7 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + centos-8: + image: rockylinux:8 + command: /test/test-centos.sh + environment: + - OS_IDENTIFIER=centos-8 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages + opensuse-153: + image: opensuse/leap:15.3 + command: /test/test-opensuse.sh + environment: + - OS_IDENTIFIER=opensuse-153 + - R_VERSION=${R_VERSION} + volumes: + - ./:/test + - ../builder/integration/tmp:/packages diff --git a/test/test-centos.sh b/test/test-centos.sh new file mode 100755 index 0000000..3cee256 --- /dev/null +++ b/test/test-centos.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -ex + +PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm + +if [ ! -f ${PKG_FILE} ]; then + echo "No package found, skipping tests" + exit 0 +fi + +yum -y -q update +yum -y install epel-release +yum -y install ${PKG_FILE} + +# Show rpm info +rpm -qi R-${R_VERSION} + +/test/test-r.sh + +yum -y remove R-${R_VERSION} + +if [ -d /opt/R/${R_VERSION} ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test-deb.sh b/test/test-deb.sh new file mode 100755 index 0000000..b4ee24b --- /dev/null +++ b/test/test-deb.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -ex + +PKG_FILE=/packages/${OS_IDENTIFIER}/r-${R_VERSION}_1_amd64.deb + +if [ ! -f ${PKG_FILE} ]; then + echo "No package found, skipping tests" + exit 0 +fi + +export DEBIAN_FRONTEND=noninteractive +apt-get update -qq +apt-get install -f -y ${PKG_FILE} + +# Show deb info +apt-cache show r-${R_VERSION} + +/test/test-r.sh + +apt-get remove -y r-${R_VERSION} + +if [ -d /opt/R/${R_VERSION} ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test-opensuse.sh b/test/test-opensuse.sh new file mode 100755 index 0000000..174b9c5 --- /dev/null +++ b/test/test-opensuse.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -ex + +PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm + +if [ ! -f ${PKG_FILE} ]; then + echo "No package found, skipping tests" + exit 0 +fi + +zypper --non-interactive --no-gpg-checks install ${PKG_FILE} + +# Show rpm info +rpm -qi R-${R_VERSION} + +/test/test-r.sh + +zypper --non-interactive remove R-${R_VERSION} + +if [ -d /opt/R/${R_VERSION} ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test-r.sh b/test/test-r.sh new file mode 100755 index 0000000..628acce --- /dev/null +++ b/test/test-r.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -ex + +DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +R_HOME=/opt/R/${R_VERSION}/lib/R +"${R_HOME}/bin/R" --version +"${R_HOME}/bin/Rscript" -e 'sessionInfo()' + +# List R devel dependencies +gcc --version +g++ --version +gfortran --version + +# List shared library dependencies (e.g. BLAS/LAPACK) +LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libR.so" + +DIR=${DIR} "${R_HOME}/bin/Rscript" /test/test.R diff --git a/test/test-rhel.sh b/test/test-rhel.sh new file mode 100755 index 0000000..c2c7918 --- /dev/null +++ b/test/test-rhel.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -ex + +PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm + +if [ ! -f ${PKG_FILE} ]; then + echo "No package found, skipping tests" + exit 0 +fi + +dnf -y install dnf-plugins-core +dnf config-manager --set-enabled crb +dnf -y install epel-release +dnf -y install ${PKG_FILE} + +# Show rpm info +rpm -qi R-${R_VERSION} + +/test/test-r.sh + +dnf -y remove R-${R_VERSION} + +if [ -d /opt/R/${R_VERSION} ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test.R b/test/test.R new file mode 100644 index 0000000..360c9b1 --- /dev/null +++ b/test/test.R @@ -0,0 +1,103 @@ +# HTTP mirror to support R 3.1 +options(repos = c("https://cloud.r-project.org", "http://cloud.r-project.org")) + +# Create a temp lib to avoid installing into the system library +temp_lib <- tempdir() +.libPaths(temp_lib) + +# Install a package from CRAN +install.packages("R6") +library(R6) + +# Install a package with C/C++ and Fortran code, which links against libR, BLAS, LAPACK +curr_dir <- Sys.getenv("DIR", ".") +install.packages(file.path(curr_dir, "testpkg"), repos = NULL, clean = TRUE) +source(file.path(curr_dir, "testpkg/tests/test.R")) + +# Check iconv support +if (!capabilities("iconv") || !all(c("ASCII", "LATIN1", "UTF-8") %in% iconvlist())) { + stop("missing iconv support") +} + +# Check that built-in packages can be loaded +for (pkg in rownames(installed.packages(priority = c("base", "recommended")))) { + if (!require(pkg, character.only = TRUE)) { + stop(sprintf("failed to load built-in package %s", pkg)) + } +} + +# Show capabilities. Warnings are returned on missing libraries. +tryCatch(capabilities(), warning = function(w) { + print(capabilities()) + stop(sprintf("missing libraries: %s", w$message)) +}) + +# Check graphics devices +# https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/Devices.html +for (dev_name in c("png", "jpeg", "tiff", "svg", "bmp", "pdf", "postscript", + "xfig", "pictex", "cairo_pdf", "cairo_ps")) { + # Skip unsupported graphics devices (e.g. tiff in R >= 3.3 on CentOS 6) + if (dev_name %in% names(capabilities()) && capabilities(dev_name) == FALSE) { + next + } + dev <- getFromNamespace(dev_name, "grDevices") + tryCatch({ + file <- tempfile() + on.exit(unlink(file)) + if (dev_name == "xfig") { + # Suppress warning from xfig when onefile = FALSE (the default) + dev(file, onefile = TRUE) + } else { + dev(file) + } + plot(1) + dev.off() + }, warning = function(w) { + # Catch errors which manifest as warnings (e.g. "failed to load cairo DLL") + stop(sprintf("graphics device %s failed: %s", dev_name, w$message)) + }) +} + +# Check for unexpected output from graphics/text rendering. +# Run externally to capture output from external processes. +# For example, "Pango-WARNING **: failed to choose a font, expect ugly output" +# messages when rendering text without any system fonts installed. +output <- system2(R.home("bin/Rscript"), "-e 'png(tempfile()); plot(1)'", stdout = TRUE, stderr = TRUE) +if (length(output) > 0) { + stop(sprintf("unexpected output returned from plotting:\n%s", paste(output, collapse = "\n"))) +} + +# Check download methods: libcurl (supported in R >= 3.2) and internal (based on libxml) +if ("libcurl" %in% names(capabilities())) { + download.file("https://cloud.r-project.org", tempfile(), "libcurl") +} +tmpfile <- tempfile() +write.csv("test", tmpfile) +download.file(sprintf("file://%s", tmpfile), tempfile(), "internal") + +# Check that a pager is configured and help pages work +# https://stat.ethz.ch/R-manual/R-devel/library/base/html/file.show.html +output <- system2(R.home("bin/Rscript"), "-e 'help(stats)'", stdout = TRUE) +if (length(output) == 0) { + stop("failed to display help pages; check that a pager is configured properly") +} + +# Smoke test BLAS/LAPACK functionality. R may start just fine with an incompatible +# BLAS/LAPACK library, and only fail when calling a BLAS or LAPACK routine. +stopifnot(identical(crossprod(matrix(1)), matrix(1))) +stopifnot(identical(chol(matrix(1)), matrix(1))) + +# Check that R 3.x depends on PCRE1, and R 4.x depends on PCRE2. +# R 3.5 and 3.6 will link against PCRE2 if present, and take on an unnecessary dependency. +# Some distros do always require PCRE2, however, such as Debian 11. +ld_flags <- system2(R.home("bin/R"), c("CMD", "config", "--ldflags"), stdout = TRUE) +has_pcre1 <- grepl("-lpcre\\b", ld_flags) +has_pcre2 <- grepl("-lpcre2-8\\b", ld_flags) +if (getRversion() >= "3.5.0" && getRversion() < "4.0.0") { + stopifnot(has_pcre1) + if (has_pcre2) { + message(sprintf("Info: %s is linked against PCRE2, which may be unnecessary", R.version.string)) + } +} else if (getRversion() >= "4.0.0") { + stopifnot(has_pcre2 && !has_pcre1) +} diff --git a/test/testpkg/.Rbuildignore b/test/testpkg/.Rbuildignore new file mode 100644 index 0000000..91114bf --- /dev/null +++ b/test/testpkg/.Rbuildignore @@ -0,0 +1,2 @@ +^.*\.Rproj$ +^\.Rproj\.user$ diff --git a/test/testpkg/.gitignore b/test/testpkg/.gitignore new file mode 100644 index 0000000..508df78 --- /dev/null +++ b/test/testpkg/.gitignore @@ -0,0 +1,2 @@ +.Rproj.user +.Rhistory diff --git a/test/testpkg/DESCRIPTION b/test/testpkg/DESCRIPTION new file mode 100644 index 0000000..8ab34d8 --- /dev/null +++ b/test/testpkg/DESCRIPTION @@ -0,0 +1,12 @@ +Package: testpkg +Type: Package +Title: A Test Package +Version: 0.1.0 +Authors@R: person("Test", "Pkg", email = "test@test", role = c("aut", "cre")) +Description: A test package. +License: MIT +Depends: + R (>= 3.1) +SystemRequirements: C++11 +RoxygenNote: 6.1.1 +Encoding: UTF-8 diff --git a/test/testpkg/NAMESPACE b/test/testpkg/NAMESPACE new file mode 100644 index 0000000..20b3781 --- /dev/null +++ b/test/testpkg/NAMESPACE @@ -0,0 +1,6 @@ +# Generated by roxygen2: do not edit by hand + +export(add_it) +export(square_it) +export(subtract_it) +useDynLib(testpkg, .registration = TRUE) diff --git a/test/testpkg/R/testpkg.R b/test/testpkg/R/testpkg.R new file mode 100644 index 0000000..462e518 --- /dev/null +++ b/test/testpkg/R/testpkg.R @@ -0,0 +1,32 @@ +#' @useDynLib testpkg, .registration = TRUE +"_PACKAGE" + +#' Add it together +#' +#' @param a Number +#' @param b Number +#' @return Sum of numbers +#' @export +add_it <- function(a, b) { + .Call("add", a, b) +} + +#' Subtract it +#' +#' @param a Number +#' @param b Number +#' @return Difference of numbers +#' @export +subtract_it <- function(a, b) { + .Call("subtract", a, b) +} + +#' Square it up +#' +#' @param n Integer +#' @return Square +#' @export +square_it <- function(n) { + result <- .Fortran("square", n = as.integer(n), answer = as.integer(1)) + result$answer +} diff --git a/test/testpkg/README.md b/test/testpkg/README.md new file mode 100644 index 0000000..edbda2f --- /dev/null +++ b/test/testpkg/README.md @@ -0,0 +1,3 @@ +# testpkg + +Test package with C/C++ and Fortran code, which links against libR, BLAS, LAPACK (see [Makevars](src/Makevars)). diff --git a/test/testpkg/man/add_it.Rd b/test/testpkg/man/add_it.Rd new file mode 100644 index 0000000..7f00cf5 --- /dev/null +++ b/test/testpkg/man/add_it.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/testpkg.R +\name{add_it} +\alias{add_it} +\title{Add it together} +\usage{ +add_it(a, b) +} +\arguments{ +\item{a}{Number} + +\item{b}{Number} +} +\value{ +Sum of numbers +} +\description{ +Add it together +} diff --git a/test/testpkg/man/square_it.Rd b/test/testpkg/man/square_it.Rd new file mode 100644 index 0000000..e19a4b4 --- /dev/null +++ b/test/testpkg/man/square_it.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/testpkg.R +\name{square_it} +\alias{square_it} +\title{Square it up} +\usage{ +square_it(n) +} +\arguments{ +\item{n}{Integer} +} +\value{ +Square +} +\description{ +Square it up +} diff --git a/test/testpkg/man/subtract_it.Rd b/test/testpkg/man/subtract_it.Rd new file mode 100644 index 0000000..1b7bb2d --- /dev/null +++ b/test/testpkg/man/subtract_it.Rd @@ -0,0 +1,19 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/testpkg.R +\name{subtract_it} +\alias{subtract_it} +\title{Subtract it} +\usage{ +subtract_it(a, b) +} +\arguments{ +\item{a}{Number} + +\item{b}{Number} +} +\value{ +Difference of numbers +} +\description{ +Subtract it +} diff --git a/test/testpkg/man/testpkg-package.Rd b/test/testpkg/man/testpkg-package.Rd new file mode 100644 index 0000000..529cf99 --- /dev/null +++ b/test/testpkg/man/testpkg-package.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/testpkg.R +\docType{package} +\name{testpkg-package} +\alias{testpkg} +\alias{testpkg-package} +\title{testpkg: A Test Package} +\description{ +A test package. +} +\author{ +\strong{Maintainer}: Test Pkg \email{test@test} + +} diff --git a/test/testpkg/src/Makevars b/test/testpkg/src/Makevars new file mode 100644 index 0000000..03c539f --- /dev/null +++ b/test/testpkg/src/Makevars @@ -0,0 +1,2 @@ +CXX_STD=CXX11 +PKG_LIBS=$(MAIN_LDFLAGS) $(LDFLAGS) $(LIBR) $(LIBS) $(LAPACK_LIBS) $(BLAS_LIBS) $(SHLIB_OPENMP_CFLAGS) diff --git a/test/testpkg/src/add.c b/test/testpkg/src/add.c new file mode 100644 index 0000000..77cd5f3 --- /dev/null +++ b/test/testpkg/src/add.c @@ -0,0 +1,10 @@ +#include +#include + +SEXP add(SEXP a, SEXP b) +{ + SEXP result = PROTECT(allocVector(REALSXP, 1)); + REAL(result)[0] = asReal(a) + asReal(b); + UNPROTECT(1); + return result; +} diff --git a/test/testpkg/src/init.c b/test/testpkg/src/init.c new file mode 100644 index 0000000..7d40e5b --- /dev/null +++ b/test/testpkg/src/init.c @@ -0,0 +1,33 @@ +#include +#include +#include + +#define CALLDEF(name, n) {#name, (DL_FUNC) &name, n} +#define FDEF(name) {#name, (DL_FUNC) &F77_SUB(name), sizeof(name ## _t)/sizeof(name ## _t[0]), name ##_t} + +extern SEXP add(SEXP, SEXP); +extern SEXP subtract(SEXP, SEXP); + +void F77_SUB(square)(int *n, int *answer); + +static R_NativePrimitiveArgType square_t[] = { + INTSXP, + INTSXP +}; + +static const R_CallMethodDef CallEntries[] = { + CALLDEF(add, 2), + CALLDEF(subtract, 2), + {NULL, NULL, 0} +}; + +static const R_FortranMethodDef fMethods[] = { + FDEF(square), + {NULL, NULL, 0} +}; + +void R_init_testpkg(DllInfo *dll) +{ + R_registerRoutines(dll, NULL, CallEntries, fMethods, NULL); + R_useDynamicSymbols(dll, FALSE); +} diff --git a/test/testpkg/src/square.f b/test/testpkg/src/square.f new file mode 100644 index 0000000..77971e9 --- /dev/null +++ b/test/testpkg/src/square.f @@ -0,0 +1,5 @@ + subroutine square(x,answer) + integer, intent(in) :: x + integer, intent(out) :: answer + answer = x * x + end diff --git a/test/testpkg/src/subtract.cpp b/test/testpkg/src/subtract.cpp new file mode 100644 index 0000000..c9ef0a1 --- /dev/null +++ b/test/testpkg/src/subtract.cpp @@ -0,0 +1,10 @@ +#include +#include + +extern "C" SEXP subtract(SEXP a, SEXP b) +{ + SEXP result = PROTECT(allocVector(REALSXP, 1)); + REAL(result)[0] = asReal(a) - asReal(b); + UNPROTECT(1); + return result; +} diff --git a/test/testpkg/testpkg.Rproj b/test/testpkg/testpkg.Rproj new file mode 100644 index 0000000..cb6ae55 --- /dev/null +++ b/test/testpkg/testpkg.Rproj @@ -0,0 +1,19 @@ +Version: 1.0 + +RestoreWorkspace: No +SaveWorkspace: No +AlwaysSaveHistory: No + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: knitr +LaTeX: pdfLaTeX + +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes + +BuildType: Package +PackageRoxygenize: rd,collate,namespace diff --git a/test/testpkg/tests/test.R b/test/testpkg/tests/test.R new file mode 100644 index 0000000..7bf3ce7 --- /dev/null +++ b/test/testpkg/tests/test.R @@ -0,0 +1,5 @@ +library(testpkg) + +stopifnot(add_it(1, 2) == 3) +stopifnot(subtract_it(1, 2) == -1) +stopifnot(square_it(3) == 9) From 974cefff66d9c5a3757e2eaccb5d86ff04481f40 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 18:39:17 -0500 Subject: [PATCH 003/105] Add Make targets for easier development/testing; update README --- Makefile | 20 ++++++++++++++++++++ README.md | 35 ++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 2e28140..f0f7492 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,26 @@ rebuild-all: deps fetch-serverless-custom-file serverless-deploy.%: deps fetch-serverless-custom-file $(SLS_BINARY) deploy --stage $* +define GEN_TARGETS +docker-build-$(platform): + @cd builder && docker-compose build $(platform) + +build-r-$(platform): + @cd builder && R_VERSION=$(R_VERSION) docker-compose up $(platform) + +test-r-$(platform): + @cd test && R_VERSION=$(R_VERSION) docker-compose up $(platform) + +bash-$(platform): + docker run -it --rm --entrypoint /bin/bash -v $(CURDIR):/r-builds r-builds:$(platform) + +.PHONY: docker-build-$(platform) build-r-$(platform) test-r-$(platform) bash-$(platform) +endef + +$(foreach platform,$(PLATFORMS), \ + $(eval $(GEN_TARGETS)) \ +) + # Helper for launching a bash session on a docker image of your choice. Defaults # to "ubuntu:xenial". TARGET_IMAGE?=ubuntu:xenial diff --git a/README.md b/README.md index d6bf989..2ee37c2 100644 --- a/README.md +++ b/README.md @@ -244,33 +244,34 @@ serverless invoke stepf -n rBuilds -d '{"force": true, "versions": ["3.6.3", "4. ## Testing -To test the R builds locally, you can build the images: +To test the R builds locally, you can use the `build-r-$PLATFORM` and `test-r-$PLATFORM` +targets to build R and run the tests. The tests use the quick install script to install R, +using a locally built R if present, or otherwise a build from the CDN. ```bash -# Build images for all platforms -make docker-build +# Build R 4.1.3 for Ubuntu 22 +R_VERSION=4.1.3 make build-r-ubuntu-2204 -# Or build the image for a single platform -(cd builder && docker-compose build ubuntu-2004) +# Test R 4.1.3 for Ubuntu 22 +R_VERSION=4.1.3 make test-r-ubuntu-2204 ``` -Then run the build script: +Alternatively, you can build an image using the `docker-build-$PLATFORM` +target, launch a bash session within a container using the `bash-$PLATFORM` target, +and interactively run the build script: ```bash -# Build R for all platforms -R_VERSION=4.0.5 make docker-build-r +# Build the image for Ubuntu 22 +make docker-build-ubuntu-2204 -# Build R for a single platform -(cd builder && R_VERSION=4.0.5 docker-compose up ubuntu-2004) +# Launch a bash session for Ubuntu 22 +make bash-ubuntu-2204 -# Alternatively, run the build script from within a container -docker run -it --rm --entrypoint "/bin/bash" r-builds:ubuntu-2004 +# Build R 4.1.3 +R_VERSION=4.1.3 ./build.sh -# Build R 4.0.5 -R_VERSION=4.0.5 ./build.sh - -# Build R devel -R_VERSION=devel ./build.sh +# Build R devel with parallel execution to speed up the build +MAKEFLAGS=-j4 R_VERSION=devel ./build.sh # Build a prerelease version of R (e.g., alpha or beta) R_VERSION=rc R_TARBALL_URL=https://cran.r-project.org/src/base-prerelease/R-latest.tar.gz ./build.sh From 79bd3a378fb122c25a105e60df14eba12f4ff368 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 18:39:57 -0500 Subject: [PATCH 004/105] Fix quick install script not detecting Debian version correctly --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 3ba156d..42adb1d 100755 --- a/install.sh +++ b/install.sh @@ -110,7 +110,7 @@ detect_os_version () { cat /etc/os-release | grep -e "^VERSION_ID\=*" | cut -f 2 -d '=' | sed -e 's/"//g' fi fi - if [[ "${os}" == "Ubuntu" ]]; then + if [[ "${os}" == "Ubuntu" ]] || [[ "${os}" == "Debian" ]]; then cat /etc/os-release | grep -e "^VERSION_ID\=*" | cut -f 2 -d '=' | sed -e 's/[".]//g' fi if [[ "${os}" == "SLES15" ]] || [[ "${os}" == "LEAP15" ]]; then From df380906fb83438d2b76c64a188a04d5aa439d09 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 18:53:09 -0500 Subject: [PATCH 005/105] Fix unattended quick install hanging on tzdata for Ubuntu 18 --- install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/install.sh b/install.sh index 42adb1d..43321dc 100755 --- a/install.sh +++ b/install.sh @@ -277,6 +277,7 @@ install_deb () { if [[ "${RUN_UNATTENDED}" -ne "0" ]]; then yes="--n" yesapt="-y" + export DEBIAN_FRONTEND=noninteractive fi echo "Updating package indexes..." ${SUDO} apt-get update From 83dfc554f24e019766408566fda09959446cba2e Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 18:53:42 -0500 Subject: [PATCH 006/105] Use quick install script to test R builds --- test/docker-compose.yml | 40 ++++++++++++++++------------------------ test/test-apt.sh | 27 +++++++++++++++++++++++++++ test/test-centos.sh | 25 ------------------------- test/test-deb.sh | 25 ------------------------- test/test-opensuse.sh | 23 ----------------------- test/test-r.sh | 4 ++-- test/test-rhel.sh | 26 -------------------------- test/test-yum.sh | 32 ++++++++++++++++++++++++++++++++ test/test-zypper.sh | 26 ++++++++++++++++++++++++++ 9 files changed, 103 insertions(+), 125 deletions(-) create mode 100755 test/test-apt.sh delete mode 100755 test/test-centos.sh delete mode 100755 test/test-deb.sh delete mode 100755 test/test-opensuse.sh delete mode 100755 test/test-rhel.sh create mode 100755 test/test-yum.sh create mode 100755 test/test-zypper.sh diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 91ea366..57215bd 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -3,73 +3,65 @@ version: '2.0' services: ubuntu-1804: image: ubuntu:bionic - command: /test/test-deb.sh + command: /r-builds/test/test-apt.sh environment: - OS_IDENTIFIER=ubuntu-1804 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds ubuntu-2004: image: ubuntu:focal - command: /test/test-deb.sh + command: /r-builds/test/test-apt.sh environment: - OS_IDENTIFIER=ubuntu-2004 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds ubuntu-2204: image: ubuntu:jammy - command: /test/test-deb.sh + command: /r-builds/test/test-apt.sh environment: - OS_IDENTIFIER=ubuntu-2204 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds debian-11: image: debian:bullseye - command: /test/test-deb.sh + command: /r-builds/test/test-apt.sh environment: - OS_IDENTIFIER=debian-11 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds debian-10: image: debian:buster - command: /test/test-deb.sh + command: /r-builds/test/test-apt.sh environment: - OS_IDENTIFIER=debian-10 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds centos-7: image: centos:centos7 - command: /test/test-centos.sh + command: /r-builds/test/test-yum.sh environment: - OS_IDENTIFIER=centos-7 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds centos-8: image: rockylinux:8 - command: /test/test-centos.sh + command: /r-builds/test/test-yum.sh environment: - OS_IDENTIFIER=centos-8 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds opensuse-153: image: opensuse/leap:15.3 - command: /test/test-opensuse.sh + command: /r-builds/test/test-zypper.sh environment: - OS_IDENTIFIER=opensuse-153 - R_VERSION=${R_VERSION} volumes: - - ./:/test - - ../builder/integration/tmp:/packages + - ../:/r-builds diff --git a/test/test-apt.sh b/test/test-apt.sh new file mode 100755 index 0000000..56a8012 --- /dev/null +++ b/test/test-apt.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -ex + +SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# Install quick install script prerequisites +if ! command -v curl > /dev/null 2>&1; then + apt update -qq + apt install -y curl +fi + +# Run the quick install script. Use a locally built file if present, otherwise from the CDN. +tmpdir=$(mktemp -d) +cp -r "${SCRIPT_DIR}/../builder/integration/tmp/${OS_IDENTIFIER}/." "$tmpdir" > /dev/null 2>&1 || true +(cd "$tmpdir" && SCRIPT_ACTION=install R_VERSION="${R_VERSION}" RUN_UNATTENDED=1 "${SCRIPT_DIR}/../install.sh") + +# Show DEB info +apt show "r-${R_VERSION}" + +"${SCRIPT_DIR}/test-r.sh" + +apt remove -y "r-${R_VERSION}" + +if [ -d "/opt/R/${R_VERSION}" ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test-centos.sh b/test/test-centos.sh deleted file mode 100755 index 3cee256..0000000 --- a/test/test-centos.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -set -ex - -PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm - -if [ ! -f ${PKG_FILE} ]; then - echo "No package found, skipping tests" - exit 0 -fi - -yum -y -q update -yum -y install epel-release -yum -y install ${PKG_FILE} - -# Show rpm info -rpm -qi R-${R_VERSION} - -/test/test-r.sh - -yum -y remove R-${R_VERSION} - -if [ -d /opt/R/${R_VERSION} ]; then - echo "Failed to uninstall completely" - exit 1 -fi diff --git a/test/test-deb.sh b/test/test-deb.sh deleted file mode 100755 index b4ee24b..0000000 --- a/test/test-deb.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -set -ex - -PKG_FILE=/packages/${OS_IDENTIFIER}/r-${R_VERSION}_1_amd64.deb - -if [ ! -f ${PKG_FILE} ]; then - echo "No package found, skipping tests" - exit 0 -fi - -export DEBIAN_FRONTEND=noninteractive -apt-get update -qq -apt-get install -f -y ${PKG_FILE} - -# Show deb info -apt-cache show r-${R_VERSION} - -/test/test-r.sh - -apt-get remove -y r-${R_VERSION} - -if [ -d /opt/R/${R_VERSION} ]; then - echo "Failed to uninstall completely" - exit 1 -fi diff --git a/test/test-opensuse.sh b/test/test-opensuse.sh deleted file mode 100755 index 174b9c5..0000000 --- a/test/test-opensuse.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -ex - -PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm - -if [ ! -f ${PKG_FILE} ]; then - echo "No package found, skipping tests" - exit 0 -fi - -zypper --non-interactive --no-gpg-checks install ${PKG_FILE} - -# Show rpm info -rpm -qi R-${R_VERSION} - -/test/test-r.sh - -zypper --non-interactive remove R-${R_VERSION} - -if [ -d /opt/R/${R_VERSION} ]; then - echo "Failed to uninstall completely" - exit 1 -fi diff --git a/test/test-r.sh b/test/test-r.sh index 628acce..8783716 100755 --- a/test/test-r.sh +++ b/test/test-r.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -ex -DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" +SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" R_HOME=/opt/R/${R_VERSION}/lib/R "${R_HOME}/bin/R" --version @@ -15,4 +15,4 @@ gfortran --version # List shared library dependencies (e.g. BLAS/LAPACK) LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libR.so" -DIR=${DIR} "${R_HOME}/bin/Rscript" /test/test.R +DIR=$SCRIPT_DIR "${R_HOME}/bin/Rscript" "${SCRIPT_DIR}/test.R" diff --git a/test/test-rhel.sh b/test/test-rhel.sh deleted file mode 100755 index c2c7918..0000000 --- a/test/test-rhel.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash -set -ex - -PKG_FILE=/packages/${OS_IDENTIFIER}/R-${R_VERSION}-1-1.x86_64.rpm - -if [ ! -f ${PKG_FILE} ]; then - echo "No package found, skipping tests" - exit 0 -fi - -dnf -y install dnf-plugins-core -dnf config-manager --set-enabled crb -dnf -y install epel-release -dnf -y install ${PKG_FILE} - -# Show rpm info -rpm -qi R-${R_VERSION} - -/test/test-r.sh - -dnf -y remove R-${R_VERSION} - -if [ -d /opt/R/${R_VERSION} ]; then - echo "Failed to uninstall completely" - exit 1 -fi diff --git a/test/test-yum.sh b/test/test-yum.sh new file mode 100755 index 0000000..93a0e13 --- /dev/null +++ b/test/test-yum.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -ex + +SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +if command -v dnf > /dev/null 2>&1; then + YUM=dnf +else + YUM=yum +fi + +# Install quick install script prerequisites +if ! command -v curl > /dev/null 2>&1; then + $YUM install -y curl +fi + +# Run the quick install script. Use a locally built file if present, otherwise from the CDN. +tmpdir=$(mktemp -d) +cp -r "${SCRIPT_DIR}/../builder/integration/tmp/${OS_IDENTIFIER}/." "$tmpdir" > /dev/null 2>&1 || true +(cd "$tmpdir" && SCRIPT_ACTION=install R_VERSION="${R_VERSION}" RUN_UNATTENDED=1 "${SCRIPT_DIR}/../install.sh") + +# Show rpm info +rpm -qi "R-${R_VERSION}" + +"${SCRIPT_DIR}/test-r.sh" + +$YUM -y remove "R-${R_VERSION}" + +if [ -d "/opt/R/${R_VERSION}" ]; then + echo "Failed to uninstall completely" + exit 1 +fi diff --git a/test/test-zypper.sh b/test/test-zypper.sh new file mode 100755 index 0000000..7b15c18 --- /dev/null +++ b/test/test-zypper.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -ex + +SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" + +# Install quick install script prerequisites +if ! command -v curl > /dev/null 2>&1; then + zypper --non-interactive install curl +fi + +# Run the quick install script. Use a locally built file if present, otherwise from the CDN. +tmpdir=$(mktemp -d) +cp -r "${SCRIPT_DIR}/../builder/integration/tmp/${OS_IDENTIFIER}/." "$tmpdir" > /dev/null 2>&1 || true +(cd "$tmpdir" && SCRIPT_ACTION=install R_VERSION="${R_VERSION}" RUN_UNATTENDED=1 "${SCRIPT_DIR}/../install.sh") + +# Show RPM info +rpm -qi "R-${R_VERSION}" + +"${SCRIPT_DIR}/test-r.sh" + +zypper --non-interactive remove "R-${R_VERSION}" + +if [ -d "/opt/R/${R_VERSION}" ]; then + echo "Failed to uninstall completely" + exit 1 +fi From 4597879d10475327f009eec4f751184193c1bdd3 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 18:54:28 -0500 Subject: [PATCH 007/105] Add GitHub Actions workflow to test R builds --- .github/workflows/test.yml | 74 ++++++++++++++++++++++++++++++++++++++ Makefile | 5 ++- README.md | 25 +++++++++++++ test/get_platforms.py | 31 ++++++++++++++++ test/get_r_versions.py | 67 ++++++++++++++++++++++++++++++++++ 5 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test.yml create mode 100644 test/get_platforms.py create mode 100644 test/get_r_versions.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..565c63f --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,74 @@ +name: R builds + +on: + push: + paths: + - 'builder/**' + - 'test/**' + - 'Makefile' + workflow_dispatch: + inputs: + platforms: + description: | + Comma-separated list of platforms. Specify "all" to use all platforms (the default). + required: false + default: 'all' + type: string + r_versions: + description: | + Comma-separated list of R versions. Specify "last-N" to use the + last N minor R versions, or "all" to use all minor R versions since R 3.1. + Defaults to "last-5". + required: false + default: 'last-5' + type: string + +permissions: + contents: read + +jobs: + setup-matrix: + runs-on: ubuntu-latest + outputs: + platforms: ${{ steps.setup-matrix.outputs.platforms }} + r_versions: ${{ steps.setup-matrix.outputs.r_versions }} + steps: + - uses: actions/checkout@v3 + + - name: Set up matrix of platforms and R versions + id: setup-matrix + run: | + platforms=$(python test/get_platforms.py ${{ github.event.inputs.platforms }}) + echo "::set-output name=platforms::$platforms" + r_versions=$(python test/get_r_versions.py ${{ github.event.inputs.r_versions }}) + echo "::set-output name=r_versions::$r_versions" + + test: + needs: setup-matrix + strategy: + matrix: + platform: ${{ fromJson(needs.setup-matrix.outputs.platforms) }} + env: + R_VERSIONS: ${{ join(fromJson(needs.setup-matrix.outputs.r_versions), ' ') }} + runs-on: ubuntu-latest + name: ${{ matrix.platform }} (R ${{ join(fromJson(needs.setup-matrix.outputs.r_versions), ', ') }}) + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + driver: docker + install: true + + - name: Build R + run: | + for version in ${{ env.R_VERSIONS }}; do + R_VERSION=$version make build-r-${{ matrix.platform }} + done + + - name: Test R + run: | + for version in ${{ env.R_VERSIONS }}; do + R_VERSION=$version make test-r-${{ matrix.platform }} + done diff --git a/Makefile b/Makefile index f0f7492..186b40c 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,9 @@ $(foreach platform,$(PLATFORMS), \ $(eval $(GEN_TARGETS)) \ ) +print-platforms: + @echo $(PLATFORMS) + # Helper for launching a bash session on a docker image of your choice. Defaults # to "ubuntu:xenial". TARGET_IMAGE?=ubuntu:xenial @@ -68,4 +71,4 @@ bash: -w /r-builds \ ${TARGET_IMAGE} /bin/bash -.PHONY: deps docker-build docker-push docker-down docker-build-package docker-shell-package-env ecr-login fetch-serverless-custom-file serverless-deploy +.PHONY: deps docker-build docker-push docker-down docker-build-package docker-shell-package-env ecr-login fetch-serverless-custom-file print-platforms serverless-deploy diff --git a/README.md b/README.md index 2ee37c2..ba42a2f 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,21 @@ environment: In order for the makefile to push these new platforms to ECR, add them to the PLATFORMS variable near the top of the Makefile +### test/docker-compose.yml + +A new service in the `test/docker-compose.yml` file named according to the `platform-version` and containing the proper entries: + +```yaml + ubuntu-2204: + image: ubuntu:jammy + command: /r-builds/test/test-apt.sh + environment: + - OS_IDENTIFIER=ubuntu-2204 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds +``` + ### Submit a Pull Request Once you've followed the steps above, submit a pull request. On successful merge, builds for this platform will begin to be available from the CDN. @@ -244,6 +259,16 @@ serverless invoke stepf -n rBuilds -d '{"force": true, "versions": ["3.6.3", "4. ## Testing +Tests are automatically run on each push that changes a file in `builder/`, `test/`, or the `Makefile`. +These tests validate that R was correctly configured, built, and packaged. By default, the tests run +for the last 5 minor R versions on each platform. + +To run the tests manually, you can navigate to the [GitHub Actions workflow page](https://github.com/rstudio/r-builds/actions/workflows/test.yml) +and use "Run workflow" to run the tests from a custom branch, list of platforms, and list of R versions. + +To skip the tests, add `[skip ci]` to your commit message. See [Skipping workflow runs](https://docs.github.com/en/actions/managing-workflow-runs/skipping-workflow-runs) +for more information. + To test the R builds locally, you can use the `build-r-$PLATFORM` and `test-r-$PLATFORM` targets to build R and run the tests. The tests use the quick install script to install R, using a locally built R if present, or otherwise a build from the CDN. diff --git a/test/get_platforms.py b/test/get_platforms.py new file mode 100644 index 0000000..20d7e6d --- /dev/null +++ b/test/get_platforms.py @@ -0,0 +1,31 @@ +import argparse +import json +import subprocess + + +def main(): + parser = argparse.ArgumentParser(description="Print R-builds platforms as JSON.") + parser.add_argument( + 'platforms', + type=str, + nargs='?', + default='all', + help='Comma-separated list of platforms. Specify "all" to use all platforms (the default).' + ) + args = parser.parse_args() + platforms = _get_platforms(which=args.platforms) + print(json.dumps(platforms)) + + +def _get_platforms(which='all'): + supported_platforms = subprocess.check_output(['make', 'print-platforms'], text=True) + supported_platforms = supported_platforms.split() + if which == 'all': + return supported_platforms + platforms = which.split(',') + platforms = [p for p in platforms if p in supported_platforms] + return platforms + + +if __name__ == '__main__': + main() diff --git a/test/get_r_versions.py b/test/get_r_versions.py new file mode 100644 index 0000000..0a2ebd9 --- /dev/null +++ b/test/get_r_versions.py @@ -0,0 +1,67 @@ +import argparse +import json +import re +import urllib.request + +VERSIONS_URL = 'https://cdn.rstudio.com/r/versions.json' + +# Minimum R version for "all" +MIN_ALL_VERSION = '3.1.0' + + +def main(): + parser = argparse.ArgumentParser(description="Print R-builds R versions as JSON.") + parser.add_argument( + 'versions', + type=str, + nargs='?', + default='last-5', + help="""Comma-separated list of R versions. Specify "last-N" to use the + last N minor R versions, or "all" to use all minor R versions since R 3.1. + Defaults to "last-5". + """ + ) + args = parser.parse_args() + versions = _get_versions(which=args.versions) + print(json.dumps(versions)) + + +def _get_versions(which='all'): + supported_versions = sorted(_get_supported_versions(), reverse=True) + + last_n_versions = None + if which.startswith('last-'): + last_n_versions = int(which.replace('last-', '')) + elif which != 'all': + versions = which.split(',') + versions = [v for v in versions if v in supported_versions] + return versions + + versions = {} + for ver in supported_versions: + # Skip unreleased versions (e.g., devel, next) + if not re.match(r'[\d.]', ver): + continue + if ver < MIN_ALL_VERSION: + continue + minor_ver = tuple(ver.split('.')[0:2]) + if minor_ver not in versions: + versions[minor_ver] = ver + versions = sorted(list(versions.values()), reverse=True) + + if last_n_versions: + return versions[0:last_n_versions] + + return versions + + +def _get_supported_versions(): + request = urllib.request.Request(VERSIONS_URL) + response = urllib.request.urlopen(request) + data = response.read() + result = json.loads(data) + return result['r_versions'] + + +if __name__ == '__main__': + main() From 5576778f096bf48b5d81b1d6628f5dab1d7948bb Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 15 Aug 2022 14:49:43 -0500 Subject: [PATCH 008/105] Remove deprecated version field from docker-compose.yml --- builder/docker-compose.yml | 2 -- test/docker-compose.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 9eed916..0ab026c 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -1,5 +1,3 @@ -version: '2.0' - services: ubuntu-1804: command: ./build.sh diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 57215bd..2bb5760 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -1,5 +1,3 @@ -version: '2.0' - services: ubuntu-1804: image: ubuntu:bionic From a1f46060fa2be4787e7532a8284cd2079876f6f4 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 15 Aug 2022 18:14:43 -0500 Subject: [PATCH 009/105] Try local Docker image caching in GHA --- .github/workflows/test.yml | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 565c63f..5f659e6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,12 +58,32 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: - driver: docker install: true + # Enable Docker layer caching without having to push to a registry. + # https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#local-cache + # This may eventually be migrated to the GitHub Actions cache backend, + # which is still considered experimental. + # https://github.com/moby/buildkit#github-actions-cache-experimental + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ matrix.platform }}-buildx-${{ github.sha }} + restore-keys: ${{ matrix.platform }}-buildx- + + # Use docker buildx instead of docker-compose here because cache exporting + # does not seem to work as of docker-compose v2.6.0 and buildx v0.8.2, even + # though it works with buildx individually. - name: Build R run: | for version in ${{ env.R_VERSIONS }}; do + docker buildx build -t r-builds:${{ matrix.platform }} \ + --file builder/Dockerfile.${{ matrix.platform }} \ + --cache-from "type=local,src=/tmp/.buildx-cache" \ + --cache-to "type=local,dest=/tmp/.buildx-cache-new,mode=max" \ + --load \ + builder R_VERSION=$version make build-r-${{ matrix.platform }} done @@ -72,3 +92,11 @@ jobs: for version in ${{ env.R_VERSIONS }}; do R_VERSION=$version make test-r-${{ matrix.platform }} done + + # Temporary workaround for unbounded GHA cache growth with the local cache mode. + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache From 225b7da1f79b7cb1757ab13ff98f64398dcf243c Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 16 Aug 2022 17:09:05 -0500 Subject: [PATCH 010/105] Try parallelizing R version builds --- .github/workflows/test.yml | 67 ++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 20 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5f659e6..0585cdd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -43,15 +43,13 @@ jobs: r_versions=$(python test/get_r_versions.py ${{ github.event.inputs.r_versions }}) echo "::set-output name=r_versions::$r_versions" - test: + docker-images: needs: setup-matrix strategy: matrix: platform: ${{ fromJson(needs.setup-matrix.outputs.platforms) }} - env: - R_VERSIONS: ${{ join(fromJson(needs.setup-matrix.outputs.r_versions), ' ') }} runs-on: ubuntu-latest - name: ${{ matrix.platform }} (R ${{ join(fromJson(needs.setup-matrix.outputs.r_versions), ', ') }}) + name: Docker image (${{ matrix.platform }}) steps: - uses: actions/checkout@v3 @@ -75,23 +73,13 @@ jobs: # Use docker buildx instead of docker-compose here because cache exporting # does not seem to work as of docker-compose v2.6.0 and buildx v0.8.2, even # though it works with buildx individually. - - name: Build R + - name: Build image run: | - for version in ${{ env.R_VERSIONS }}; do - docker buildx build -t r-builds:${{ matrix.platform }} \ - --file builder/Dockerfile.${{ matrix.platform }} \ - --cache-from "type=local,src=/tmp/.buildx-cache" \ - --cache-to "type=local,dest=/tmp/.buildx-cache-new,mode=max" \ - --load \ - builder - R_VERSION=$version make build-r-${{ matrix.platform }} - done - - - name: Test R - run: | - for version in ${{ env.R_VERSIONS }}; do - R_VERSION=$version make test-r-${{ matrix.platform }} - done + docker buildx build -t r-builds:${{ matrix.platform }} \ + --file builder/Dockerfile.${{ matrix.platform }} \ + --cache-from "type=local,src=/tmp/.buildx-cache" \ + --cache-to "type=local,dest=/tmp/.buildx-cache-new,mode=max" \ + builder # Temporary workaround for unbounded GHA cache growth with the local cache mode. # https://github.com/docker/build-push-action/issues/252 @@ -100,3 +88,42 @@ jobs: run: | rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache + + test: + needs: [setup-matrix, docker-images] + strategy: + matrix: + platform: ${{ fromJson(needs.setup-matrix.outputs.platforms) }} + r_version: ${{ fromJson(needs.setup-matrix.outputs.r_versions) }} + runs-on: ubuntu-latest + name: ${{ matrix.platform }} (R ${{ matrix.r_version }}) + steps: + - uses: actions/checkout@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Restore cached Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ matrix.platform }}-buildx-${{ github.sha }} + restore-keys: ${{ matrix.platform }}-buildx- + + - name: Load cached Docker image + run: | + docker buildx build -t r-builds:${{ matrix.platform }} \ + --file builder/Dockerfile.${{ matrix.platform }} \ + --cache-from "type=local,src=/tmp/.buildx-cache" \ + --load \ + builder + + - name: Build R + run: | + R_VERSION=${{ matrix.r_version }} make build-r-${{ matrix.platform }} + + - name: Test R + run: | + R_VERSION=${{ matrix.r_version }} make test-r-${{ matrix.platform }} From 534f225b0cdaed8f067758e545a43adce2391298 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 16 Aug 2022 18:35:54 -0500 Subject: [PATCH 011/105] Trigger workflow on workflow changes --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0585cdd..8042705 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -6,6 +6,7 @@ on: - 'builder/**' - 'test/**' - 'Makefile' + - '.github/workflows/test.yml' workflow_dispatch: inputs: platforms: From b863122cd4f0f23db471f7f480a6220dd008d58d Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 17 Aug 2022 12:10:19 -0500 Subject: [PATCH 012/105] Disable fail-fast on matrix jobs since there seem to be a lot of transient errors --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8042705..4eb5c69 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -93,6 +93,7 @@ jobs: test: needs: [setup-matrix, docker-images] strategy: + fail-fast: false matrix: platform: ${{ fromJson(needs.setup-matrix.outputs.platforms) }} r_version: ${{ fromJson(needs.setup-matrix.outputs.r_versions) }} From 768316ab6f39f49cd882b75ff51dc6d53e695dc6 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 8 Aug 2022 16:46:27 -0500 Subject: [PATCH 013/105] Add R builds for RHEL 9 --- Makefile | 2 +- README.md | 33 +++++++++++--- builder/Dockerfile.rhel-9 | 90 ++++++++++++++++++++++++++++++++++++++ builder/docker-compose.yml | 11 +++++ builder/package.rhel-9 | 60 +++++++++++++++++++++++++ handler.py | 1 + serverless-resources.yml | 14 ++++++ serverless.yml | 4 +- test/docker-compose.yml | 8 ++++ 9 files changed, 215 insertions(+), 8 deletions(-) create mode 100644 builder/Dockerfile.rhel-9 create mode 100644 builder/package.rhel-9 diff --git a/Makefile b/Makefile index 186b40c..c5773db 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 opensuse-153 +PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 rhel-9 opensuse-153 SLS_BINARY ?= ./node_modules/serverless/bin/serverless deps: diff --git a/README.md b/README.md index ba42a2f..fecf59e 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ R binaries are built for the following Linux operating systems: - Ubuntu 18.04, 20.04, 22.04 - Debian 10, 11 - CentOS 7 -- Red Hat Enterprise Linux 7, 8 +- Red Hat Enterprise Linux 7, 8, 9 - openSUSE 15.3 - SUSE Linux Enterprise 15 SP3 @@ -81,30 +81,51 @@ sudo gdebi r-${R_VERSION}_1_amd64.deb #### RHEL/CentOS Linux Enable the [Extra Packages for Enterprise Linux](https://fedoraproject.org/wiki/EPEL) -repository (RHEL/CentOS 7 only): +repository (RHEL/CentOS 7 and RHEL 9 only): ```bash # CentOS / RHEL 7 sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm + +# Rocky Linux 9 / AlmaLinux 9 +sudo dnf install dnf-plugins-core +sudo dnf config-manager --set-enabled crb +sudo dnf install epel-release + +# RHEL 9 +sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm ``` -> Note that on RHEL 7, you may also need to enable the Optional repository: +> On RHEL 7, you may also need to enable the Optional repository: > ```bash -> # For RHEL 7 users with certificate subscriptions: > sudo subscription-manager repos --enable "rhel-*-optional-rpms" > -> # Or alternatively, using yum: +> # If running RHEL 7 in a public cloud, such as Amazon EC2, enable the +> # Optional repository from Red Hat Update Infrastructure (RHUI) instead > sudo yum install yum-utils > sudo yum-config-manager --enable "rhel-*-optional-rpms" > ``` +> On RHEL 9, you may also need to enable the CodeReady Linux Builder repository: +> ```bash +> sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms +> +> # If running RHEL 9 in a public cloud, such as Amazon EC2, enable the CodeReady +> # Linux Builder repository from Red Hat Update Infrastructure (RHUI) instead +> sudo dnf install dnf-plugins-core +> sudo dnf config-manager --enable codeready-builder-for-rhel-9-*-rpms +> ``` + Download the rpm package: ```bash # CentOS / RHEL 7 wget https://cdn.rstudio.com/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm -# RHEL 8 +# RHEL 8 / Rocky Linux 8 / AlmaLinux 8 wget https://cdn.rstudio.com/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm + +# RHEL 9 / Rocky Linux 9 / AlmaLinux 9 +wget https://cdn.rstudio.com/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 new file mode 100644 index 0000000..9d7f37f --- /dev/null +++ b/builder/Dockerfile.rhel-9 @@ -0,0 +1,90 @@ +FROM rockylinux:9 + +ENV OS_IDENTIFIER rhel-9 + +RUN dnf -y upgrade \ + && dnf -y install dnf-plugins-core \ + && dnf config-manager --set-enabled crb \ + && dnf install -y epel-release \ + && dnf -y install \ + autoconf \ + automake \ + bzip2-devel \ + cairo-devel \ + gcc-c++ \ + gcc-gfortran \ + java-11-openjdk-devel \ + libICE-devel \ + libSM-devel \ + libX11-devel \ + libXmu-devel \ + libXt-devel \ + libcurl-devel \ + libicu-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + libtool \ + make \ + ncurses-devel \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + readline-devel \ + rpm-build \ + ruby \ + ruby-devel \ + tcl-devel \ + tex \ + texinfo-tex \ + texlive-collection-latexrecommended \ + tk-devel \ + unzip \ + valgrind-devel \ + which \ + wget \ + xz-devel \ + zlib-devel \ + && dnf clean all + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN gem install fpm + +RUN chmod 0777 /opt + +# Configure flags for RHEL 9 that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --enable-memory-profiling \ + --with-x \ + --with-system-valgrind-headers \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh \ + --enable-prebuilt-html" + +# RHEL 9 doesn't have the inconsolata font, so override the defaults. +# This may be removed if RHEL ever adds the texlive-inconsolata package from Fedora. +# Or check `dnf provides '*/inconsolata.sty'` for a package that provides it. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Making-the-manuals +ENV R_RD4PDF="times,hyper" + +# Make sure that patching Java does not break R. +# R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which +# requires users to run `R CMD javareconf` even on minor/patch upgrades. Use the +# major version symlink to avoid this. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.rstudio.com/r/using-rjava/ +ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk + +# R 3.x requires PCRE2 for Pango support on RHEL 9 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.rhel-9 /package.sh +COPY build.sh . +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 0ab026c..fe3a031 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -76,6 +76,17 @@ services: image: r-builds:centos-8 volumes: - ./integration/tmp:/tmp/output + rhel-9: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.rhel-9 + image: r-builds:rhel-9 + volumes: + - ./integration/tmp:/tmp/output opensuse-153: command: ./build.sh environment: diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 new file mode 100644 index 0000000..a2b8cf4 --- /dev/null +++ b/builder/package.rhel-9 @@ -0,0 +1,60 @@ +if [[ ! -d /tmp/output/rhel-9 ]]; then + mkdir -p /tmp/output/rhel-9 +fi + +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + +# Create post-install script required for OpenBLAS +cat <> /post-install.sh +mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblasp.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +EOF + +# Create after-remove script to remove internal BLAS +cat <> /after-remove.sh +if [ -d /opt/R/${R_VERSION} ]; then + rm -r /opt/R/${R_VERSION} +fi +EOF + +fpm \ + -s dir \ + -t rpm \ + -v 1 \ + -n "R-${R_VERSION}" \ + --vendor "RStudio, PBC" \ + --url "https://www.r-project.org" \ + --description "GNU R statistical computation and graphics system" \ + --maintainer "RStudio, PBC " \ + --license "GPLv2+" \ + --after-install /post-install.sh \ + --after-remove /after-remove.sh \ + -p /tmp/output/rhel-9/ \ + -d bzip2-devel \ + -d gcc \ + -d gcc-c++ \ + -d gcc-gfortran \ + -d libcurl-devel \ + -d libicu-devel \ + -d libSM \ + -d libtiff \ + -d libXmu \ + -d libXt \ + -d make \ + -d openblas-devel \ + -d pango \ + -d ${pcre_lib} \ + -d tcl \ + -d tk \ + -d unzip \ + -d which \ + -d xz-devel \ + -d zip \ + -d zlib-devel \ + "/opt/R/${R_VERSION}" + +export PKG_FILE=$(ls /tmp/output/rhel-9/R-${R_VERSION}*.rpm | head -1) diff --git a/handler.py b/handler.py index 3d22e3c..7edd952 100644 --- a/handler.py +++ b/handler.py @@ -135,6 +135,7 @@ def queue_builds(event, context): 'ubuntu-1804', 'opensuse-153', 'centos-8', + 'rhel-9', 'debian-10', 'debian-11', ] and version in ['3.3.0', '3.3.1', '3.3.2']: diff --git a/serverless-resources.yml b/serverless-resources.yml index 4318ed0..8e6492b 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -228,6 +228,20 @@ rBuildsBatchJobDefinitionCentos8: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionRhel9: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" + Timeout: + AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse153: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index 8e618f8..0020176 100644 --- a/serverless.yml +++ b/serverless.yml @@ -49,9 +49,11 @@ provider: Ref: rBuildsBatchJobDefinitionCentos7 JOB_DEFINITION_ARN_centos_8: Ref: rBuildsBatchJobDefinitionCentos8 + JOB_DEFINITION_ARN_rhel_9: + Ref: rBuildsBatchJobDefinitionRhel9 JOB_DEFINITION_ARN_opensuse_153: Ref: rBuildsBatchJobDefinitionOpensuse153 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,opensuse-153 + SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 2bb5760..ca304be 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -55,6 +55,14 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + rhel-9: + image: rockylinux:9 + command: /r-builds/test/test-yum.sh + environment: + - OS_IDENTIFIER=rhel-9 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds opensuse-153: image: opensuse/leap:15.3 command: /r-builds/test/test-zypper.sh From 218b2dfed69d4118c8c69ac426dc60567734839e Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 9 Aug 2022 16:55:09 -0500 Subject: [PATCH 014/105] Make check for R 3.3.x bug easier to maintain CentOS 7 is the last distro affected by this bug, so invert the logic to make maintenance easier. --- handler.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/handler.py b/handler.py index 7edd952..ada133c 100644 --- a/handler.py +++ b/handler.py @@ -128,17 +128,9 @@ def queue_builds(event, context): for platform in event['supported_platforms']: # In R 3.3.0, 3.3.1, and 3.3.2, the configure script check for the # zlib version fails to handle versions longer than 5 characters. - # Skip builds affected by this bug. - if platform in [ - 'ubuntu-2204', - 'ubuntu-2004', - 'ubuntu-1804', - 'opensuse-153', - 'centos-8', - 'rhel-9', - 'debian-10', - 'debian-11', - ] and version in ['3.3.0', '3.3.1', '3.3.2']: + # Skip builds affected by this bug. Most newer distros will be affected. + # https://github.com/rstudio/r-builds/issues/76 + if version in ['3.3.0', '3.3.1', '3.3.2'] and platform not in ['centos-7']: continue job_ids.append(_submit_job(version, platform)) event['jobIds'] = job_ids From 53bc15735433d96f615cc41a899aa970d8084609 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 9 Aug 2022 17:51:13 -0500 Subject: [PATCH 015/105] Update quick install script for RHEL 9 --- install.sh | 45 ++++++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/install.sh b/install.sh index 43321dc..1c0ec0f 100755 --- a/install.sh +++ b/install.sh @@ -79,11 +79,11 @@ detect_os () { then distro="Amazon" fi - if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:almalinux:almalinux:8::baseos ]] + if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:almalinux:almalinux: ]] then distro="Alma" fi - if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:rocky:rocky:8.5:GA ]] + if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:rocky:rocky: ]] then distro="Rocky" fi @@ -97,17 +97,13 @@ detect_os () { # Returns the OS version detect_os_version () { os=$1 - if [[ "${os}" == "RedHat" ]]; then - if [[ $(cat /etc/os-release | grep -e "^VERSION_ID\=*" | cut -f 2 -d '=') =~ ^(\"8.|28) ]]; then - echo "8" - elif [[ $(cat /etc/os-release | grep -e "^VERSION_ID\=*" | cut -f 2 -d '=') =~ ^(\"7.) ]]; then - echo "7" + if [[ "${os}" =~ ^(RedHat|Alma|Rocky)$ ]]; then + # Get the major version. /etc/redhat-release is used if /etc/os-release isn't available, + # e.g., on CentOS/RHEL 6. + if [[ -f /etc/os-release ]]; then + cat /etc/os-release | grep VERSION_ID= | sed -E 's/VERSION_ID="([0-9.]*)"/\1/' | cut -d '.' -f 1 elif [[ -f /etc/redhat-release ]]; then - if [[ $(cat /etc/redhat-release | grep "6.") ]]; then - echo 6 - fi - elif [[ -f /etc/os-release ]]; then - cat /etc/os-release | grep -e "^VERSION_ID\=*" | cut -f 2 -d '=' | sed -e 's/"//g' + cat /etc/redhat-release | sed -E 's/[^0-9]+([0-9.]+)[^0-9]*/\1/' | cut -d '.' -f 1 fi fi if [[ "${os}" == "Ubuntu" ]] || [[ "${os}" == "Debian" ]]; then @@ -120,10 +116,6 @@ detect_os_version () { if [[ "${os}" == "Amazon" ]]; then echo "7" fi - # reuse rhel8 binaries for alma and rocky - if [[ "${os}" =~ ^(Alma|Rocky) ]]; then - echo "8" - fi } # Returns the installer type @@ -186,7 +178,11 @@ download_url () { case $os in "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") - echo "${CDN_URL}/centos-${ver}/pkgs/${name}" + if [ "${ver}" -ge 9 ]; then + echo "${CDN_URL}/rhel-${ver}/pkgs/${name}" + else + echo "${CDN_URL}/centos-${ver}/pkgs/${name}" + fi ;; "Ubuntu") echo "${CDN_URL}/ubuntu-${ver}/pkgs/${name}" @@ -328,7 +324,7 @@ install_pre () { case $os in "RedHat" | "CentOS" | "Alma" | "Rocky") - install_epel "${ver}" + install_epel "${os}" "${ver}" ;; "Amazon") install_epel_amzn @@ -352,7 +348,8 @@ install_epel_amzn () { # Installs EPEL for RHEL/CentOS/Alma/Rocky install_epel () { - ver=$1 + os=$1 + ver=$2 yes= if [[ "${RUN_UNATTENDED}" -ne "0" ]]; then yes="-y" @@ -366,6 +363,16 @@ install_epel () { ;; "8") ;; + "9") + if [[ "${os}" == "RedHat" ]]; then + ${SUDO} subscription-manager repos --enable "codeready-builder-for-rhel-9-$(arch)-rpms" + ${SUDO} dnf install ${yes} https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm + else + ${SUDO} dnf install ${yes} dnf-plugins-core + ${SUDO} dnf config-manager --set-enabled crb + ${SUDO} dnf install ${yes} epel-release + fi + ;; esac } From 979efa5b32498523def4962dc88c3064f87747b6 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 17 Aug 2022 18:07:33 -0500 Subject: [PATCH 016/105] Add documentation about how we link against BLAS/LAPACK --- builder/package.rhel-9 | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index a2b8cf4..9338288 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -8,13 +8,29 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then pcre_lib='pcre-devel' fi -# Create post-install script required for OpenBLAS +# Create post-install script required for OpenBLAS. +# +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for RSPM's binary packages. +# +# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), +# as those distributions use the alternatives system to swap BLAS libraries at runtime. +# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well +# for portability. +# +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS cat <> /post-install.sh mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep ln -s /usr/lib64/libopenblasp.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so EOF -# Create after-remove script to remove internal BLAS +# Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. cat <> /after-remove.sh if [ -d /opt/R/${R_VERSION} ]; then rm -r /opt/R/${R_VERSION} From f8392bdea8728f6dbcb7cb0e85c502023e777fc8 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 10 Aug 2022 13:56:35 -0500 Subject: [PATCH 017/105] Add R builds for openSUSE 15.4/SLES 15 SP4 --- Makefile | 2 +- README.md | 7 ++- builder/Dockerfile.opensuse-154 | 101 ++++++++++++++++++++++++++++++++ builder/docker-compose.yml | 11 ++++ builder/package.opensuse-154 | 87 +++++++++++++++++++++++++++ install.sh | 4 +- serverless-resources.yml | 14 +++++ serverless.yml | 4 +- test/docker-compose.yml | 8 +++ 9 files changed, 233 insertions(+), 5 deletions(-) create mode 100644 builder/Dockerfile.opensuse-154 create mode 100644 builder/package.opensuse-154 diff --git a/Makefile b/Makefile index c5773db..13154ad 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 rhel-9 opensuse-153 +PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 rhel-9 opensuse-153 opensuse-154 SLS_BINARY ?= ./node_modules/serverless/bin/serverless deps: diff --git a/README.md b/README.md index fecf59e..9e8bbe0 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,8 @@ R binaries are built for the following Linux operating systems: - Debian 10, 11 - CentOS 7 - Red Hat Enterprise Linux 7, 8, 9 -- openSUSE 15.3 -- SUSE Linux Enterprise 15 SP3 +- openSUSE 15.3, 15.4 +- SUSE Linux Enterprise 15 SP3, 15 SP4 Operating systems are supported until their vendor end-of-support dates, which can be found on the [RStudio Platform Support](https://www.rstudio.com/about/platform-support/) @@ -139,6 +139,9 @@ Download the rpm package: ```bash # openSUSE 15.3 / SLES 15 SP3 wget https://cdn.rstudio.com/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm + +# openSUSE 15.4 / SLES 15 SP4 +wget https://cdn.rstudio.com/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 new file mode 100644 index 0000000..fd8b2f1 --- /dev/null +++ b/builder/Dockerfile.opensuse-154 @@ -0,0 +1,101 @@ +FROM opensuse/leap:15.4 + +ENV OS_IDENTIFIER opensuse-154 + +# Most of these packages, and also the configure options that follow were determined +# by reviewing "R-base.spec" from the following OpenSUSE RPM: +# https://download.opensuse.org/repositories/devel:/languages:/R:/released/openSUSE_Leap_42.3/src/R-base-3.5.3-103.1.src.rpm + +RUN zypper --non-interactive update +RUN zypper --non-interactive --gpg-auto-import-keys -n install \ + bzip2 \ + cairo-devel \ + curl \ + fdupes \ + gcc \ + gcc-c++ \ + gcc-fortran \ + glib2-devel \ + glibc-locale \ + help2man \ + # Like openSUSE/SLES 15.3, SUSE 15.4 ships with both ICU 65 (libicu-devel) and + # ICU 69 (icu.691-devel). Prefer ICU 69 because the devel packages can't coexist, and + # zypper resolves libicu-devel to icu.691-devel when installing RPMs. + icu.691-devel \ + java-11-openjdk-devel \ + libX11-devel \ + libXScrnSaver-devel \ + libXmu-devel \ + libXt-devel \ + libbz2-devel \ + libcurl-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + make \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + perl \ + perl-macros \ + readline-devel \ + rpm-build \ + ruby \ + ruby-devel \ + shadow \ + tcl-devel \ + texinfo \ + texlive-ae \ + texlive-bibtex \ + texlive-cm-super \ + texlive-dvips \ + texlive-fancyvrb \ + texlive-helvetic \ + texlive-inconsolata \ + texlive-latex \ + texlive-makeindex \ + texlive-metafont \ + texlive-psnfss \ + texlive-tex \ + texlive-times \ + tk-devel \ + unzip \ + wget \ + xdg-utils \ + xorg-x11-devel \ + xz-devel \ + zip \ + zlib-devel \ + && zypper clean + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN gem install fpm && \ + ln -s /usr/bin/fpm.ruby2.5 /usr/local/bin/fpm + +RUN chmod 0777 /opt + +# Configure flags for SUSE that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --with-x \ + --enable-memory-profiling \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh" + +# Make sure that patching Java does not break R. +# On SUSE, the default JAVA_HOME path always uses the major Java version only, +# but the JDK path is chosen by default. We change this to the JRE path to +# support users who only want to install the JRE (non-devel) package. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.rstudio.com/r/using-rjava/ +ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk + +COPY package.opensuse-154 /package.sh +COPY build.sh . +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index fe3a031..0740b46 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -98,3 +98,14 @@ services: image: r-builds:opensuse-153 volumes: - ./integration/tmp:/tmp/output + opensuse-154: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.opensuse-154 + image: r-builds:opensuse-154 + volumes: + - ./integration/tmp:/tmp/output diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 new file mode 100644 index 0000000..31921bb --- /dev/null +++ b/builder/package.opensuse-154 @@ -0,0 +1,87 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/opensuse-154 ]]; then + mkdir -p /tmp/output/opensuse-154 +fi + +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + +# Create post-install script required for OpenBLAS. +# +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for RSPM's binary packages. +# +# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), +# as those distributions use the alternatives system to swap BLAS libraries at runtime. +# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well +# for portability. +# +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS +cat <> /post-install.sh +mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +EOF + +# Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. +cat <> /after-remove.sh +if [ -d /opt/R/${R_VERSION} ]; then + rm -r /opt/R/${R_VERSION} +fi +EOF + +fpm \ + -s dir \ + -t rpm \ + -v 1 \ + -n "R-${R_VERSION}" \ + --vendor "RStudio, PBC" \ + --url "http://www.r-project.org/" \ + --description "GNU R statistical computation and graphics system" \ + --maintainer "RStudio, PBC " \ + --license "GPLv2" \ + --after-install /post-install.sh \ + --after-remove /after-remove.sh \ + -p /tmp/output/opensuse-154/ \ + -d fontconfig \ + -d gcc \ + -d gcc-c++ \ + -d gcc-fortran \ + -d glibc-locale \ + -d gzip \ + -d icu.691-devel \ + -d libbz2-devel \ + -d libcairo2 \ + -d libcurl-devel \ + -d libfreetype6 \ + -d libgomp1 \ + -d libjpeg62 \ + -d libopenblas_pthreads-devel \ + -d libpango-1_0-0 \ + -d libreadline7 \ + -d libtiff5 \ + -d make \ + -d ${pcre_lib} \ + -d tar \ + -d tcl \ + -d tk \ + -d unzip \ + -d which \ + -d xorg-x11 \ + -d xorg-x11-fonts-100dpi \ + -d xorg-x11-fonts-75dpi \ + -d xz-devel \ + -d zip \ + -d zlib-devel \ + "/opt/R/${R_VERSION}" + +export PKG_FILE=$(ls /tmp/output/opensuse-154/R-${R_VERSION}*.rpm | head -1) diff --git a/install.sh b/install.sh index 1c0ec0f..1d22467 100755 --- a/install.sh +++ b/install.sh @@ -194,7 +194,9 @@ download_url () { echo "${CDN_URL}/opensuse-42/pkgs/${name}" ;; "LEAP15" | "SLES15") - if [ "${ver}" -ge 153 ]; then + if [ "${ver}" -ge 154 ]; then + echo "${CDN_URL}/opensuse-154/pkgs/${name}" + elif [ "${ver}" -ge 153 ]; then echo "${CDN_URL}/opensuse-153/pkgs/${name}" elif [ "${ver}" -eq 152 ]; then echo "${CDN_URL}/opensuse-152/pkgs/${name}" diff --git a/serverless-resources.yml b/serverless-resources.yml index 8e6492b..fb0a1f3 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -256,6 +256,20 @@ rBuildsBatchJobDefinitionOpensuse153: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-153" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionOpensuse154: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" + Timeout: + AttemptDurationSeconds: 7200 # step function cloudwatch event trigger resources rBuildsEventRuleIamRole: diff --git a/serverless.yml b/serverless.yml index 0020176..1ca0da9 100644 --- a/serverless.yml +++ b/serverless.yml @@ -53,7 +53,9 @@ provider: Ref: rBuildsBatchJobDefinitionRhel9 JOB_DEFINITION_ARN_opensuse_153: Ref: rBuildsBatchJobDefinitionOpensuse153 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153 + JOB_DEFINITION_ARN_opensuse_154: + Ref: rBuildsBatchJobDefinitionOpensuse154 + SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index ca304be..db2dc3f 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -71,3 +71,11 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + opensuse-154: + image: opensuse/leap:15.4 + command: /r-builds/test/test-zypper.sh + environment: + - OS_IDENTIFIER=opensuse-154 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds From a245fc65d9a00f4ca814b4822f0f0bb3915c475e Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 22 Aug 2022 18:52:05 -0500 Subject: [PATCH 018/105] Fix fpm installation on openSUSE 15.4; switch to nfpm fpm currently fails to install because the public_suffix gem dependency requires Ruby 2.6, which openSUSE 15.4 doesn't provide. Because there have been so many Ruby dependency issues with fpm in the past, switch to the fewer- dependency nfpm, which also has better support for code signing if we want to do that in the future. --- builder/Dockerfile.opensuse-154 | 7 +-- builder/package.opensuse-154 | 104 +++++++++++++++++--------------- 2 files changed, 60 insertions(+), 51 deletions(-) diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index fd8b2f1..042f188 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -40,8 +40,6 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ perl-macros \ readline-devel \ rpm-build \ - ruby \ - ruby-devel \ shadow \ tcl-devel \ texinfo \ @@ -74,8 +72,9 @@ RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2 ./aws/install && \ rm -rf aws awscliv2.zip -RUN gem install fpm && \ - ln -s /usr/bin/fpm.ruby2.5 /usr/local/bin/fpm +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ + zypper --non-interactive --no-gpg-checks install nfpm_amd64.rpm && \ + rm nfpm_amd64.rpm RUN chmod 0777 /opt diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index 31921bb..f11f113 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/opensuse-154 ]]; then - mkdir -p /tmp/output/opensuse-154 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -39,49 +39,59 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF -fpm \ - -s dir \ - -t rpm \ - -v 1 \ - -n "R-${R_VERSION}" \ - --vendor "RStudio, PBC" \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC " \ - --license "GPLv2" \ - --after-install /post-install.sh \ - --after-remove /after-remove.sh \ - -p /tmp/output/opensuse-154/ \ - -d fontconfig \ - -d gcc \ - -d gcc-c++ \ - -d gcc-fortran \ - -d glibc-locale \ - -d gzip \ - -d icu.691-devel \ - -d libbz2-devel \ - -d libcairo2 \ - -d libcurl-devel \ - -d libfreetype6 \ - -d libgomp1 \ - -d libjpeg62 \ - -d libopenblas_pthreads-devel \ - -d libpango-1_0-0 \ - -d libreadline7 \ - -d libtiff5 \ - -d make \ - -d ${pcre_lib} \ - -d tar \ - -d tcl \ - -d tk \ - -d unzip \ - -d which \ - -d xorg-x11 \ - -d xorg-x11-fonts-100dpi \ - -d xorg-x11-fonts-75dpi \ - -d xz-devel \ - -d zip \ - -d zlib-devel \ - "/opt/R/${R_VERSION}" +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +release: 1 +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- fontconfig +- gcc +- gcc-c++ +- gcc-fortran +- glibc-locale +- gzip +- icu.691-devel +- libbz2-devel +- libcairo2 +- libcurl-devel +- libfreetype6 +- libgomp1 +- libjpeg62 +- libopenblas_pthreads-devel +- libpango-1_0-0 +- libreadline7 +- libtiff5 +- make +- ${pcre_lib} +- tar +- tcl +- tk +- unzip +- which +- xorg-x11 +- xorg-x11-fonts-100dpi +- xorg-x11-fonts-75dpi +- xz-devel +- zip +- zlib-devel +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF -export PKG_FILE=$(ls /tmp/output/opensuse-154/R-${R_VERSION}*.rpm | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) From 1552c23b3c7ef81d3a39749976be00fcf7c3b3e1 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 22 Aug 2022 19:02:33 -0500 Subject: [PATCH 019/105] Replace fpm with nfpm for the newest platforms fpm has had multiple Ruby gem dependency issues, and nfpm has better support for code signing if we wanted to do that in the future. The rest of the platforms may be migrated to nfpm later. --- builder/Dockerfile.debian-11 | 8 ++- builder/Dockerfile.rhel-9 | 6 +- builder/Dockerfile.ubuntu-2204 | 6 +- builder/package.debian-11 | 108 +++++++++++++++++--------------- builder/package.rhel-9 | 88 ++++++++++++++------------ builder/package.ubuntu-2204 | 109 ++++++++++++++++++--------------- 6 files changed, 181 insertions(+), 144 deletions(-) diff --git a/builder/Dockerfile.debian-11 b/builder/Dockerfile.debian-11 index ba4d1bd..1845673 100644 --- a/builder/Dockerfile.debian-11 +++ b/builder/Dockerfile.debian-11 @@ -6,15 +6,17 @@ RUN set -x \ && export DEBIAN_FRONTEND=noninteractive \ && echo 'deb-src http://deb.debian.org/debian bullseye main' >> /etc/apt/sources.list \ && apt-get update \ - && apt-get install -y gcc libcurl4-openssl-dev libicu-dev \ - libopenblas-base libpcre2-dev make python3-pip ruby ruby-dev wget \ + && apt-get install -y curl gcc libcurl4-openssl-dev libicu-dev \ + libopenblas-base libpcre2-dev make python3-pip wget \ && apt-get build-dep -y r-base RUN pip3 install awscli RUN chmod 0777 /opt -RUN gem install fpm +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ + apt install -y ./nfpm_amd64.deb && \ + rm nfpm_amd64.deb # Override the default pager used by R ENV PAGER /usr/bin/pager diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index 9d7f37f..e57eb31 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -32,8 +32,6 @@ RUN dnf -y upgrade \ pcre2-devel \ readline-devel \ rpm-build \ - ruby \ - ruby-devel \ tcl-devel \ tex \ texinfo-tex \ @@ -53,7 +51,9 @@ RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2 ./aws/install && \ rm -rf aws awscliv2.zip -RUN gem install fpm +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ + dnf install -y nfpm_amd64.rpm && \ + rm nfpm_amd64.rpm RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-2204 b/builder/Dockerfile.ubuntu-2204 index 4416aec..5d28093 100644 --- a/builder/Dockerfile.ubuntu-2204 +++ b/builder/Dockerfile.ubuntu-2204 @@ -6,12 +6,14 @@ RUN set -x \ && sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \ && export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python3-pip ruby ruby-dev \ + && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python3-pip \ && apt-get build-dep -y r-base RUN pip3 install awscli -RUN gem install fpm +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ + apt install -y ./nfpm_amd64.deb && \ + rm nfpm_amd64.deb RUN chmod 0777 /opt diff --git a/builder/package.debian-11 b/builder/package.debian-11 index 27f1d0f..b897a5a 100644 --- a/builder/package.debian-11 +++ b/builder/package.debian-11 @@ -1,59 +1,69 @@ #!/bin/bash -if [[ ! -d /tmp/output/debian-11 ]]; then - mkdir -p /tmp/output/debian-11 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1. On Debian 11, R 3.x also requires PCRE2 for Pango support. -pcre_lib_flags='-d libpcre2-dev' +pcre_libs='- libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib_flags='-d libpcre2-dev -d libpcre3-dev' + pcre_libs='- libpcre2-dev +- libpcre3-dev' fi -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/debian-11/ \ - -d ca-certificates \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4-openssl-dev \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d liblzma-dev \ - -d libopenblas-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - ${pcre_lib_flags} \ - -d libpng16-16 \ - -d libreadline8 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: gnu-r +priority: optional +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- ca-certificates +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4-openssl-dev +- libglib2.0-0 +- libgomp1 +- libicu-dev +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +${pcre_libs} +- libpng16-16 +- libreadline8 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/debian-11/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index 9338288..064bacf 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -1,5 +1,7 @@ -if [[ ! -d /tmp/output/rhel-9 ]]; then - mkdir -p /tmp/output/rhel-9 +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -37,40 +39,50 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF -fpm \ - -s dir \ - -t rpm \ - -v 1 \ - -n "R-${R_VERSION}" \ - --vendor "RStudio, PBC" \ - --url "https://www.r-project.org" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC " \ - --license "GPLv2+" \ - --after-install /post-install.sh \ - --after-remove /after-remove.sh \ - -p /tmp/output/rhel-9/ \ - -d bzip2-devel \ - -d gcc \ - -d gcc-c++ \ - -d gcc-gfortran \ - -d libcurl-devel \ - -d libicu-devel \ - -d libSM \ - -d libtiff \ - -d libXmu \ - -d libXt \ - -d make \ - -d openblas-devel \ - -d pango \ - -d ${pcre_lib} \ - -d tcl \ - -d tk \ - -d unzip \ - -d which \ - -d xz-devel \ - -d zip \ - -d zlib-devel \ - "/opt/R/${R_VERSION}" +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +release: 1 +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- openblas-devel +- pango +- ${pcre_lib} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF -export PKG_FILE=$(ls /tmp/output/rhel-9/R-${R_VERSION}*.rpm | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index b7df72d..175065c 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -1,58 +1,69 @@ #!/bin/bash -if [[ ! -d /tmp/output/ubuntu-2204 ]]; then - mkdir -p /tmp/output/ubuntu-2204 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1. On Ubuntu 22, R 3.x also requires PCRE2 for Pango support. -pcre_lib_flags='-d libpcre2-dev' +pcre_libs='- libpcre2-dev' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib_flags='-d libpcre2-dev -d libpcre3-dev' + pcre_libs='- libpcre2-dev +- libpcre3-dev' fi -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/ubuntu-2204/ \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4 \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d libjpeg8 \ - -d liblzma-dev \ - -d libopenblas-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - ${pcre_lib_flags} \ - -d libpng16-16 \ - -d libreadline8 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: universe/math +priority: optional +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4 +- libglib2.0-0 +- libgomp1 +- libicu-dev +- libjpeg8 +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +${pcre_libs} +- libpng16-16 +- libreadline8 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/ubuntu-2204/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) From ef86564f8f51fdfeb1cc23c34766c9d281a78dbd Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 23 Aug 2022 18:05:40 -0500 Subject: [PATCH 020/105] Replace fpm with nFPM for all other platforms --- builder/Dockerfile.centos-7 | 7 +- builder/Dockerfile.centos-8 | 7 +- builder/Dockerfile.debian-10 | 9 +-- builder/Dockerfile.opensuse-153 | 9 ++- builder/Dockerfile.ubuntu-1804 | 7 +- builder/Dockerfile.ubuntu-2004 | 7 +- builder/build.sh | 2 +- builder/package.centos-7 | 90 ++++++++++++++------------ builder/package.centos-8 | 92 +++++++++++++++------------ builder/package.debian-10 | 103 ++++++++++++++++-------------- builder/package.opensuse-153 | 109 +++++++++++++++++--------------- builder/package.ubuntu-1804 | 103 ++++++++++++++++-------------- builder/package.ubuntu-2004 | 106 +++++++++++++++++-------------- 13 files changed, 350 insertions(+), 301 deletions(-) diff --git a/builder/Dockerfile.centos-7 b/builder/Dockerfile.centos-7 index 2344c56..9853b61 100644 --- a/builder/Dockerfile.centos-7 +++ b/builder/Dockerfile.centos-7 @@ -33,8 +33,6 @@ RUN yum -y update \ python3-pip \ readline-devel \ rpm-build \ - ruby \ - ruby-devel \ tcl-devel \ tex \ texinfo-tex \ @@ -51,8 +49,9 @@ RUN yum -y update \ RUN pip3 install awscli --upgrade --user && \ ln -s /root/.local/bin/aws /usr/bin/aws -# Pin fpm for compatibility with Ruby < 2.3 -RUN gem install ffi:1.12.2 fpm:1.11.0 +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ + yum install -y nfpm_amd64.rpm && \ + rm nfpm_amd64.rpm RUN chmod 0777 /opt diff --git a/builder/Dockerfile.centos-8 b/builder/Dockerfile.centos-8 index a5a0db1..6f80956 100644 --- a/builder/Dockerfile.centos-8 +++ b/builder/Dockerfile.centos-8 @@ -34,8 +34,6 @@ RUN dnf -y upgrade \ python3-pip \ readline-devel \ rpm-build \ - ruby \ - ruby-devel \ tcl-devel \ tex \ texinfo-tex \ @@ -52,8 +50,9 @@ RUN dnf -y upgrade \ RUN pip3 install awscli --upgrade --user \ && ln -s /root/.local/bin/aws /usr/bin/aws -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ + dnf install -y nfpm_amd64.rpm && \ + rm nfpm_amd64.rpm RUN chmod 0777 /opt diff --git a/builder/Dockerfile.debian-10 b/builder/Dockerfile.debian-10 index ea20ef3..a6c812a 100644 --- a/builder/Dockerfile.debian-10 +++ b/builder/Dockerfile.debian-10 @@ -6,16 +6,17 @@ RUN set -x \ && export DEBIAN_FRONTEND=noninteractive \ && echo 'deb-src http://deb.debian.org/debian buster main' >> /etc/apt/sources.list \ && apt-get update \ - && apt-get install -y gcc libcurl4-openssl-dev libicu-dev \ - libopenblas-base libpcre2-dev make python3-pip ruby ruby-dev wget \ + && apt-get install -y curl gcc libcurl4-openssl-dev libicu-dev \ + libopenblas-base libpcre2-dev make python3-pip wget \ && apt-get build-dep -y r-base RUN pip3 install awscli RUN chmod 0777 /opt -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ + apt install -y ./nfpm_amd64.deb && \ + rm nfpm_amd64.deb # Override the default pager used by R ENV PAGER /usr/bin/pager diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index 83b1372..87a144c 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -10,6 +10,7 @@ RUN zypper --non-interactive update RUN zypper --non-interactive --gpg-auto-import-keys -n install \ bzip2 \ cairo-devel \ + curl \ fdupes \ gcc \ gcc-c++ \ @@ -41,8 +42,6 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ python-pip \ readline-devel \ rpm-build \ - ruby \ - ruby-devel \ shadow \ tcl-devel \ texinfo \ @@ -71,9 +70,9 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ RUN pip install awscli -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 && \ - ln -s /usr/bin/fpm.ruby2.5 /usr/local/bin/fpm +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ + zypper --non-interactive --no-gpg-checks install nfpm_amd64.rpm && \ + rm nfpm_amd64.rpm RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-1804 b/builder/Dockerfile.ubuntu-1804 index a2331d4..4c38fbd 100644 --- a/builder/Dockerfile.ubuntu-1804 +++ b/builder/Dockerfile.ubuntu-1804 @@ -6,13 +6,14 @@ RUN set -x \ && sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \ && export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python-pip ruby ruby-dev \ + && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python-pip \ && apt-get build-dep -y r-base RUN pip install awscli -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ + apt install -y ./nfpm_amd64.deb && \ + rm nfpm_amd64.deb RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-2004 b/builder/Dockerfile.ubuntu-2004 index fa70db0..4733f5e 100644 --- a/builder/Dockerfile.ubuntu-2004 +++ b/builder/Dockerfile.ubuntu-2004 @@ -6,13 +6,14 @@ RUN set -x \ && sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \ && export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ - && apt-get install -y libblas-dev libcurl4-openssl-dev libicu-dev liblapack-dev libpcre2-dev wget python3-pip ruby ruby-dev \ + && apt-get install -y curl libblas-dev libcurl4-openssl-dev libicu-dev liblapack-dev libpcre2-dev wget python3-pip \ && apt-get build-dep -y r-base RUN pip3 install awscli -# Pin fpm to avoid git dependency in 1.12.0 -RUN gem install fpm:1.11.0 +RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ + apt install -y ./nfpm_amd64.deb && \ + rm nfpm_amd64.deb RUN chmod 0777 /opt diff --git a/builder/build.sh b/builder/build.sh index f7e1e90..8505583 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -157,7 +157,7 @@ EOF } # check for packager script -## If it exists this build is ready for packaging with fpm, so run the script +## If it exists this build is ready for packaging with nFPM, so run the script ## else do nothing package_r() { if [[ -f /package.sh ]]; then diff --git a/builder/package.centos-7 b/builder/package.centos-7 index 1623d6a..6bad41a 100644 --- a/builder/package.centos-7 +++ b/builder/package.centos-7 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/centos-7 ]]; then - mkdir -p /tmp/output/centos-7 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -17,50 +17,56 @@ ln -s /usr/lib64/libopenblasp.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas -cat <> /before-remove.sh +cat <> /after-remove.sh if [ -d /opt/R/${R_VERSION} ]; then rm -r /opt/R/${R_VERSION} fi EOF -fpm \ - -s dir \ - -t rpm \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - --after-install /post-install.sh \ - --after-remove /before-remove.sh \ - -p /tmp/output/centos-7/ \ - -d bzip2-devel \ - -d gcc \ - -d gcc-c++ \ - -d gcc-gfortran \ - -d libcurl-devel \ - -d libicu-devel \ - -d libSM \ - -d libtiff \ - -d libXmu \ - -d libXt \ - -d make \ - -d openblas-devel \ - -d pango \ - -d ${pcre_lib} \ - -d tcl \ - -d tk \ - -d unzip \ - -d which \ - -d xz-devel \ - -d zip \ - -d zlib-devel \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +release: 1 +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- openblas-devel +- pango +- ${pcre_lib} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/centos-7/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.centos-8 b/builder/package.centos-8 index 4568261..c541087 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -1,5 +1,7 @@ -if [[ ! -d /tmp/output/centos-8 ]]; then - mkdir -p /tmp/output/centos-8 +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -15,50 +17,56 @@ ln -s /usr/lib64/libopenblasp.so.0 /opt/R/${R_VERSION}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas -cat <> /before-remove.sh +cat <> /after-remove.sh if [ -d /opt/R/${R_VERSION} ]; then rm -r /opt/R/${R_VERSION} fi EOF -fpm \ - -s dir \ - -t rpm \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - --after-install /post-install.sh \ - --after-remove /before-remove.sh \ - -p /tmp/output/centos-8/ \ - -d bzip2-devel \ - -d gcc \ - -d gcc-c++ \ - -d gcc-gfortran \ - -d libcurl-devel \ - -d libicu-devel \ - -d libSM \ - -d libtiff \ - -d libXmu \ - -d libXt \ - -d make \ - -d openblas-threads \ - -d pango \ - -d ${pcre_lib} \ - -d tcl \ - -d tk \ - -d unzip \ - -d which \ - -d xz-devel \ - -d zip \ - -d zlib-devel \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +release: 1 +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- openblas-threads +- pango +- ${pcre_lib} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/centos-8/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.debian-10 b/builder/package.debian-10 index f1319fc..82acaae 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/debian-10 ]]; then - mkdir -p /tmp/output/debian-10 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -10,50 +10,59 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then pcre_lib='libpcre3-dev' fi -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/debian-10/ \ - -d ca-certificates \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4-openssl-dev \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d liblzma-dev \ - -d libopenblas-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - -d ${pcre_lib} \ - -d libpng16-16 \ - -d libreadline7 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: gnu-r +priority: optional +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- ca-certificates +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4-openssl-dev +- libglib2.0-0 +- libgomp1 +- libicu-dev +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +- ${pcre_lib} +- libpng16-16 +- libreadline7 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/debian-10/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index fe1a3dc..0385da0 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/opensuse-153 ]]; then - mkdir -p /tmp/output/opensuse-153 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -17,58 +17,65 @@ ln -s /usr/lib64/libopenblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas -cat <> /before-remove.sh +cat <> /after-remove.sh if [ -d /opt/R/${R_VERSION} ]; then rm -r /opt/R/${R_VERSION} fi EOF -fpm \ - -s dir \ - -t rpm \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - --after-install /post-install.sh \ - --after-remove /before-remove.sh \ - -p /tmp/output/opensuse-153/ \ - -d fontconfig \ - -d gcc \ - -d gcc-c++ \ - -d gcc-fortran \ - -d glibc-locale \ - -d gzip \ - -d icu.691-devel \ - -d libbz2-devel \ - -d libcairo2 \ - -d libcurl-devel \ - -d libfreetype6 \ - -d libgomp1 \ - -d libjpeg62 \ - -d libpango-1_0-0 \ - -d libreadline7 \ - -d libtiff5 \ - -d make \ - -d openblas-devel \ - -d ${pcre_lib} \ - -d tar \ - -d tcl \ - -d tk \ - -d unzip \ - -d which \ - -d xorg-x11 \ - -d xorg-x11-fonts-100dpi \ - -d xorg-x11-fonts-75dpi \ - -d xz-devel \ - -d zip \ - -d zlib-devel \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +release: 1 +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- fontconfig +- gcc +- gcc-c++ +- gcc-fortran +- glibc-locale +- gzip +- icu.691-devel +- libbz2-devel +- libcairo2 +- libcurl-devel +- libfreetype6 +- libgomp1 +- libjpeg62 +- libpango-1_0-0 +- libreadline7 +- libtiff5 +- make +- openblas-devel +- ${pcre_lib} +- tar +- tcl +- tk +- unzip +- which +- xorg-x11 +- xorg-x11-fonts-100dpi +- xorg-x11-fonts-75dpi +- xz-devel +- zip +- zlib-devel +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/opensuse-153/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 123d9ed..8501a89 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/ubuntu-1804 ]]; then - mkdir -p /tmp/output/ubuntu-1804 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -10,50 +10,59 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then pcre_lib='libpcre3-dev' fi -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/ubuntu-1804/ \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4 \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d libjpeg8 \ - -d liblzma-dev \ - -d libopenblas-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - -d ${pcre_lib} \ - -d libpng16-16 \ - -d libreadline7 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: universe/math +priority: optional +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4 +- libglib2.0-0 +- libgomp1 +- libicu-dev +- libjpeg8 +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +- ${pcre_lib} +- libpng16-16 +- libreadline7 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/ubuntu-1804/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index 191ce89..2465ff9 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -1,7 +1,7 @@ #!/bin/bash -if [[ ! -d /tmp/output/ubuntu-2004 ]]; then - mkdir -p /tmp/output/ubuntu-2004 +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi # R 3.x requires PCRE1 @@ -10,50 +10,60 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then pcre_lib='libpcre3-dev' fi -fpm \ - -s dir \ - -t deb \ - -v 1 \ - -n R-${R_VERSION} \ - --vendor "RStudio, PBC" \ - --deb-priority "optional" \ - --deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \ - --url "http://www.r-project.org/" \ - --description "GNU R statistical computation and graphics system" \ - --maintainer "RStudio, PBC https://github.com/rstudio/r-builds" \ - --license "GPL-2" \ - -p /tmp/output/ubuntu-2004/ \ - -d g++ \ - -d gcc \ - -d gfortran \ - -d libbz2-dev \ - -d libblas-dev \ - -d libc6 \ - -d libcairo2 \ - -d libcurl4 \ - -d libglib2.0-0 \ - -d libgomp1 \ - -d libicu-dev \ - -d libjpeg8 \ - -d liblapack-dev \ - -d liblzma-dev \ - -d libpango-1.0-0 \ - -d libpangocairo-1.0-0 \ - -d libpaper-utils \ - -d ${pcre_lib} \ - -d libpng16-16 \ - -d libreadline8 \ - -d libtcl8.6 \ - -d libtiff5 \ - -d libtk8.6 \ - -d libx11-6 \ - -d libxt6 \ - -d make \ - -d ucf \ - -d unzip \ - -d zip \ - -d zlib1g-dev \ - /opt/R/${R_VERSION} +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: universe/math +priority: optional +maintainer: RStudio, PBC +description: | + GNU R statistical computation and graphics system +vendor: RStudio, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- g++ +- gcc +- gfortran +- libbz2-dev +- libblas-dev +- libc6 +- libcairo2 +- libcurl4 +- libglib2.0-0 +- libgomp1 +- libicu-dev +- libjpeg8 +- liblapack-dev +- liblzma-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +- ${pcre_lib} +- libpng16-16 +- libreadline8 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: /opt/R/${R_VERSION} + dst: /opt/R/${R_VERSION} +EOF -shopt -s extglob -export PKG_FILE=$(ls /tmp/output/ubuntu-2004/[rR]-${R_VERSION}*.@(deb|rpm) | head -1) +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) From 1e34ec86b5b4bed29d6ddd2b672aea0a16d93d83 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 25 Aug 2022 11:48:11 -0500 Subject: [PATCH 021/105] Increase ECS volume size to 96 GiB --- serverless-resources.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index fb0a1f3..111dfa4 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -83,7 +83,7 @@ rBuildsEcsLaunchTemplate: - DeviceName: /dev/xvdcz Ebs: VolumeType: gp3 - VolumeSize: 64 + VolumeSize: 96 rBuildsBatchComputeEnvironment: Type: AWS::Batch::ComputeEnvironment From 4c91f1e9d681cf0c51d94df7bcce360e6dc26e0a Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Fri, 26 Aug 2022 11:35:02 -0500 Subject: [PATCH 022/105] Use latest version of the launch template Changes to the launch template (e.g., ECS volume type/size) were not being applied because the launch template was set to the default version 1 rather than the latest changed version. --- serverless-resources.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index 111dfa4..565eedd 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -96,6 +96,7 @@ rBuildsBatchComputeEnvironment: LaunchTemplate: LaunchTemplateId: Ref: rBuildsEcsLaunchTemplate + Version: '$Latest' SpotIamFleetRole: "Fn::GetAtt": [ rBuildsSpotFleetIamRole, Arn ] SecurityGroupIds: ${self:custom.securityGroupIds} From 27472d6bc3f8bbff5e8c9f9c879bbee6f03bdca7 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Fri, 26 Aug 2022 14:41:10 -0500 Subject: [PATCH 023/105] Update block device name for Amazon Linux 2 Amazon Linux 1 AMIs had a separate /dev/xvdcz volume used for Docker storage. Amazon Linux 2 AMIs now only have a single root volume at /dev/xvda. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-storage-config.html --- serverless-resources.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 565eedd..d62a9ee 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -80,7 +80,7 @@ rBuildsEcsLaunchTemplate: LaunchTemplateName: r-builds-${self:provider.stage}-batch-managed-ecs-larger-volume LaunchTemplateData: BlockDeviceMappings: - - DeviceName: /dev/xvdcz + - DeviceName: /dev/xvda Ebs: VolumeType: gp3 VolumeSize: 96 From f6447d840834d8598ff9b3dcb10a6a657728f93a Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 29 Aug 2022 15:53:29 -0500 Subject: [PATCH 024/105] Increase ECS_CONTAINER_CREATE_TIMEOUT to 10m to mitigate Docker timeouts Many jobs were failing to start from an error: DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s Try to mitigate this by increasing the Docker timeout from the default 4m to 10m. ECS_CONTAINER_CREATE_TIMEOUT is not documented in the AWS developer guide, but it does seem to be a real setting from the ECS agent repo README: https://github.com/aws/amazon-ecs-agent/blob/a5f8d25f66fbf4f8839d5e7e5fcbc635a4d75c5e/README.md --- serverless-resources.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index d62a9ee..09a69fa 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -84,6 +84,11 @@ rBuildsEcsLaunchTemplate: Ebs: VolumeType: gp3 VolumeSize: 96 + UserData: + Fn::Base64: | + #!/bin/bash + # Mitigate DockerTimeoutError errors from the default timeout of 4m + echo "ECS_CONTAINER_CREATE_TIMEOUT=10m" >> /etc/ecs/ecs.config rBuildsBatchComputeEnvironment: Type: AWS::Batch::ComputeEnvironment From 4cb2d64968b138c0944f112743efe8f2b141c473 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 31 Aug 2022 13:34:57 -0500 Subject: [PATCH 025/105] Update instance types, removing memory optimized instances The main purpose of this change is to trigger an infrastructure update for the Batch compute environment, since changing the LaunchTemplateData doesn't trigger that. The instance types change is arbitrary, but memory optimized instances aren't really necessary either. --- serverless-resources.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 09a69fa..90ac2b5 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -114,9 +114,6 @@ rBuildsBatchComputeEnvironment: - m6i - m5 - m5a - - r6i - - r5 - - r5a - c6i - c5 - c5a From 0b6c741323caa75028fb1259b120dce604a8670b Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Thu, 1 Sep 2022 13:57:17 -0400 Subject: [PATCH 026/105] remove for testing purposes --- serverless-resources.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 90ac2b5..d8f5571 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -84,11 +84,6 @@ rBuildsEcsLaunchTemplate: Ebs: VolumeType: gp3 VolumeSize: 96 - UserData: - Fn::Base64: | - #!/bin/bash - # Mitigate DockerTimeoutError errors from the default timeout of 4m - echo "ECS_CONTAINER_CREATE_TIMEOUT=10m" >> /etc/ecs/ecs.config rBuildsBatchComputeEnvironment: Type: AWS::Batch::ComputeEnvironment From b2c157f0472a0a26fd1ea2d9a36c190d3de1ca48 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 1 Sep 2022 15:42:42 -0500 Subject: [PATCH 027/105] Limit instance sizes to mitigate Docker timeout failures * Limit InstanceTypes to specific sizes (xlarge or 2xlarge) so only 1-2 jobs can run at a time, instead of potentially 10+. Reduce the number of Docker images being pulled at one time to mitigate the 4m Docker image pull timeout failures from ECS. * Restore the r5/r5a instance families for consistency with other serverless projects. --- serverless-resources.yml | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index d8f5571..e8bdc63 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -106,12 +106,22 @@ rBuildsBatchComputeEnvironment: InstanceRole: "Fn::GetAtt": [ rBuildsIamInstanceProfile, Arn ] InstanceTypes: - - m6i - - m5 - - m5a - - c6i - - c5 - - c5a + - m6i.xlarge + - m6i.2xlarge + - m5.xlarge + - m5.2xlarge + - m5a.xlarge + - m5a.2xlarge + - r5.xlarge + - r5.2xlarge + - r5a.xlarge + - r5a.2xlarge + - c6i.xlarge + - c6i.2xlarge + - c5.xlarge + - c5.2xlarge + - c5a.xlarge + - c5a.2xlarge Ec2KeyPair: ${self:custom.ec2KeyPair} Tags: ${self:provider.stackTags} MinvCpus: 0 From 2da405d505c88123623fc4bc9cb164ee1610cef2 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 7 Sep 2022 14:31:07 -0500 Subject: [PATCH 028/105] Mitigate EC2 Spot instance interruptions Some jobs are failing because EC2 is terminating Spot instances from being outbid (BidEvictedEvents in CloudTrail). * Increase bid percentage to 100% * Remove highly interrupted instance types, leaving only instance types with <5% frequency of interruption. https://aws.amazon.com/ec2/spot/instance-advisor/ --- serverless-resources.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index e8bdc63..a2aa5c7 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -102,22 +102,15 @@ rBuildsBatchComputeEnvironment: SecurityGroupIds: ${self:custom.securityGroupIds} Subnets: ${self:custom.subnets} Type: SPOT - BidPercentage: 85 + BidPercentage: 100 InstanceRole: "Fn::GetAtt": [ rBuildsIamInstanceProfile, Arn ] InstanceTypes: - - m6i.xlarge - - m6i.2xlarge - - m5.xlarge - - m5.2xlarge - - m5a.xlarge - - m5a.2xlarge - r5.xlarge - r5.2xlarge - r5a.xlarge - r5a.2xlarge - c6i.xlarge - - c6i.2xlarge - c5.xlarge - c5.2xlarge - c5a.xlarge From 6705d0334c1fcfe5b40f1bf298df93090e179a17 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 8 Sep 2022 17:29:17 -0500 Subject: [PATCH 029/105] Fix R builds tests not returning error codes correctly --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 13154ad..e13a46b 100644 --- a/Makefile +++ b/Makefile @@ -44,10 +44,10 @@ docker-build-$(platform): @cd builder && docker-compose build $(platform) build-r-$(platform): - @cd builder && R_VERSION=$(R_VERSION) docker-compose up $(platform) + @cd builder && R_VERSION=$(R_VERSION) docker-compose run --rm $(platform) test-r-$(platform): - @cd test && R_VERSION=$(R_VERSION) docker-compose up $(platform) + @cd test && R_VERSION=$(R_VERSION) docker-compose run --rm $(platform) bash-$(platform): docker run -it --rm --entrypoint /bin/bash -v $(CURDIR):/r-builds r-builds:$(platform) From f66f829e5762d11349fb6c17f0049e11a24b2dbb Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 8 Sep 2022 17:36:49 -0500 Subject: [PATCH 030/105] Fix missing PCRE2 dependency in R 3.x builds for RHEL 9 --- builder/build.sh | 2 +- builder/package.rhel-9 | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/builder/build.sh b/builder/build.sh index 8505583..565a677 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -97,7 +97,7 @@ compile_r() { # # The INCLUDE_PCRE2_IN_R_3 environment variable can be set to include PCRE2 # in R 3.x builds, for distributions where PCRE2 is always required. - # In Debian 11/Ubuntu 22, Pango now depends on PCRE2, so R 3.x will not be compiled with + # In Debian 11/Ubuntu 22/RHEL 9, Pango now depends on PCRE2, so R 3.x will not be compiled with # Pango support if the PCRE2 pkg-config file is missing. if [[ "${1}" =~ ^3 ]] && pkg-config --exists libpcre2-8 && [ -z "$INCLUDE_PCRE2_IN_R_3" ]; then mkdir -p /tmp/pcre2 diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index 064bacf..5144ba8 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -4,10 +4,11 @@ if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then mkdir -p "/tmp/output/${OS_IDENTIFIER}" fi -# R 3.x requires PCRE1 -pcre_lib='pcre2-devel' +# R 3.x requires PCRE1. On RHEL 9, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- pcre2-devel' if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='pcre-devel' + pcre_libs='- pcre2-devel +- pcre-devel' fi # Create post-install script required for OpenBLAS. @@ -64,7 +65,7 @@ depends: - make - openblas-devel - pango -- ${pcre_lib} +${pcre_libs} - tcl - tk - unzip From 25ad44362f995b0fc098db2533e4fdf6dddaf44c Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 21 Sep 2022 12:22:32 -0500 Subject: [PATCH 031/105] Don't install prerelease R versions by default in quickinstall script --- install.sh | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/install.sh b/install.sh index 1d22467..44ccaef 100755 --- a/install.sh +++ b/install.sh @@ -32,20 +32,17 @@ CDN_URL='https://cdn.rstudio.com/r' # The URL for listing available R versions VERSIONS_URL="${CDN_URL}/versions.json" -R_VERSIONS=$(curl -s ${VERSIONS_URL} | \ +R_VERSIONS=$(curl -s ${VERSIONS_URL} | # Matches the JSON line that contains the r versions - grep r_versions | \ + grep r_versions | # Gets the value of the `r_version` property (e.g., "[ 3.0.0, 3.0.3, ... ]") - cut -f2 -d ":" | \ + cut -f2 -d ":" | # Removes the opening and closing brackets of the array - cut -f2 -d "[" | cut -f1 -d "]" | \ + cut -f2 -d "[" | cut -f1 -d "]" | # Removes the quotes and commas from the values - sed -e 's/\"//g' | sed -e 's/\,//g' | \ - # Appends a placeholder to the end of the string. Without an extra element at the - # end, the last version will be missing after we reverse the order. - { IFS= read -r vers; printf '%s placeholder' "$vers"; } | \ - # Reverses the order of the list - ( while read -d ' ' f;do g="$f${g+ }$g" ;done;echo "$g" )) + sed -e 's/\"//g' | sed -e 's/\,//g' | + # Convert to newlines and sort in descending order, with devel/next at the bottom + tr ' ' '\n' | sort --numeric-sort --reverse) # Returns the OS detect_os () { From 5aba4ea44bdc1cb984b4522f79f68306fdd7f267 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 30 Nov 2022 15:50:40 -0600 Subject: [PATCH 032/105] Update default branch to main --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index eeb9dc5..ca3d2a4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,7 +16,7 @@ pipeline { stage('push images') { agent { label 'docker-4x' } when { - branch 'master' + branch 'main' } steps { sh 'make docker-push' @@ -25,7 +25,7 @@ pipeline { stage('deploy') { agent none when { - branch 'master' + branch 'main' } steps { build(job: 'r-builds/deploy-r-builds', wait: true, From 744b8d2a1896729f0817fa5cb4bfa1d1f982352d Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 30 Nov 2022 15:58:14 -0600 Subject: [PATCH 033/105] Update RStudio references to Posit --- README.md | 32 ++++++++++++++++---------------- builder/Dockerfile.opensuse-154 | 2 +- builder/Dockerfile.rhel-9 | 2 +- builder/package.centos-7 | 4 ++-- builder/package.centos-8 | 4 ++-- builder/package.debian-10 | 4 ++-- builder/package.debian-11 | 4 ++-- builder/package.opensuse-153 | 4 ++-- builder/package.opensuse-154 | 4 ++-- builder/package.rhel-9 | 4 ++-- builder/package.ubuntu-1804 | 4 ++-- builder/package.ubuntu-2004 | 4 ++-- builder/package.ubuntu-2204 | 4 ++-- install.sh | 2 +- test/get_r_versions.py | 2 +- 15 files changed, 40 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 9e8bbe0..fcc7576 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,19 @@ # r-builds This repository orchestrates tools to produce R binaries. The binaries are available as a -community resource, **they are not professionally supported by RStudio**. +community resource, **they are not professionally supported by Posit**. The R language is open source, please see the official documentation at https://www.r-project.org/. These binaries are not a replacement to existing binary distributions for R. The binaries were built with the following considerations: - They use a minimal set of [build and runtime dependencies](builder). -- They are designed to be used side-by-side, e.g., on [RStudio Server Pro](https://docs.rstudio.com/ide/server-pro/r-versions.html#using-multiple-versions-of-r-concurrently). +- They are designed to be used side-by-side, e.g., on [Posit Workbench](https://docs.posit.co/ide/server-pro/r_versions/using_multiple_versions_of_r.html). - They give users a consistent option for accessing R across different Linux distributions. These binaries have been extensively tested, and are used in production everyday -on [RStudio Cloud](https://rstudio.cloud) and +on [Posit Cloud](https://posit.cloud) and [shinyapps.io](https://shinyapps.io). Please open an issue to report a specific -bug, or ask questions on [RStudio Community](https://community.rstudio.com). +bug, or ask questions on [Posit Community](https://community.rstudio.com). ## Supported Platforms @@ -27,7 +27,7 @@ R binaries are built for the following Linux operating systems: - SUSE Linux Enterprise 15 SP3, 15 SP4 Operating systems are supported until their vendor end-of-support dates, which -can be found on the [RStudio Platform Support](https://www.rstudio.com/about/platform-support/) +can be found on the [Posit Platform Support](https://posit.co/about/platform-support/) page. When an operating system has reached its end of support, builds for it will be discontinued, but existing binaries will continue to be available. @@ -46,7 +46,7 @@ bash -c "$(curl -L https://rstd.io/r-install)" ### Specify R version Define the version of R that you want to install. Available versions -of R can be found here: https://cdn.rstudio.com/r/versions.json +of R can be found here: https://cdn.posit.co/r/versions.json ```bash R_VERSION=4.1.3 ``` @@ -57,19 +57,19 @@ R_VERSION=4.1.3 Download the deb package: ```bash # Ubuntu 18.04 -wget https://cdn.rstudio.com/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb +wget https://cdn.posit.co/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 20.04 -wget https://cdn.rstudio.com/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb +wget https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 22.04 -wget https://cdn.rstudio.com/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb +wget https://cdn.posit.co/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb # Debian 10 -wget https://cdn.rstudio.com/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb +wget https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb # Debian 11 -wget https://cdn.rstudio.com/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb +wget https://cdn.posit.co/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb ``` Then install the package: @@ -119,13 +119,13 @@ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noa Download the rpm package: ```bash # CentOS / RHEL 7 -wget https://cdn.rstudio.com/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +wget https://cdn.posit.co/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # RHEL 8 / Rocky Linux 8 / AlmaLinux 8 -wget https://cdn.rstudio.com/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +wget https://cdn.posit.co/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # RHEL 9 / Rocky Linux 9 / AlmaLinux 9 -wget https://cdn.rstudio.com/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +wget https://cdn.posit.co/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: @@ -138,10 +138,10 @@ sudo yum install R-${R_VERSION}-1-1.x86_64.rpm Download the rpm package: ```bash # openSUSE 15.3 / SLES 15 SP3 -wget https://cdn.rstudio.com/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +wget https://cdn.posit.co/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # openSUSE 15.4 / SLES 15 SP4 -wget https://cdn.rstudio.com/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +wget https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 042f188..073d192 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -92,7 +92,7 @@ ENV CONFIGURE_OPTIONS="\ # but the JDK path is chosen by default. We change this to the JRE path to # support users who only want to install the JRE (non-devel) package. # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support -# https://solutions.rstudio.com/r/using-rjava/ +# https://solutions.posit.co/envs-pkgs/using-rjava/ ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk COPY package.opensuse-154 /package.sh diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index e57eb31..05171e2 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -79,7 +79,7 @@ ENV R_RD4PDF="times,hyper" # requires users to run `R CMD javareconf` even on minor/patch upgrades. Use the # major version symlink to avoid this. # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support -# https://solutions.rstudio.com/r/using-rjava/ +# https://solutions.posit.co/envs-pkgs/using-rjava/ ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk # R 3.x requires PCRE2 for Pango support on RHEL 9 diff --git a/builder/package.centos-7 b/builder/package.centos-7 index 6bad41a..3eda5f4 100644 --- a/builder/package.centos-7 +++ b/builder/package.centos-7 @@ -28,10 +28,10 @@ name: R-${R_VERSION} version: 1 version_schema: none release: 1 -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPLv2+ depends: diff --git a/builder/package.centos-8 b/builder/package.centos-8 index c541087..78933d6 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -28,10 +28,10 @@ name: R-${R_VERSION} version: 1 version_schema: none release: 1 -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPLv2+ depends: diff --git a/builder/package.debian-10 b/builder/package.debian-10 index 82acaae..c4dbc5e 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -16,10 +16,10 @@ version: 1 version_schema: none section: gnu-r priority: optional -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPL-2 deb: diff --git a/builder/package.debian-11 b/builder/package.debian-11 index b897a5a..a14c265 100644 --- a/builder/package.debian-11 +++ b/builder/package.debian-11 @@ -17,10 +17,10 @@ version: 1 version_schema: none section: gnu-r priority: optional -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPL-2 deb: diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index 0385da0..5df79cd 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -28,10 +28,10 @@ name: R-${R_VERSION} version: 1 version_schema: none release: 1 -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPLv2+ depends: diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index f11f113..1fbb819 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -44,10 +44,10 @@ name: R-${R_VERSION} version: 1 version_schema: none release: 1 -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPLv2+ depends: diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index 5144ba8..ee1a376 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -45,10 +45,10 @@ name: R-${R_VERSION} version: 1 version_schema: none release: 1 -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPLv2+ depends: diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 8501a89..a696b9f 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -16,10 +16,10 @@ version: 1 version_schema: none section: universe/math priority: optional -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPL-2 deb: diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index 2465ff9..e6648bd 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -16,10 +16,10 @@ version: 1 version_schema: none section: universe/math priority: optional -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPL-2 deb: diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index 175065c..b3d5302 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -17,10 +17,10 @@ version: 1 version_schema: none section: universe/math priority: optional -maintainer: RStudio, PBC +maintainer: Posit Software, PBC description: | GNU R statistical computation and graphics system -vendor: RStudio, PBC +vendor: Posit Software, PBC homepage: https://www.r-project.org license: GPL-2 deb: diff --git a/install.sh b/install.sh index 44ccaef..9b20c8a 100755 --- a/install.sh +++ b/install.sh @@ -27,7 +27,7 @@ if [[ $(id -u) != "0" ]]; then fi # The root of the S3 URL for downloads -CDN_URL='https://cdn.rstudio.com/r' +CDN_URL='https://cdn.posit.co/r' # The URL for listing available R versions VERSIONS_URL="${CDN_URL}/versions.json" diff --git a/test/get_r_versions.py b/test/get_r_versions.py index 0a2ebd9..7e7a668 100644 --- a/test/get_r_versions.py +++ b/test/get_r_versions.py @@ -3,7 +3,7 @@ import json import re import urllib.request -VERSIONS_URL = 'https://cdn.rstudio.com/r/versions.json' +VERSIONS_URL = 'https://cdn.posit.co/r/versions.json' # Minimum R version for "all" MIN_ALL_VERSION = '3.1.0' From f91ce41bb246f214cd9e835b1e1a32c4196d7a88 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 30 Nov 2022 17:36:56 -0600 Subject: [PATCH 034/105] Use curl instead of wget for consistency with docs.posit.co --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index fcc7576..0751079 100644 --- a/README.md +++ b/README.md @@ -57,19 +57,19 @@ R_VERSION=4.1.3 Download the deb package: ```bash # Ubuntu 18.04 -wget https://cdn.posit.co/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb +curl -O https://cdn.posit.co/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 20.04 -wget https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb +curl -O https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 22.04 -wget https://cdn.posit.co/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb +curl -O https://cdn.posit.co/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb # Debian 10 -wget https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb +curl -O https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb # Debian 11 -wget https://cdn.posit.co/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb +curl -O https://cdn.posit.co/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb ``` Then install the package: @@ -119,13 +119,13 @@ sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noa Download the rpm package: ```bash # CentOS / RHEL 7 -wget https://cdn.posit.co/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +curl -O https://cdn.posit.co/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # RHEL 8 / Rocky Linux 8 / AlmaLinux 8 -wget https://cdn.posit.co/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +curl -O https://cdn.posit.co/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # RHEL 9 / Rocky Linux 9 / AlmaLinux 9 -wget https://cdn.posit.co/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +curl -O https://cdn.posit.co/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: @@ -138,10 +138,10 @@ sudo yum install R-${R_VERSION}-1-1.x86_64.rpm Download the rpm package: ```bash # openSUSE 15.3 / SLES 15 SP3 -wget https://cdn.posit.co/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +curl -O https://cdn.posit.co/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # openSUSE 15.4 / SLES 15 SP4 -wget https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm +curl -O https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: From 17c2536abed9958b50768e3e712c5b6c9a176da1 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 5 Jan 2023 13:30:26 -0600 Subject: [PATCH 035/105] Update GHA for set-output deprecation --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4eb5c69..7153eef 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,9 +40,9 @@ jobs: id: setup-matrix run: | platforms=$(python test/get_platforms.py ${{ github.event.inputs.platforms }}) - echo "::set-output name=platforms::$platforms" + echo "platforms=$platforms" >> $GITHUB_OUTPUT r_versions=$(python test/get_r_versions.py ${{ github.event.inputs.r_versions }}) - echo "::set-output name=r_versions::$r_versions" + echo "r_versions=$r_versions" >> $GITHUB_OUTPUT docker-images: needs: setup-matrix @@ -60,12 +60,12 @@ jobs: install: true # Enable Docker layer caching without having to push to a registry. - # https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#local-cache + # https://docs.docker.com/build/ci/github-actions/examples/#local-cache # This may eventually be migrated to the GitHub Actions cache backend, # which is still considered experimental. # https://github.com/moby/buildkit#github-actions-cache-experimental - name: Cache Docker layers - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /tmp/.buildx-cache key: ${{ matrix.platform }}-buildx-${{ github.sha }} @@ -108,7 +108,7 @@ jobs: install: true - name: Restore cached Docker layers - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: /tmp/.buildx-cache key: ${{ matrix.platform }}-buildx-${{ github.sha }} From cca0417d895f0031502f86d3cb1e494f46e59e90 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 9 Jan 2023 14:31:58 -0600 Subject: [PATCH 036/105] Support custom installation paths for R --- README.md | 45 ++++++++++++++++++++++++++++++++++++ builder/build.sh | 15 +++++++----- builder/docker-compose.yml | 10 ++++++++ builder/package.centos-7 | 12 +++++----- builder/package.centos-8 | 12 +++++----- builder/package.debian-10 | 4 ++-- builder/package.debian-11 | 4 ++-- builder/package.opensuse-153 | 12 +++++----- builder/package.opensuse-154 | 12 +++++----- builder/package.rhel-9 | 12 +++++----- builder/package.ubuntu-1804 | 4 ++-- builder/package.ubuntu-2004 | 4 ++-- builder/package.ubuntu-2204 | 4 ++-- 13 files changed, 104 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 0751079..0521f7c 100644 --- a/README.md +++ b/README.md @@ -184,6 +184,51 @@ This repository orchestrates builds using a variety of tools. The instructions below outline the components in the stack and describe how to add a new platform or inspect an existing platform. +## Building from source + +To build the R binaries from source, you will need to have [Git](https://git-scm.com/), +[Docker](https://docs.docker.com/get-docker/), and `make` installed. + +First, clone the Git repository locally and navigate to it. + +```bash +git clone https://github.com/rstudio/R-builds +cd R-builds +``` + +Then, run the `build-r-$PLATFORM` Make target with the `R_VERSION` environment variable +set to your desired R version, where `$PLATFORM` is one of the supported platform +identifiers, such as `ubuntu-2204` or `rhel-9`. + +```bash +export PLATFORM=ubuntu-2204 +export R_VERSION=4.1.3 + +make build-r-$PLATFORM +``` + +The built DEB or RPM package will be available in the `builder/integration/tmp/$PLATFORM` +directory. + +```bash +$ ls builder/integration/tmp/$PLATFORM +r-4.1.3_1_amd64.deb +``` + +### Custom installation path + +R is installed to `/opt/R/${R_VERSION}` by default. If you want to customize the +installation path, set the optional `R_INSTALL_PATH` environment variable to a +custom location such as `/opt/custom/R-4.1.3`. + +```bash +export PLATFORM=rhel-9 +export R_VERSION=4.1.3 +export R_INSTALL_PATH=/opt/custom/R-4.1.3 + +make build-r-$PLATFORM +``` + ## Adding a new platform. ### Dockerfile diff --git a/builder/build.sh b/builder/build.sh index 565a677..7445846 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -5,6 +5,7 @@ export CRAN=${CRAN-"https://cran.rstudio.com"} export S3_BUCKET_PREFIX=${S3_BUCKET_PREFIX-""} export OS_IDENTIFIER=${OS_IDENTIFIER-"unknown"} export TARBALL_NAME="R-${R_VERSION}-${OS_IDENTIFIER}.tar.gz" +export R_INSTALL_PATH=${R_INSTALL_PATH:-"/opt/R/${R_VERSION}"} # Some Dockerfiles may copy a `/env.sh` to set up environment variables # that require command substitution. If this file exists, source it. @@ -33,9 +34,11 @@ upload_r() { fi } -# archive_r() - $1 as r version +# archive_r() archive_r() { - tar czf /tmp/${TARBALL_NAME} --directory=/opt/R ${1} --owner=0 --group=0 + dir=$(dirname "$R_INSTALL_PATH") + base=$(basename "$R_INSTALL_PATH") + tar czf "/tmp/${TARBALL_NAME}" --directory="$dir" "$base" --owner=0 --group=0 } fetch_r_source() { @@ -130,7 +133,7 @@ compile_r() { R_UNZIPCMD=/usr/bin/unzip \ R_ZIPCMD=/usr/bin/zip \ ./configure \ - --prefix=/opt/R/${1} \ + --prefix="${R_INSTALL_PATH}" \ ${CONFIGURE_OPTIONS} \ ${build_flag} make clean @@ -139,7 +142,7 @@ compile_r() { # Add OS identifier to the default HTTP user agent. # Set this in the system Rprofile so it works when R is run with --vanilla. - cat <> /opt/R/${1}/lib/R/library/base/R/Rprofile + cat <> "${R_INSTALL_PATH}"/lib/R/library/base/R/Rprofile ## Set the default HTTP user agent local({ os_identifier <- if (file.exists("/etc/os-release")) { @@ -167,7 +170,7 @@ package_r() { } set_up_environment() { - mkdir -p /opt/R + mkdir -p "$R_INSTALL_PATH" } _version_is_greater_than() { @@ -183,5 +186,5 @@ set_up_environment fetch_r_source $R_VERSION compile_r $R_VERSION package_r $R_VERSION -archive_r $R_VERSION +archive_r upload_r $R_VERSION diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 0740b46..889cb28 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -3,6 +3,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -14,6 +15,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -25,6 +27,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -36,6 +39,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -47,6 +51,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -58,6 +63,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -69,6 +75,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -80,6 +87,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -91,6 +99,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . @@ -102,6 +111,7 @@ services: command: ./build.sh environment: - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} - LOCAL_STORE=/tmp/output build: context: . diff --git a/builder/package.centos-7 b/builder/package.centos-7 index 3eda5f4..77b5632 100644 --- a/builder/package.centos-7 +++ b/builder/package.centos-7 @@ -12,14 +12,14 @@ fi # create post-install script required for openblas cat <> /post-install.sh -mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblasp.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas cat <> /after-remove.sh -if [ -d /opt/R/${R_VERSION} ]; then - rm -r /opt/R/${R_VERSION} +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi EOF @@ -57,8 +57,8 @@ depends: - zip - zlib-devel contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} scripts: postinstall: /post-install.sh postremove: /after-remove.sh diff --git a/builder/package.centos-8 b/builder/package.centos-8 index 78933d6..3b2cdb4 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -12,14 +12,14 @@ fi # create post-install script required for openblas cat <> /post-install.sh -mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblasp.so.0 /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblasp.so.0 ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas cat <> /after-remove.sh -if [ -d /opt/R/${R_VERSION} ]; then - rm -r /opt/R/${R_VERSION} +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi EOF @@ -57,8 +57,8 @@ depends: - zip - zlib-devel contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} scripts: postinstall: /post-install.sh postremove: /after-remove.sh diff --git a/builder/package.debian-10 b/builder/package.debian-10 index c4dbc5e..42f8b9d 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -56,8 +56,8 @@ depends: - zip - zlib1g-dev contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} EOF nfpm package \ diff --git a/builder/package.debian-11 b/builder/package.debian-11 index a14c265..5c9dd91 100644 --- a/builder/package.debian-11 +++ b/builder/package.debian-11 @@ -57,8 +57,8 @@ ${pcre_libs} - zip - zlib1g-dev contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} EOF nfpm package \ diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index 5df79cd..6a1517e 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -12,14 +12,14 @@ fi # create post-install script required for openblas cat <> /post-install.sh -mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF # create after-remove script to remove internal blas cat <> /after-remove.sh -if [ -d /opt/R/${R_VERSION} ]; then - rm -r /opt/R/${R_VERSION} +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi EOF @@ -66,8 +66,8 @@ depends: - zip - zlib-devel contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} scripts: postinstall: /post-install.sh postremove: /after-remove.sh diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index 1fbb819..733acff 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -28,14 +28,14 @@ fi # # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS cat <> /post-install.sh -mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. cat <> /after-remove.sh -if [ -d /opt/R/${R_VERSION} ]; then - rm -r /opt/R/${R_VERSION} +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi EOF @@ -82,8 +82,8 @@ depends: - zip - zlib-devel contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} scripts: postinstall: /post-install.sh postremove: /after-remove.sh diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index ee1a376..8428069 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -29,14 +29,14 @@ fi # # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS cat <> /post-install.sh -mv /opt/R/${R_VERSION}/lib/R/lib/libRblas.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblasp.so /opt/R/${R_VERSION}/lib/R/lib/libRblas.so +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. cat <> /after-remove.sh -if [ -d /opt/R/${R_VERSION} ]; then - rm -r /opt/R/${R_VERSION} +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi EOF @@ -74,8 +74,8 @@ ${pcre_libs} - zip - zlib-devel contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} scripts: postinstall: /post-install.sh postremove: /after-remove.sh diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index a696b9f..9d448f3 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -56,8 +56,8 @@ depends: - zip - zlib1g-dev contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} EOF nfpm package \ diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index e6648bd..a1b0eb4 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -57,8 +57,8 @@ depends: - zip - zlib1g-dev contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} EOF nfpm package \ diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index b3d5302..eea65fb 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -57,8 +57,8 @@ ${pcre_libs} - zip - zlib1g-dev contents: -- src: /opt/R/${R_VERSION} - dst: /opt/R/${R_VERSION} +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} EOF nfpm package \ From 16d7f91ad0725527148822710ae0d53b17909522 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 9 Jan 2023 18:27:47 -0600 Subject: [PATCH 037/105] Add quick test for the custom HTTP user agent --- test/test.R | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test.R b/test/test.R index 360c9b1..8be20c1 100644 --- a/test/test.R +++ b/test/test.R @@ -101,3 +101,8 @@ if (getRversion() >= "3.5.0" && getRversion() < "4.0.0") { } else if (getRversion() >= "4.0.0") { stopifnot(has_pcre2 && !has_pcre1) } + +# Check that the custom HTTP user agent was configured +if (!grepl(sprintf("^R/%s", getRversion()), getOption("HTTPUserAgent"))) { + stop("unexpected HTTPUserAgent") +} From 3b3a13513d745c8a06e4c3082c448fab6e651fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Thu, 5 Jan 2023 11:30:10 +0100 Subject: [PATCH 038/105] Support arm64 builds --- builder/Dockerfile.centos-7 | 8 +++++--- builder/Dockerfile.centos-8 | 8 +++++--- builder/Dockerfile.debian-10 | 6 +++--- builder/Dockerfile.debian-11 | 6 +++--- builder/Dockerfile.opensuse-153 | 8 +++++--- builder/Dockerfile.opensuse-154 | 10 ++++++---- builder/Dockerfile.rhel-9 | 10 ++++++---- builder/Dockerfile.ubuntu-1804 | 6 +++--- builder/Dockerfile.ubuntu-2004 | 6 +++--- builder/Dockerfile.ubuntu-2204 | 6 +++--- builder/build.sh | 2 +- install.sh | 23 ++++++++++++++++++----- jenkins/Dockerfile | 2 +- 13 files changed, 62 insertions(+), 39 deletions(-) diff --git a/builder/Dockerfile.centos-7 b/builder/Dockerfile.centos-7 index 9853b61..61451ec 100644 --- a/builder/Dockerfile.centos-7 +++ b/builder/Dockerfile.centos-7 @@ -49,9 +49,11 @@ RUN yum -y update \ RUN pip3 install awscli --upgrade --user && \ ln -s /root/.local/bin/aws /usr/bin/aws -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ - yum install -y nfpm_amd64.rpm && \ - rm nfpm_amd64.rpm +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + yum install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.centos-8 b/builder/Dockerfile.centos-8 index 6f80956..5c535ab 100644 --- a/builder/Dockerfile.centos-8 +++ b/builder/Dockerfile.centos-8 @@ -50,9 +50,11 @@ RUN dnf -y upgrade \ RUN pip3 install awscli --upgrade --user \ && ln -s /root/.local/bin/aws /usr/bin/aws -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ - dnf install -y nfpm_amd64.rpm && \ - rm nfpm_amd64.rpm +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.debian-10 b/builder/Dockerfile.debian-10 index a6c812a..67b5e08 100644 --- a/builder/Dockerfile.debian-10 +++ b/builder/Dockerfile.debian-10 @@ -14,9 +14,9 @@ RUN pip3 install awscli RUN chmod 0777 /opt -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ - apt install -y ./nfpm_amd64.deb && \ - rm nfpm_amd64.deb +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" # Override the default pager used by R ENV PAGER /usr/bin/pager diff --git a/builder/Dockerfile.debian-11 b/builder/Dockerfile.debian-11 index 1845673..b31afda 100644 --- a/builder/Dockerfile.debian-11 +++ b/builder/Dockerfile.debian-11 @@ -14,9 +14,9 @@ RUN pip3 install awscli RUN chmod 0777 /opt -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ - apt install -y ./nfpm_amd64.deb && \ - rm nfpm_amd64.deb +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" # Override the default pager used by R ENV PAGER /usr/bin/pager diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index 87a144c..df3b732 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -70,9 +70,11 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ RUN pip install awscli -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ - zypper --non-interactive --no-gpg-checks install nfpm_amd64.rpm && \ - rm nfpm_amd64.rpm +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + zypper --non-interactive --no-gpg-checks install "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 042f188..9bce666 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -67,14 +67,16 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ && zypper clean # Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -p).zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install && \ rm -rf aws awscliv2.zip -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ - zypper --non-interactive --no-gpg-checks install nfpm_amd64.rpm && \ - rm nfpm_amd64.rpm +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + zypper --non-interactive --no-gpg-checks install "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index e57eb31..a96ea65 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -46,14 +46,16 @@ RUN dnf -y upgrade \ && dnf clean all # Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -p).zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install && \ rm -rf aws awscliv2.zip -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.rpm && \ - dnf install -y nfpm_amd64.rpm && \ - rm nfpm_amd64.rpm +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-1804 b/builder/Dockerfile.ubuntu-1804 index 4c38fbd..2d0fc61 100644 --- a/builder/Dockerfile.ubuntu-1804 +++ b/builder/Dockerfile.ubuntu-1804 @@ -11,9 +11,9 @@ RUN set -x \ RUN pip install awscli -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ - apt install -y ./nfpm_amd64.deb && \ - rm nfpm_amd64.deb +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-2004 b/builder/Dockerfile.ubuntu-2004 index 4733f5e..6e89ff7 100644 --- a/builder/Dockerfile.ubuntu-2004 +++ b/builder/Dockerfile.ubuntu-2004 @@ -11,9 +11,9 @@ RUN set -x \ RUN pip3 install awscli -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ - apt install -y ./nfpm_amd64.deb && \ - rm nfpm_amd64.deb +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" RUN chmod 0777 /opt diff --git a/builder/Dockerfile.ubuntu-2204 b/builder/Dockerfile.ubuntu-2204 index 5d28093..18ea4a0 100644 --- a/builder/Dockerfile.ubuntu-2204 +++ b/builder/Dockerfile.ubuntu-2204 @@ -11,9 +11,9 @@ RUN set -x \ RUN pip3 install awscli -RUN curl -LO https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_amd64.deb && \ - apt install -y ./nfpm_amd64.deb && \ - rm nfpm_amd64.deb +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" RUN chmod 0777 /opt diff --git a/builder/build.sh b/builder/build.sh index 565a677..e40064d 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -67,7 +67,7 @@ compile_r() { # tools/config.guess in R versions older than 3.2.2 guess 'unknown' instead of 'pc' # test the version and properly set the flag. - build_flag='--build=x86_64-pc-linux-gnu' + build_flag="--build=$(uname -p)-pc-linux-gnu" if _version_is_greater_than ${R_VERSION} 3.2.2; then build_flag='' fi diff --git a/install.sh b/install.sh index 44ccaef..7c3dd97 100755 --- a/install.sh +++ b/install.sh @@ -144,19 +144,30 @@ do_show_versions () { done } -# Returns the installer name for a given version and OS +# Returns the installer name for a given version, OS, arch download_name () { os=$1 version=$2 + arch=$3 + case $arch in + "x86_64" | "amd64") + rpm_arch="x86_64" + deb_arch="amd64" + ;; + "aarch64") + rpm_arch="aarch64" + deb_arch="arm64" + ;; + esac case $os in "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") - echo "R-${version}-1-1.x86_64.rpm" + echo "R-${version}-1-1.${rpm_arch}.rpm" ;; "Ubuntu" | "Debian") - echo "r-${version}_1_amd64.deb" + echo "r-${version}_1_${deb_arch}.deb" ;; "LEAP12" | "LEAP15" | "SLES12" | "SLES15") - echo "R-${version}-1-1.x86_64.rpm" + echo "R-${version}-1-1.${rpm_arch}.rpm" ;; esac } @@ -486,8 +497,10 @@ do_install () { prompt_version [ -z $SELECTED_VERSION ] && { echo "Invalid version"; exit 1; } + arch=$(uname -p) + # Get the name of the installer to use - installer_file_name=$(download_name "${os}" "${SELECTED_VERSION}") + installer_file_name=$(download_name "${os}" "${SELECTED_VERSION}" "${arch}") # Get the URL to download from. If the installer already exists in the current # directory, this will return a blank string. diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile index 0c27a8b..fafa24e 100644 --- a/jenkins/Dockerfile +++ b/jenkins/Dockerfile @@ -8,7 +8,7 @@ RUN apt-get update -qq && apt-get install -y python-pip RUN pip install awscli # install docker cli -RUN wget -q -O /tmp/docker-cli.deb https://download.docker.com/linux/debian/dists/stretch/pool/stable/amd64/docker-ce-cli_18.09.2~3-0~debian-stretch_amd64.deb \ +RUN wget -q -O /tmp/docker-cli.deb https://download.docker.com/linux/debian/dists/stretch/pool/stable/$(dpkg --print-architecture)/docker-ce-cli_18.09.2~3-0~debian-stretch_$(dpkg --print-architecture).deb \ && dpkg -i /tmp/docker-cli.deb RUN npm install -g serverless From be9465a99790dbb32ee5b808af76b6e80b2f9fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Tue, 10 Jan 2023 16:25:31 +0100 Subject: [PATCH 039/105] Use uname -m instead of uname -p, for Debian On Debian uname -p returns 'unknown'. --- builder/Dockerfile.opensuse-154 | 2 +- builder/Dockerfile.rhel-9 | 2 +- builder/build.sh | 2 +- install.sh | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 9bce666..a3fc669 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -67,7 +67,7 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ && zypper clean # Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -p).zip" -o "awscliv2.zip" && \ +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install && \ rm -rf aws awscliv2.zip diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index a96ea65..315836d 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -46,7 +46,7 @@ RUN dnf -y upgrade \ && dnf clean all # Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -p).zip" -o "awscliv2.zip" && \ +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ unzip awscliv2.zip && \ ./aws/install && \ rm -rf aws awscliv2.zip diff --git a/builder/build.sh b/builder/build.sh index e40064d..f5eb38b 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -67,7 +67,7 @@ compile_r() { # tools/config.guess in R versions older than 3.2.2 guess 'unknown' instead of 'pc' # test the version and properly set the flag. - build_flag="--build=$(uname -p)-pc-linux-gnu" + build_flag="--build=$(uname -m)-pc-linux-gnu" if _version_is_greater_than ${R_VERSION} 3.2.2; then build_flag='' fi diff --git a/install.sh b/install.sh index 7c3dd97..234d75e 100755 --- a/install.sh +++ b/install.sh @@ -497,7 +497,7 @@ do_install () { prompt_version [ -z $SELECTED_VERSION ] && { echo "Invalid version"; exit 1; } - arch=$(uname -p) + arch=$(uname -m) # Get the name of the installer to use installer_file_name=$(download_name "${os}" "${SELECTED_VERSION}" "${arch}") From 3e927c505509243de9353f89624a2e793dd7f5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Tue, 10 Jan 2023 19:45:32 +0100 Subject: [PATCH 040/105] Tell arch to nfpm --- builder/package.centos-7 | 3 +++ builder/package.centos-8 | 3 +++ builder/package.debian-10 | 1 + builder/package.debian-11 | 1 + builder/package.opensuse-153 | 3 +++ builder/package.opensuse-154 | 3 +++ builder/package.rhel-9 | 3 +++ builder/package.ubuntu-1804 | 1 + builder/package.ubuntu-2004 | 1 + builder/package.ubuntu-2204 | 1 + 10 files changed, 20 insertions(+) diff --git a/builder/package.centos-7 b/builder/package.centos-7 index 6bad41a..e48278a 100644 --- a/builder/package.centos-7 +++ b/builder/package.centos-7 @@ -23,10 +23,13 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + cat < /tmp/nfpm.yml name: R-${R_VERSION} version: 1 version_schema: none +arch: $(cat /tmp/arch) release: 1 maintainer: RStudio, PBC description: | diff --git a/builder/package.centos-8 b/builder/package.centos-8 index c541087..cc8ced9 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -23,10 +23,13 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + cat < /tmp/nfpm.yml name: R-${R_VERSION} version: 1 version_schema: none +arch: $(cat /tmp/arch) release: 1 maintainer: RStudio, PBC description: | diff --git a/builder/package.debian-10 b/builder/package.debian-10 index 82acaae..a4266f8 100644 --- a/builder/package.debian-10 +++ b/builder/package.debian-10 @@ -15,6 +15,7 @@ name: r-${R_VERSION} version: 1 version_schema: none section: gnu-r +arch: $(dpkg --print-architecture) priority: optional maintainer: RStudio, PBC description: | diff --git a/builder/package.debian-11 b/builder/package.debian-11 index b897a5a..aec9c45 100644 --- a/builder/package.debian-11 +++ b/builder/package.debian-11 @@ -16,6 +16,7 @@ name: r-${R_VERSION} version: 1 version_schema: none section: gnu-r +arch: $(dpkg --print-architecture) priority: optional maintainer: RStudio, PBC description: | diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index 0385da0..bfb1114 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -23,10 +23,13 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + cat < /tmp/nfpm.yml name: R-${R_VERSION} version: 1 version_schema: none +arch: $(cat /tmp/arch) release: 1 maintainer: RStudio, PBC description: | diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index f11f113..61f8b53 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -39,10 +39,13 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + cat < /tmp/nfpm.yml name: R-${R_VERSION} version: 1 version_schema: none +arch: $(cat /tmp/arch) release: 1 maintainer: RStudio, PBC description: | diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index 5144ba8..964fbaa 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -40,10 +40,13 @@ if [ -d /opt/R/${R_VERSION} ]; then fi EOF +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + cat < /tmp/nfpm.yml name: R-${R_VERSION} version: 1 version_schema: none +arch: $(cat /tmp/arch) release: 1 maintainer: RStudio, PBC description: | diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 8501a89..6adbda9 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -15,6 +15,7 @@ name: r-${R_VERSION} version: 1 version_schema: none section: universe/math +arch: $(dpkg --print-architecture) priority: optional maintainer: RStudio, PBC description: | diff --git a/builder/package.ubuntu-2004 b/builder/package.ubuntu-2004 index 2465ff9..31d2b85 100644 --- a/builder/package.ubuntu-2004 +++ b/builder/package.ubuntu-2004 @@ -16,6 +16,7 @@ version: 1 version_schema: none section: universe/math priority: optional +arch: $(dpkg --print-architecture) maintainer: RStudio, PBC description: | GNU R statistical computation and graphics system diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index 175065c..7c68c3b 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -17,6 +17,7 @@ version: 1 version_schema: none section: universe/math priority: optional +arch: $(dpkg --print-architecture) maintainer: RStudio, PBC description: | GNU R statistical computation and graphics system From a2ffb1371d0a4058d25ccac2b71fbdbabec56c2c Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 11 Jan 2023 17:38:38 -0600 Subject: [PATCH 041/105] Run GHA tests on pull requests --- .github/workflows/test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7153eef..bc70168 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,6 +7,12 @@ on: - 'test/**' - 'Makefile' - '.github/workflows/test.yml' + pull_request: + paths: + - 'builder/**' + - 'test/**' + - 'Makefile' + - '.github/workflows/test.yml' workflow_dispatch: inputs: platforms: From 9b2fecd9e205a1088caa1a43cdc81e0dc7902d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Thu, 2 Feb 2023 06:42:00 -0800 Subject: [PATCH 042/105] Use gcc-8 on Ubuntu 18.04 To address #153 on Ubuntu 18.04. --- builder/Dockerfile.ubuntu-1804 | 3 ++- builder/build.sh | 7 +++++++ builder/package.ubuntu-1804 | 6 +++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/builder/Dockerfile.ubuntu-1804 b/builder/Dockerfile.ubuntu-1804 index 2d0fc61..b6c2614 100644 --- a/builder/Dockerfile.ubuntu-1804 +++ b/builder/Dockerfile.ubuntu-1804 @@ -7,7 +7,8 @@ RUN set -x \ && export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python-pip \ - && apt-get build-dep -y r-base + && apt-get build-dep -y r-base \ + && apt-get install -y gcc-8 g++-8 gfortran-8 RUN pip install awscli diff --git a/builder/build.sh b/builder/build.sh index e842e23..e34276b 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -120,6 +120,13 @@ compile_r() { --with-blas \ --with-lapack" + if _version_is_greater_than ${R_VERSION} 4.2.10; then + if [[ "${OS_IDENTIFIER}" = "ubuntu-1804" ]]; then + default_configure_options="$default_configure_options \ + CC=gcc-8 CXX=g++-8 FC=gfortran-8" + fi + fi + CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:-$default_configure_options} # set some common environment variables for the configure step diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index a5a75ae..56d4317 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -27,9 +27,9 @@ deb: fields: Bugs: https://github.com/rstudio/r-builds/issues depends: -- g++ -- gcc -- gfortran +- g++-8 +- gcc-8 +- gfortran-8 - libbz2-dev - libc6 - libcairo2 From f5a104562ef87c8b37df42193b75e1bff6c0f54d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Thu, 2 Feb 2023 07:44:27 -0800 Subject: [PATCH 043/105] Use corrent DEB packages Need gcc, g++, gfortran for R <= 4.2.x, and gcc-8, g++-8, gofrtran-8 for R >= 4.3.0. --- builder/build.sh | 4 ++++ builder/package.ubuntu-1804 | 6 +++--- test/test-r.sh | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/builder/build.sh b/builder/build.sh index e34276b..9ae6ace 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -124,6 +124,9 @@ compile_r() { if [[ "${OS_IDENTIFIER}" = "ubuntu-1804" ]]; then default_configure_options="$default_configure_options \ CC=gcc-8 CXX=g++-8 FC=gfortran-8" + gcc_package=gcc-8 + gxx_package=g++-8 + gfortran_package=gfortran-8 fi fi @@ -172,6 +175,7 @@ EOF package_r() { if [[ -f /package.sh ]]; then export R_VERSION=${1} + export gcc_package gxx_package gfortran_package source /package.sh fi } diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index 56d4317..f49efaf 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -27,9 +27,9 @@ deb: fields: Bugs: https://github.com/rstudio/r-builds/issues depends: -- g++-8 -- gcc-8 -- gfortran-8 +- ${gxx_package-g++} +- ${gcc_package-gcc} +- ${gfortran_package-gfortran} - libbz2-dev - libc6 - libcairo2 diff --git a/test/test-r.sh b/test/test-r.sh index 8783716..bd376dd 100755 --- a/test/test-r.sh +++ b/test/test-r.sh @@ -8,9 +8,9 @@ R_HOME=/opt/R/${R_VERSION}/lib/R "${R_HOME}/bin/Rscript" -e 'sessionInfo()' # List R devel dependencies -gcc --version -g++ --version -gfortran --version +$("${R_HOME}/bin/R" CMD config CC) --version +$("${R_HOME}/bin/R" CMD config CXX) --version +$("${R_HOME}/bin/R" CMD config FC) --version # List shared library dependencies (e.g. BLAS/LAPACK) LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libR.so" From 2b79717fba416868e1ff33e92022e3828f74bf94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Tue, 7 Feb 2023 21:06:17 +0100 Subject: [PATCH 044/105] Fix R-devel compilation on OpenSUSE By using newer compilers. --- builder/Dockerfile.opensuse-153 | 3 +++ builder/Dockerfile.opensuse-154 | 3 +++ builder/build.sh | 12 ++++++++++++ builder/package.opensuse-153 | 6 +++--- builder/package.opensuse-154 | 6 +++--- 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index df3b732..fbea3b1 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -15,6 +15,9 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ gcc \ gcc-c++ \ gcc-fortran \ + gcc8 \ + gcc8-c++ \ + gcc8-fortran \ glib2-devel \ glibc-locale \ help2man \ diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 1271a03..f3134fa 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -15,6 +15,9 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ gcc \ gcc-c++ \ gcc-fortran \ + gcc8 \ + gcc8-c++ \ + gcc8-fortran \ glib2-devel \ glibc-locale \ help2man \ diff --git a/builder/build.sh b/builder/build.sh index 9ae6ace..eee64ab 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -132,6 +132,18 @@ compile_r() { CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:-$default_configure_options} + # For OpenSUSE CONFIGURE_OPTIONS are custom, set in the Dockerfile + if _version_is_greater_than ${R_VERSION} 4.2.10; then + if [[ "${OS_IDENTIFIER}" = "opensuse-153" || \ + "${OS_IDENTIFIER}" = "opensuse-154" ]]; then + CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS \ + CC=gcc-8 CXX=g++-8 FC=gfortran-8" + gcc_package=gcc8 + gxx_package=gcc8-c++ + gfortran_package=gcc8-fortran + fi + fi + # set some common environment variables for the configure step AWK=/usr/bin/awk \ LIBnn=lib \ diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index 0f1779b..393a297 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -39,9 +39,9 @@ homepage: https://www.r-project.org license: GPLv2+ depends: - fontconfig -- gcc -- gcc-c++ -- gcc-fortran +- ${gcc_package-gcc} +- ${gxx_package-gcc-c++} +- ${gfortran_package-gcc-fortran} - glibc-locale - gzip - icu.691-devel diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index 3bd9d89..508aa08 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -55,9 +55,9 @@ homepage: https://www.r-project.org license: GPLv2+ depends: - fontconfig -- gcc -- gcc-c++ -- gcc-fortran +- ${gxx_package-g++} +- ${gcc_package-gcc} +- ${gfortran_package-gfortran} - glibc-locale - gzip - icu.691-devel From dd1a91547f2655afa79e6917a1f6a882a456308f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 8 Feb 2023 00:44:26 +0100 Subject: [PATCH 045/105] Fix OpenSUSE 15.4 package file --- builder/package.opensuse-154 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index 508aa08..b97b2d8 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -55,9 +55,9 @@ homepage: https://www.r-project.org license: GPLv2+ depends: - fontconfig -- ${gxx_package-g++} - ${gcc_package-gcc} -- ${gfortran_package-gfortran} +- ${gxx_package-gcc-c++} +- ${gfortran_package-gcc-fortran} - glibc-locale - gzip - icu.691-devel From e57ed87faedd3993e7e42e595b121b2c15f591b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Fri, 10 Feb 2023 15:27:05 +0100 Subject: [PATCH 046/105] Fix R-devel build on OpenSUSE More details: https://stat.ethz.ch/pipermail/r-devel/2023-February/082304.html https://stat.ethz.ch/pipermail/r-devel/2023-February/082315.html --- builder/Dockerfile.opensuse-153 | 1 + builder/Dockerfile.opensuse-154 | 1 + builder/build.sh | 9 +++++++++ builder/patches/R-devel.patch | 28 ++++++++++++++++++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 builder/patches/R-devel.patch diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index fbea3b1..6bb332c 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -92,4 +92,5 @@ ENV CONFIGURE_OPTIONS="\ COPY package.opensuse-153 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index f3134fa..9b6af15 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -102,4 +102,5 @@ ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk COPY package.opensuse-154 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/build.sh b/builder/build.sh index eee64ab..7f49b3e 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -64,6 +64,14 @@ fetch_r_source() { rm /tmp/R-${1}.tar.gz } +patch_r() { + cd /tmp/R-${1} + + if [ -f "/patches/R-${1}.patch" ]; then + patch -p1 < "/patches/R-${1}.patch" + fi +} + # compile_r() - $1 as r version compile_r() { cd /tmp/R-${1} @@ -207,6 +215,7 @@ _version_is_less_than() { ###### RUN R COMPILE PROCEDURE ###### set_up_environment fetch_r_source $R_VERSION +patch_r $R_VERSION compile_r $R_VERSION package_r $R_VERSION archive_r diff --git a/builder/patches/R-devel.patch b/builder/patches/R-devel.patch new file mode 100644 index 0000000..4495917 --- /dev/null +++ b/builder/patches/R-devel.patch @@ -0,0 +1,28 @@ +diff --git a/src/extra/blas/Makefile.in b/src/extra/blas/Makefile.in +index 3661416..c9b53e2 100644 +--- a/src/extra/blas/Makefile.in ++++ b/src/extra/blas/Makefile.in +@@ -17,7 +17,7 @@ include $(top_builddir)/Makeconf + + ALL_CFLAGS = $(ALL_CFLAGS_LO) + ALL_FFLAGS = $(ALL_FFLAGS_LO) +-ALL_FCLAGS = $(ALL_FFLAGS_LO) ++ALL_FCFLAGS = $(ALL_FFLAGS_LO) + + SOURCES = blas00.c blas.f cmplxblas.f blas2.f90 cmplxblas2.f90 + +diff --git a/src/modules/lapack/Makefile.in b/src/modules/lapack/Makefile.in +index 8e593ea..e35c956 100644 +--- a/src/modules/lapack/Makefile.in ++++ b/src/modules/lapack/Makefile.in +@@ -15,6 +15,10 @@ include $(top_builddir)/Makeconf + .f90.o: + $(FC) $(ALL_FCFLAGS) -c @FCFLAGS_f90@ $< -o $@ + ++ALL_CFLAGS = $(ALL_CFLAGS_LO) ++ALL_FFLAGS = $(ALL_FFLAGS_LO) ++ALL_FCFLAGS = $(ALL_FFLAGS_LO) ++ + SOURCES_C = Lapack.c @USE_VECLIB_G95FIX_TRUE@ vecLibg95c.c + SOURCES_F = @USE_VECLIB_G95FIX_TRUE@ vecLibg95f.f + From 0e9c3417413294413ba3439b9f30253791893f78 Mon Sep 17 00:00:00 2001 From: Steve Nolen Date: Mon, 27 Feb 2023 09:03:00 -0500 Subject: [PATCH 047/105] bump sls package deps --- Makefile | 2 +- package-lock.json | 13411 +++++++++++++++++++++++--------------------- package.json | 6 +- 3 files changed, 7154 insertions(+), 6265 deletions(-) diff --git a/Makefile b/Makefile index e13a46b..7e9be6b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 rhel-9 opensuse-153 opensuse-154 -SLS_BINARY ?= ./node_modules/serverless/bin/serverless +SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: npm install diff --git a/package-lock.json b/package-lock.json index 3e1efb8..866155c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,5462 @@ { "name": "r-builds", "version": "0.1.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "r-builds", + "version": "0.1.0", + "devDependencies": { + "serverless": "^3.21.0", + "serverless-pseudo-parameters": "^2.2.0", + "serverless-python-requirements": "^5.4.0", + "serverless-step-functions": "^3.12.1" + } + }, + "node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "deprecated": "Moved to 'npm install @sideway/address'", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "deprecated": "Switch to 'npm install joi'", + "dev": true, + "dependencies": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true, + "dependencies": { + "@hapi/hoek": "^8.3.0" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@serverless/dashboard-plugin": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-6.2.2.tgz", + "integrity": "sha512-h3zOprpuWZCdAP7qoOKT2nboB+AaxMkGoSzOD0jIBpt9s0cXqLE2VFjR2vKn8Cvam47Qa3XYnT2/XN6tR6rZgQ==", + "dev": true, + "dependencies": { + "@serverless/event-mocks": "^1.1.1", + "@serverless/platform-client": "^4.3.2", + "@serverless/utils": "^6.0.3", + "child-process-ext": "^2.1.1", + "chokidar": "^3.5.3", + "flat": "^5.0.2", + "fs-extra": "^9.1.0", + "js-yaml": "^4.1.0", + "jszip": "^3.9.1", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "ncjsm": "^4.3.0", + "node-dir": "^0.1.17", + "node-fetch": "^2.6.7", + "open": "^7.4.2", + "semver": "^7.3.7", + "simple-git": "^3.7.0", + "type": "^2.6.0", + "uuid": "^8.3.2", + "yamljs": "^0.3.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@serverless/dashboard-plugin/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@serverless/event-mocks": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", + "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", + "dev": true, + "dependencies": { + "@types/lodash": "^4.14.123", + "lodash": "^4.17.11" + } + }, + "node_modules/@serverless/platform-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.3.2.tgz", + "integrity": "sha512-DAa5Z0JAZc6UfrTZLYwqoZxgAponZpFwaqd7WzzMA+loMCkYWyJNwxrAmV6cr2UUJpkko4toPZuJ3vM9Ie+NDA==", + "dev": true, + "dependencies": { + "adm-zip": "^0.5.5", + "archiver": "^5.3.0", + "axios": "^0.21.1", + "fast-glob": "^3.2.7", + "https-proxy-agent": "^5.0.0", + "ignore": "^5.1.8", + "isomorphic-ws": "^4.0.1", + "js-yaml": "^3.14.1", + "jwt-decode": "^2.2.0", + "minimatch": "^3.0.4", + "querystring": "^0.2.1", + "run-parallel-limit": "^1.1.0", + "throat": "^5.0.0", + "traverse": "^0.6.6", + "ws": "^7.5.3" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@serverless/platform-client/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@serverless/platform-client/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@serverless/utils": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.8.2.tgz", + "integrity": "sha512-FW8zdG8OPoF6qgyutiMhz4m/5SxbQjoQdbaGcW3wU6xe3QzQh41Hif7I3Xuu4J62CvxiWuz19sxNDJz2mTcskw==", + "dev": true, + "dependencies": { + "archive-type": "^4.0.0", + "chalk": "^4.1.2", + "ci-info": "^3.5.0", + "cli-progress-footer": "^2.3.2", + "content-disposition": "^0.5.4", + "d": "^1.0.1", + "decompress": "^4.2.1", + "event-emitter": "^0.3.5", + "ext": "^1.7.0", + "ext-name": "^5.0.0", + "file-type": "^16.5.4", + "filenamify": "^4.3.0", + "get-stream": "^6.0.1", + "got": "^11.8.5", + "inquirer": "^8.2.5", + "js-yaml": "^4.1.0", + "jwt-decode": "^3.1.2", + "lodash": "^4.17.21", + "log": "^6.3.1", + "log-node": "^8.0.3", + "make-dir": "^3.1.0", + "memoizee": "^0.4.15", + "ncjsm": "^4.3.1", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "p-event": "^4.2.0", + "supports-color": "^8.1.1", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "uni-global": "^1.0.0", + "uuid": "^8.3.2", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/@serverless/utils/node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "dev": true + }, + "node_modules/@serverless/utils/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "dev": true + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/2-thenable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", + "integrity": "sha512-HqiDzaLDFCXkcCO/SwoyhRwqYtINFHF7t9BDRq4x90TOKNAJpiqUt9X5lQ08bwxYzc067HUywDjGySpebHcUpw==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.47" + } + }, + "node_modules/adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/appdirectory": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", + "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U=", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true + }, + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "dev": true, + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asl-path-validator": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/asl-path-validator/-/asl-path-validator-0.11.0.tgz", + "integrity": "sha512-2kfFkqNCXInc7d8hbUoXn/XpK5fFr3//0nh4jfcZWav0VR4zo2bYVlRCwOuNKJID9yM4vIo7dMb4n0fnWrc/Xw==", + "dev": true, + "dependencies": { + "jsonpath-plus": "^7.0.0" + } + }, + "node_modules/asl-validator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/asl-validator/-/asl-validator-3.1.0.tgz", + "integrity": "sha512-J2OmT6lkj2RHojDLWyqh33BNCBfpOIAEl1z01cd/4WiGt8Sjgqx+gbX7WsgVKGS4uF/pGwc1EkrZvm0mSRMcWA==", + "dev": true, + "dependencies": { + "ajv": "^8.11.0", + "asl-path-validator": "^0.11.0", + "commander": "^5.1.0", + "jsonpath-plus": "^7.0.0" + }, + "bin": { + "asl-validator": "dist/bin/asl-validator.js" + } + }, + "node_modules/asl-validator/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1298.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1298.0.tgz", + "integrity": "sha512-UMaQe1Rohqguwl4V8e47SHrerboP5QpD7bx6mVZIoV2+AQ5xf8CyXjYXB95u5yvPyjIvpoRxiPKKOtnHL77q4A==", + "dev": true, + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/child-process-ext": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/child-process-ext/-/child-process-ext-2.1.1.tgz", + "integrity": "sha512-0UQ55f51JBkOFa+fvR76ywRzxiPwQS3Xe8oe5bZRphpv+dIMeerW5Zn5e4cUy4COJwVtJyU0R79RMnw+aCqmGA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.5", + "es5-ext": "^0.10.53", + "log": "^6.0.0", + "split2": "^3.1.1", + "stream-promise": "^3.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-color": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress-footer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz", + "integrity": "sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw==", + "dev": true, + "dependencies": { + "cli-color": "^2.0.2", + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "mute-stream": "0.0.8", + "process-utils": "^4.0.0", + "timers-ext": "^0.1.7", + "type": "^2.6.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-sprintf-format": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz", + "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==", + "dev": true, + "dependencies": { + "cli-color": "^2.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cli-sprintf-format/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-sprintf-format/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/d/node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "dependencies": { + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "node_modules/decompress-tar/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/decompress-tar/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/decompress-tar/node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "dev": true, + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/deferred": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/deferred/-/deferred-0.7.11.tgz", + "integrity": "sha512-8eluCl/Blx4YOGwMapBvXRKxHXhA8ejDXYzEaK8+/gtcm8hRMhSLmXSqDmNUKNc/C8HNSmuyyp/hflhqDAvK2A==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.50", + "event-emitter": "^0.3.5", + "next-tick": "^1.0.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv-expand": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-9.0.0.tgz", + "integrity": "sha512-uW8Hrhp5ammm9x7kBLR6jDfujgaDarNA02tprvZdyrJ7MpdzD1KyrIHG4l+YoC2fJ2UcdFdNWNWIjt+sexBHJw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esniff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", + "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.12" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/essentials": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz", + "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==", + "dev": true, + "dependencies": { + "uni-global": "^1.0.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "dev": true, + "dependencies": { + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "dev": true, + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dev": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filenamify": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", + "dev": true, + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/filesize": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.6.tgz", + "integrity": "sha512-rzpOZ4C9vMFDqOa6dNpog92CoLYjD79dnjLk2TYDDtImRIyLTOzqojCb05Opd1WuiWjs+fshhCgTd8cl7y5t+g==", + "dev": true, + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-requires": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", + "integrity": "sha512-UME7hNwBfzeISSFQcBEDemEEskpOjI/shPrpJM5PI4DSdn6hX0dmz+2dL70blZER2z8tSnTRL+2rfzlYgtbBoQ==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.49", + "esniff": "^1.1.0" + }, + "bin": { + "find-requires": "bin/find-requires.js" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", + "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fs2": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", + "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "deferred": "^0.7.11", + "es5-ext": "^0.10.53", + "event-emitter": "^0.3.5", + "ignore": "^5.1.8", + "memoizee": "^0.4.14", + "type": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-all": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz", + "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==", + "dev": true, + "dependencies": { + "glob": "^7.2.3", + "yargs": "^15.3.1" + }, + "bin": { + "glob-all": "bin/glob-all" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "dev": true, + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-cycle": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-cycle/-/json-cycle-1.3.0.tgz", + "integrity": "sha512-FD/SedD78LCdSvJaOUQAXseT8oQBb5z6IVYaQaCrVUlu9zOAr1BDdKyVYQaSD/GDsAMrXpKcOyBD4LIl8nfjHw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/json-refs": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", + "dev": true, + "dependencies": { + "commander": "~4.1.1", + "graphlib": "^2.1.8", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "native-promise-only": "^0.8.1", + "path-loader": "^1.0.10", + "slash": "^3.0.0", + "uri-js": "^4.2.2" + }, + "bin": { + "json-refs": "bin/json-refs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/json-refs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/json-refs/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath-plus": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", + "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/jwt-decode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", + "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", + "dev": true + }, + "node_modules/lodash.values": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-4.3.0.tgz", + "integrity": "sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=", + "dev": true + }, + "node_modules/log": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", + "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "duration": "^0.2.2", + "es5-ext": "^0.10.53", + "event-emitter": "^0.3.5", + "sprintf-kit": "^2.0.1", + "type": "^2.5.0", + "uni-global": "^1.0.0" + } + }, + "node_modules/log-node": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz", + "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "cli-color": "^2.0.1", + "cli-sprintf-format": "^1.1.1", + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^8.1.1", + "type": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "peerDependencies": { + "log": "^6.0.0" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", + "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", + "dev": true + }, + "node_modules/ncjsm": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.3.2.tgz", + "integrity": "sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0", + "deferred": "^0.7.11", + "es5-ext": "^0.10.62", + "es6-set": "^0.1.6", + "ext": "^1.7.0", + "find-requires": "^1.0.0", + "fs2": "^0.3.9", + "type": "^2.7.2" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-registry-utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz", + "integrity": "sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg==", + "dev": true, + "dependencies": { + "ext": "^1.6.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.15", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "type": "^2.6.0", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-loader": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", + "dev": true, + "dependencies": { + "native-promise-only": "^0.8.1", + "superagent": "^7.1.6" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path2": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", + "integrity": "sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==", + "dev": true + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/process-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", + "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", + "dev": true, + "dependencies": { + "ext": "^1.4.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.14", + "type": "^2.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/promise-queue": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", + "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", + "integrity": "sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==", + "dev": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "dev": true + }, + "node_modules/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "node_modules/seek-bzip/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serverless": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.26.0.tgz", + "integrity": "sha512-drVr4akkQwm2Pj7ZN9boh5PoI2nKvlXmy+Cb8Hh1Zv8ybsf47ZUQE6t7dakGA4irYf4SQCbVc72nKqISfarMCQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@serverless/dashboard-plugin": "^6.2.2", + "@serverless/platform-client": "^4.3.2", + "@serverless/utils": "^6.8.2", + "ajv": "^8.11.2", + "ajv-formats": "^2.1.1", + "archiver": "^5.3.1", + "aws-sdk": "^2.1280.0", + "bluebird": "^3.7.2", + "cachedir": "^2.3.0", + "chalk": "^4.1.2", + "child-process-ext": "^2.1.1", + "ci-info": "^3.7.0", + "cli-progress-footer": "^2.3.2", + "d": "^1.0.1", + "dayjs": "^1.11.7", + "decompress": "^4.2.1", + "dotenv": "^16.0.3", + "dotenv-expand": "^9.0.0", + "essentials": "^1.2.0", + "ext": "^1.7.0", + "fastest-levenshtein": "^1.0.16", + "filesize": "^10.0.6", + "fs-extra": "^10.1.0", + "get-stdin": "^8.0.0", + "globby": "^11.1.0", + "got": "^11.8.6", + "graceful-fs": "^4.2.10", + "https-proxy-agent": "^5.0.1", + "is-docker": "^2.2.1", + "js-yaml": "^4.1.0", + "json-cycle": "^1.3.0", + "json-refs": "^3.0.15", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "micromatch": "^4.0.5", + "node-fetch": "^2.6.7", + "npm-registry-utilities": "^1.0.0", + "object-hash": "^3.0.0", + "open": "^8.4.0", + "path2": "^0.1.0", + "process-utils": "^4.0.0", + "promise-queue": "^2.2.5", + "require-from-string": "^2.0.2", + "semver": "^7.3.8", + "signal-exit": "^3.0.7", + "strip-ansi": "^6.0.1", + "supports-color": "^8.1.1", + "tar": "^6.1.13", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "untildify": "^4.0.0", + "uuid": "^9.0.0", + "yaml-ast-parser": "0.0.43" + }, + "bin": { + "serverless": "bin/serverless.js", + "sls": "bin/serverless.js" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/serverless-pseudo-parameters": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serverless-pseudo-parameters/-/serverless-pseudo-parameters-2.2.0.tgz", + "integrity": "sha512-eGgKkpOwnqnrmTZH87xnK+cVs9sz5d7fQnIR1K+BE1AobMd24oz4jswCkmhavYI6QF8Z3XL1Fekx+dfDn7ki+w==", + "deprecated": "All functionalities as provided by plugin are natively supported by Serveless Framework (from 2.50.0 onwards)", + "dev": true + }, + "node_modules/serverless-python-requirements": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-5.4.0.tgz", + "integrity": "sha512-0ji96KayLG3G3vxtHS6GRcU2879tFPk6gAaRejRkPCf4RxmbebWjIbf56xljRi7DmBzhmxLJd93FVGPq9aundQ==", + "dev": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "appdirectory": "^0.1.0", + "bluebird": "^3.7.2", + "child-process-ext": "^2.1.1", + "fs-extra": "^9.1.0", + "glob-all": "^3.3.0", + "is-wsl": "^2.2.0", + "jszip": "^3.7.1", + "lodash.get": "^4.4.2", + "lodash.uniqby": "^4.7.0", + "lodash.values": "^4.3.0", + "rimraf": "^3.0.2", + "set-value": "^4.1.0", + "sha256-file": "1.0.0", + "shell-quote": "^1.7.3" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "serverless": "^2.32 || 3" + } + }, + "node_modules/serverless-python-requirements/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serverless-step-functions": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/serverless-step-functions/-/serverless-step-functions-3.12.1.tgz", + "integrity": "sha512-8PObLriopBZqcEJgFXGKOb3NTXft9zWdYPoQp7tjacPg7sC0EqAgEm4vQ3ZWWg4eidmu1wKv+2QZrzKpUHC0UQ==", + "dev": true, + "dependencies": { + "@hapi/joi": "^15.0.2", + "@serverless/utils": "^6.7.0", + "asl-validator": "^3.1.0", + "bluebird": "^3.4.0", + "chalk": "^4.1.2", + "lodash": "^4.17.11" + }, + "peerDependencies": { + "serverless": "^2.32.0 || 3" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/sha256-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", + "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-git": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", + "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dev": true, + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sprintf-kit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", + "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.53" + } + }, + "node_modules/stream-promise": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", + "integrity": "sha512-P+7muTGs2C8yRcgJw/PPt61q7O517tDHiwYEzMWo1GSBCcZedUMT/clz7vUNsSxFphIlJ6QUL4GexQKlfJoVtA==", + "dev": true, + "dependencies": { + "2-thenable": "^1.0.0", + "es5-ext": "^0.10.49", + "is-stream": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "node_modules/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/superagent": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "deprecated": "Please downgrade to v7.1.5 if you need IE/ActiveXObject support OR upgrade to v8.0.0 as we no longer support IE and published an incorrect patch version (see https://github.com/visionmedia/superagent/issues/1731)", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dev": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/token-types/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "dev": true + }, + "node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unbzip2-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/uni-global": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", + "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "node_modules/url/node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true + }, + "node_modules/yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, "dependencies": { + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "dev": true + }, + "@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "requires": { + "debug": "^4.1.1" + } + }, + "@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@serverless/dashboard-plugin": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/@serverless/dashboard-plugin/-/dashboard-plugin-6.2.2.tgz", + "integrity": "sha512-h3zOprpuWZCdAP7qoOKT2nboB+AaxMkGoSzOD0jIBpt9s0cXqLE2VFjR2vKn8Cvam47Qa3XYnT2/XN6tR6rZgQ==", + "dev": true, + "requires": { + "@serverless/event-mocks": "^1.1.1", + "@serverless/platform-client": "^4.3.2", + "@serverless/utils": "^6.0.3", + "child-process-ext": "^2.1.1", + "chokidar": "^3.5.3", + "flat": "^5.0.2", + "fs-extra": "^9.1.0", + "js-yaml": "^4.1.0", + "jszip": "^3.9.1", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "ncjsm": "^4.3.0", + "node-dir": "^0.1.17", + "node-fetch": "^2.6.7", + "open": "^7.4.2", + "semver": "^7.3.7", + "simple-git": "^3.7.0", + "type": "^2.6.0", + "uuid": "^8.3.2", + "yamljs": "^0.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "@serverless/event-mocks": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", + "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", + "dev": true, + "requires": { + "@types/lodash": "^4.14.123", + "lodash": "^4.17.11" + } + }, + "@serverless/platform-client": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-4.3.2.tgz", + "integrity": "sha512-DAa5Z0JAZc6UfrTZLYwqoZxgAponZpFwaqd7WzzMA+loMCkYWyJNwxrAmV6cr2UUJpkko4toPZuJ3vM9Ie+NDA==", + "dev": true, + "requires": { + "adm-zip": "^0.5.5", + "archiver": "^5.3.0", + "axios": "^0.21.1", + "fast-glob": "^3.2.7", + "https-proxy-agent": "^5.0.0", + "ignore": "^5.1.8", + "isomorphic-ws": "^4.0.1", + "js-yaml": "^3.14.1", + "jwt-decode": "^2.2.0", + "minimatch": "^3.0.4", + "querystring": "^0.2.1", + "run-parallel-limit": "^1.1.0", + "throat": "^5.0.0", + "traverse": "^0.6.6", + "ws": "^7.5.3" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@serverless/utils": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@serverless/utils/-/utils-6.8.2.tgz", + "integrity": "sha512-FW8zdG8OPoF6qgyutiMhz4m/5SxbQjoQdbaGcW3wU6xe3QzQh41Hif7I3Xuu4J62CvxiWuz19sxNDJz2mTcskw==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "chalk": "^4.1.2", + "ci-info": "^3.5.0", + "cli-progress-footer": "^2.3.2", + "content-disposition": "^0.5.4", + "d": "^1.0.1", + "decompress": "^4.2.1", + "event-emitter": "^0.3.5", + "ext": "^1.7.0", + "ext-name": "^5.0.0", + "file-type": "^16.5.4", + "filenamify": "^4.3.0", + "get-stream": "^6.0.1", + "got": "^11.8.5", + "inquirer": "^8.2.5", + "js-yaml": "^4.1.0", + "jwt-decode": "^3.1.2", + "lodash": "^4.17.21", + "log": "^6.3.1", + "log-node": "^8.0.3", + "make-dir": "^3.1.0", + "memoizee": "^0.4.15", + "ncjsm": "^4.3.1", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "p-event": "^4.2.0", + "supports-color": "^8.1.1", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "uni-global": "^1.0.0", + "uuid": "^8.3.2", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "dev": true + }, + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, + "@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "2-thenable": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/2-thenable/-/2-thenable-1.0.0.tgz", @@ -14,308 +5467,132 @@ "es5-ext": "^0.10.47" } }, - "@babel/parser": { - "version": "7.9.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.4.tgz", - "integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==", + "adm-zip": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", + "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", "dev": true }, - "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", - "run-parallel": "^1.1.9" + "debug": "4" } }, - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", - "fastq": "^1.6.0" + "color-convert": "^2.0.1" } }, - "@serverless/component-metrics": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@serverless/component-metrics/-/component-metrics-1.0.8.tgz", - "integrity": "sha512-lOUyRopNTKJYVEU9T6stp2irwlTDsYMmUKBOUjnMcwGveuUfIJqrCOtFLtIPPj3XJlbZy5F68l4KP9rZ8Ipang==", + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { - "node-fetch": "^2.6.0", - "shortid": "^2.2.14" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "appdirectory": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", + "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U=", + "dev": true + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", + "dev": true, + "requires": { + "file-type": "^4.2.0" }, "dependencies": { - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", "dev": true } } }, - "@serverless/components": { - "version": "2.30.2", - "resolved": "https://registry.npmjs.org/@serverless/components/-/components-2.30.2.tgz", - "integrity": "sha512-iQNOb1KYMUjdWzVY6DjTA8dOw8p2BIo6s3cYxm+4n2/PWpPbnJs2ukXMif6lxxmvBpq7aDZsg6LPnIoJsX8Smg==", + "archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "dev": true, "requires": { - "@serverless/inquirer": "^1.1.0", - "@serverless/platform-client": "^0.25.4", - "@serverless/platform-client-china": "^1.0.9", - "@serverless/platform-sdk": "^2.3.0", - "adm-zip": "^0.4.14", - "ansi-escapes": "^4.3.1", - "axios": "^0.19.2", - "chalk": "^2.4.2", - "chokidar": "^3.3.1", - "dotenv": "^8.2.0", - "figures": "^3.2.0", - "fs-extra": "^8.1.0", - "global-agent": "^2.1.8", - "globby": "^10.0.2", - "graphlib": "^2.1.8", - "ini": "^1.3.5", - "js-yaml": "^3.13.1", - "minimist": "^1.2.5", - "moment": "^2.24.0", - "open": "^7.0.3", - "prettyoutput": "^1.2.0", - "ramda": "^0.26.1", - "strip-ansi": "^5.2.0", - "traverse": "^0.6.6", - "uuid": "^3.4.0", - "ws": "^7.2.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" } }, - "@serverless/core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@serverless/core/-/core-1.1.2.tgz", - "integrity": "sha512-PY7gH+7aQ+MltcUD7SRDuQODJ9Sav9HhFJsgOiyf8IVo7XVD6FxZIsSnpMI6paSkptOB7n+0Jz03gNlEkKetQQ==", + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "requires": { - "fs-extra": "^7.0.1", - "js-yaml": "^3.13.1", - "package-json": "^6.3.0", - "ramda": "^0.26.1", - "semver": "^6.1.1" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@serverless/enterprise-plugin": { - "version": "3.6.8", - "resolved": "https://registry.npmjs.org/@serverless/enterprise-plugin/-/enterprise-plugin-3.6.8.tgz", - "integrity": "sha512-FgKEsCMiQUONRHKMFcSPs+uEdeVnMp7lcggcFvEZimHcb+qzP5TFXSb1aphb1eVShPT88CU2THOvMJTVzuttUQ==", - "dev": true, - "requires": { - "@serverless/event-mocks": "^1.1.1", - "@serverless/platform-client": "^0.25.6", - "@serverless/platform-sdk": "^2.3.0", - "chalk": "^2.4.2", - "child-process-ext": "^2.1.0", - "chokidar": "^3.3.1", - "cli-color": "^2.0.0", - "dependency-tree": "^7.2.1", - "find-process": "^1.4.3", - "flat": "^5.0.0", - "fs-extra": "^8.1.0", - "iso8601-duration": "^1.2.0", - "isomorphic-fetch": "^2.2.1", - "js-yaml": "^3.13.1", - "jsonata": "^1.8.1", - "jszip": "^3.2.2", - "lodash": "^4.17.15", - "memoizee": "^0.4.14", - "moment": "^2.24.0", - "node-dir": "^0.1.17", - "node-fetch": "^2.6.0", - "regenerator-runtime": "^0.13.5", - "semver": "^6.3.0", - "simple-git": "^1.132.0", - "source-map-support": "^0.5.16", - "update-notifier": "^2.5.0", - "uuid": "^3.4.0", - "yamljs": "^0.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -337,12 +5614,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -351,718 +5622,13 @@ "requires": { "safe-buffer": "~5.1.0" } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "@serverless/event-mocks": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@serverless/event-mocks/-/event-mocks-1.1.1.tgz", - "integrity": "sha512-YAV5V/y+XIOfd+HEVeXfPWZb8C6QLruFk9tBivoX2roQLWVq145s4uxf8D0QioCueuRzkukHUS4JIj+KVoS34A==", - "dev": true, - "requires": { - "@types/lodash": "^4.14.123", - "lodash": "^4.17.11" - } - }, - "@serverless/inquirer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@serverless/inquirer/-/inquirer-1.1.0.tgz", - "integrity": "sha512-MpNMmV0uADfmGF8jVQ3Vmw+cdh7vAc8Ga/N9LHDhlbWh+EVHkqlpTi6bb3Xv6WsaPlWrx55Wo389IwpbhA0nPQ==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "inquirer": "^7.1.0", - "ncjsm": "^4.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "inquirer": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", - "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^3.0.0", - "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.4.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@serverless/platform-client": { - "version": "0.25.6", - "resolved": "https://registry.npmjs.org/@serverless/platform-client/-/platform-client-0.25.6.tgz", - "integrity": "sha512-7VutXMMypWI8MTfIrz726g77PmuI56Yy3EXVoFRG1lRwK3UDmqJf+4aY7uZ+7t8TlbfOCAqSDxpY6UBTS6RrOA==", - "dev": true, - "requires": { - "adm-zip": "^0.4.13", - "axios": "^0.19.2", - "https-proxy-agent": "^5.0.0", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.13.1", - "jwt-decode": "^2.2.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.0", - "traverse": "^0.6.6", - "ws": "^7.2.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@serverless/platform-client-china": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@serverless/platform-client-china/-/platform-client-china-1.0.9.tgz", - "integrity": "sha512-P2OXDa3S9meOOGJm2i4/d/9HlEjg8FwwfWl4Vq7jjJlA12cJaJnXy/mKgx16eA/YSYNtfW7i4NGyeADvIGNzmg==", - "dev": true, - "requires": { - "@serverless/utils-china": "^0.1.6", - "adm-zip": "^0.4.13", - "axios": "^0.19.2", - "dotenv": "^8.2.0", - "https-proxy-agent": "^5.0.0", - "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.13.1", - "jwt-decode": "^2.2.0", - "minimatch": "^3.0.4", - "querystring": "^0.2.0", - "traverse": "^0.6.6", - "urlencode": "^1.1.0", - "ws": "^7.2.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@serverless/platform-sdk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@serverless/platform-sdk/-/platform-sdk-2.3.0.tgz", - "integrity": "sha512-+9TiMYDVKJOyDWg9p/k0kmGVZ3+rjB8DXpACDxxyUChDSsRS55CTJnt321Yx7APfHctNRSnv3ubYmx7oGSTETQ==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "https-proxy-agent": "^4.0.0", - "is-docker": "^1.1.0", - "isomorphic-fetch": "^2.2.1", - "jwt-decode": "^2.2.0", - "opn": "^5.5.0", - "querystring": "^0.2.0", - "ramda": "^0.25.0", - "rc": "^1.2.8", - "regenerator-runtime": "^0.13.1", - "source-map-support": "^0.5.12", - "uuid": "^3.3.2", - "write-file-atomic": "^2.4.2", - "ws": "<7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "ramda": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.25.0.tgz", - "integrity": "sha512-GXpfrYVPwx3K7RQ6aYT8KPS8XViSXUVJT1ONhoKPE9VAleW42YE+U+8VEyGWt41EnEQW7gwecYJriTI0pKoecQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "@serverless/template": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@serverless/template/-/template-1.1.3.tgz", - "integrity": "sha512-hcMiX523rkp6kHeKnM1x6/dXEY+d1UFSr901yVKeeCgpFy4u33UI9vlKaPweAZCF6Ahzqywf01IsFTuBVadCrQ==", - "dev": true, - "requires": { - "@serverless/component-metrics": "^1.0.8", - "@serverless/core": "^1.0.0", - "graphlib": "^2.1.7", - "traverse": "^0.6.6" - } - }, - "@serverless/utils-china": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@serverless/utils-china/-/utils-china-0.1.6.tgz", - "integrity": "sha512-BPaKkRJ47yKTIqRkwF62V5Z/SGdNDmNtinu3fK4988CG1gXBVG2yb3Cq34A98B4BAwZdKzxKCV2n9q4dl1zolw==", - "dev": true, - "requires": { - "@tencent-sdk/capi": "^0.2.15-alpha.0", - "dijkstrajs": "^1.0.1", - "dot-qs": "0.2.0", - "duplexify": "^4.1.1", - "end-of-stream": "^1.4.4", - "https-proxy-agent": "^5.0.0", - "socket.io-client": "^2.3.0", - "socket.io-stream": "^0.9.1", - "winston": "^3.2.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tencent-sdk/capi": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/@tencent-sdk/capi/-/capi-0.2.15.tgz", - "integrity": "sha512-5t94Mo/+Kdvr60tJR/+pylUCwIM+ipcBIkUi4M7dtV0yCpuykOXV4GYT1aWg/iWMXyIPnfOUk4Pr6OwDoAVehw==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "querystring": "^0.2.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.8" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.150", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.150.tgz", - "integrity": "sha512-kMNLM5JBcasgYscD9x/Gvr6lTAv2NVgsKtet/hm93qMyf/D1pt+7jeEZklKJKxMVmXjxbRVQQGfqDSfipYCO6w==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "13.13.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", - "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.30.0.tgz", - "integrity": "sha512-nI5WOechrA0qAhnr+DzqwmqHsx7Ulr/+0H7bWCcClDhhWkSyZR5BmTvnBEyONwJCTWHfc5PAQExX24VD26IAVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^6.3.0", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "adm-zip": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", - "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", - "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", - "dev": true, - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-module-path": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", - "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=", - "dev": true - }, - "appdirectory": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", - "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U=", - "dev": true - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true - } - } - }, - "archiver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz", - "integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "walkdir": "^0.0.11", - "zip-stream": "^1.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - } - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } } } }, "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "array-union": { @@ -1071,375 +5637,153 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "asl-path-validator": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/asl-path-validator/-/asl-path-validator-0.11.0.tgz", + "integrity": "sha512-2kfFkqNCXInc7d8hbUoXn/XpK5fFr3//0nh4jfcZWav0VR4zo2bYVlRCwOuNKJID9yM4vIo7dMb4n0fnWrc/Xw==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "jsonpath-plus": "^7.0.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-module-types": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.6.0.tgz", - "integrity": "sha512-zXSoVaMrf2R+r+ISid5/9a8SXm1LLdkhHzh6pSRhj9jklzruOOl1hva1YmFT33wAstg/f9ZndJAlq1BSrFLSGA==", - "dev": true + "asl-validator": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/asl-validator/-/asl-validator-3.1.0.tgz", + "integrity": "sha512-J2OmT6lkj2RHojDLWyqh33BNCBfpOIAEl1z01cd/4WiGt8Sjgqx+gbX7WsgVKGS4uF/pGwc1EkrZvm0mSRMcWA==", + "dev": true, + "requires": { + "ajv": "^8.11.0", + "asl-path-validator": "^0.11.0", + "commander": "^5.1.0", + "jsonpath-plus": "^7.0.0" + }, + "dependencies": { + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + } + } }, "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true }, "aws-sdk": { - "version": "2.364.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.364.0.tgz", - "integrity": "sha512-A831FbWeCW893/KtQDUOwgYD3BMa6v/cpbw74LegUgdsOVSZHgibMaa0CepOB0KfMMKACdRsEETvumdQBnL3XA==", + "version": "2.1298.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1298.0.tgz", + "integrity": "sha512-UMaQe1Rohqguwl4V8e47SHrerboP5QpD7bx6mVZIoV2+AQ5xf8CyXjYXB95u5yvPyjIvpoRxiPKKOtnHL77q4A==", "dev": true, "requires": { - "buffer": "4.9.1", + "buffer": "4.9.2", "events": "1.1.1", - "ieee754": "1.1.8", - "jmespath": "0.15.0", + "ieee754": "1.1.13", + "jmespath": "0.16.0", "querystring": "0.2.0", "sax": "1.2.1", "url": "0.10.3", - "uuid": "3.1.0", + "util": "^0.12.4", + "uuid": "8.0.0", "xml2js": "0.4.19" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", - "dev": true - }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10" - } - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "dev": true + }, + "uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "dev": true } } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" }, "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } } } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "boolean": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.1.tgz", - "integrity": "sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA==", - "dev": true - }, - "boxen": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz", - "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^2.4.2", - "cli-boxes": "^2.2.0", - "string-width": "^3.0.0", - "term-size": "^1.2.0", - "type-fest": "^0.3.0", - "widest-line": "^2.0.0" - }, - "dependencies": { - "ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "requires": { - "string-width": "^3.0.0" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cli-boxes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz", - "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1460,9 +5804,9 @@ } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -1489,73 +5833,56 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, "builtin-modules": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", - "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true }, "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "dependencies": { "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true } } }, @@ -1565,53 +5892,41 @@ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "chardet": { @@ -1634,130 +5949,43 @@ } }, "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.6.0" } }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", "dev": true }, "cli-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.0.tgz", - "integrity": "sha512-a0VZ8LeraW0jTuCkuAGMNufareGHhyZU9z8OGsW0gXd1hZGi1SRuNRXdbGkraBBKnhyUhyebFWnRbp+dIn0f0A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz", + "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==", "dev": true, "requires": { - "ansi-regex": "^2.1.1", "d": "^1.0.1", - "es5-ext": "^0.10.51", + "es5-ext": "^0.10.61", "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", + "memoizee": "^0.4.15", "timers-ext": "^0.1.7" } }, @@ -1770,10 +5998,60 @@ "restore-cursor": "^3.1.0" } }, + "cli-progress-footer": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/cli-progress-footer/-/cli-progress-footer-2.3.2.tgz", + "integrity": "sha512-uzHGgkKdeA9Kr57eyH1W5HGiNShP8fV1ETq04HDNM1Un6ShXbHhwi/H8LNV9L1fQXKjEw0q5FUkEVNuZ+yZdSw==", + "dev": true, + "requires": { + "cli-color": "^2.0.2", + "d": "^1.0.1", + "es5-ext": "^0.10.61", + "mute-stream": "0.0.8", + "process-utils": "^4.0.0", + "timers-ext": "^0.1.7", + "type": "^2.6.0" + } + }, + "cli-spinners": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", + "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", + "dev": true + }, + "cli-sprintf-format": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cli-sprintf-format/-/cli-sprintf-format-1.1.1.tgz", + "integrity": "sha512-BbEjY9BEdA6wagVwTqPvmAwGB24U93rQPBFZUT8lNCDxXzre5LFHQUTJc70czjgUomVg8u8R5kW8oY9DYRFNeg==", + "dev": true, + "requires": { + "cli-color": "^2.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { @@ -1787,99 +6065,49 @@ "wrap-ansi": "^6.2.0" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=", - "dev": true - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "dev": true, - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" - } - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1890,184 +6118,70 @@ } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dev": true, "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } + "safe-buffer": "5.2.1" } }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - }, - "dependencies": { - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - } - } + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true }, "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" } }, "cross-spawn": { @@ -2081,14 +6195,16 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -2107,51 +6223,27 @@ } } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "dayjs": { - "version": "1.8.25", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.25.tgz", - "integrity": "sha512-Pk36juDfQQGDCgr0Lqd1kw15w3OS6xt21JaLPE3lCfsEf8KrERGwDNwvK1tRjrjqFC0uZBJncT4smZQ4F+uV5g==", + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==", "dev": true }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decomment": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.2.tgz", - "integrity": "sha512-sblyUmOJZxiL7oJ2ogJS6jtl/67+CTOW87SrYE/96u3PhDYikYoLCdLzcnceToiQejOLlqNnLCkaxx/+nE/ehg==", - "dev": true, - "requires": { - "esprima": "4.0.1" - } - }, "decompress": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", @@ -2180,26 +6272,28 @@ "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true } } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true } } }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } } }, "decompress-tar": { @@ -2211,6 +6305,69 @@ "file-type": "^5.2.0", "is-stream": "^1.1.0", "tar-stream": "^1.5.2" + }, + "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + } } }, "decompress-tarbz2": { @@ -2243,12 +6400,20 @@ "decompress-tar": "^4.1.1", "file-type": "^5.2.0", "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true + } } }, "decompress-unzip": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, "requires": { "file-type": "^3.8.0", @@ -2260,43 +6425,34 @@ "file-type": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true }, "get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, "requires": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true } } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } }, "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true }, "deferred": { @@ -2312,246 +6468,28 @@ "timers-ext": "^0.1.7" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, - "dependency-tree": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-7.2.1.tgz", - "integrity": "sha512-nBxnjkqDW4LqAzBazy60V4lE0mAtIQ+oers/GIIvVvGYVdCD9+RNNd4G9jjstyz7ZFVg/j/OiYCvK5MjoVqA2w==", + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "requires": { - "commander": "^2.19.0", - "debug": "^4.1.1", - "filing-cabinet": "^2.5.1", - "precinct": "^6.2.0", - "typescript": "^3.7.5" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "asap": "^2.0.0", + "wrappy": "1" } }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "detective-amd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.0.0.tgz", - "integrity": "sha512-kOpKHyabdSKF9kj7PqYHLeHPw+TJT8q2u48tZYMkIcas28el1CYeLEJ42Nm+563/Fq060T5WknfwDhdX9+kkBQ==", - "dev": true, - "requires": { - "ast-module-types": "^2.3.1", - "escodegen": "^1.8.0", - "get-amd-module-type": "^3.0.0", - "node-source-walk": "^4.0.0" - } - }, - "detective-cjs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz", - "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==", - "dev": true, - "requires": { - "ast-module-types": "^2.4.0", - "node-source-walk": "^4.0.0" - } - }, - "detective-es6": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.1.0.tgz", - "integrity": "sha512-QSHqKGOp/YBIfmIqKXaXeq2rlL+bp3bcIQMfZ+0PvKzRlELSOSZxKRvpxVcxlLuocQv4QnOfuWGniGrmPbz8MQ==", - "dev": true, - "requires": { - "node-source-walk": "^4.0.0" - } - }, - "detective-less": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", - "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", - "dev": true, - "requires": { - "debug": "^4.0.0", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "detective-postcss": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-3.0.1.tgz", - "integrity": "sha512-tfTS2GdpUal5NY0aCqI4dpEy8Xfr88AehYKB0iBIZvo8y2g3UsrcDnrp9PR2FbzoW7xD5Rip3NJW7eCSvtqdUw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "is-url": "^1.2.4", - "postcss": "^7.0.2", - "postcss-values-parser": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "detective-sass": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz", - "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "detective-scss": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz", - "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "gonzales-pe": "^4.2.3", - "node-source-walk": "^4.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "detective-stylus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz", - "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=", - "dev": true - }, - "detective-typescript": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-5.7.0.tgz", - "integrity": "sha512-4SQeACXWAjIOsd2kJykPL8gWC9nVA+z8w7KtAdtd/7BCpDfrpI2ZA7pdhsmHv/zxf3ofeqpYi72vCkZ65bAjtA==", - "dev": true, - "requires": { - "@typescript-eslint/typescript-estree": "^2.4.0", - "ast-module-types": "^2.5.0", - "node-source-walk": "^4.2.0", - "typescript": "^3.6.4" - } - }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "dev": true, - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" - } - }, - "dijkstrajs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.1.tgz", - "integrity": "sha1-082BIh4+pAdCz83lVtTpnpjdxxs=", - "dev": true - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -2561,211 +6499,18 @@ "path-type": "^4.0.0" } }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dot-qs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dot-qs/-/dot-qs-0.2.0.tgz", - "integrity": "sha1-02UX/iS3zaYfznpQJqACSvr1pDk=", - "dev": true - }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", "dev": true }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", - "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", - "dev": true - }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } - } - }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dotenv-expand": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-9.0.0.tgz", + "integrity": "sha512-uW8Hrhp5ammm9x7kBLR6jDfujgaDarNA02tprvZdyrJ7MpdzD1KyrIHG4l+YoC2fJ2UcdFdNWNWIjt+sexBHJw==", "dev": true }, - "duplexify": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz", - "integrity": "sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==", - "dev": true, - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, "duration": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", @@ -2776,40 +6521,12 @@ "es5-ext": "~0.10.46" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "dev": true, - "requires": { - "env-variable": "0.0.x" - } - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2819,119 +6536,21 @@ "once": "^1.4.0" } }, - "engine.io-client": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.1.tgz", - "integrity": "sha512-RJNmA+A9Js+8Aoq815xpGAsgWH1VoSYM//2VgIiu9lNOaHFfLpTjH4tOzktBpjIs5lvOfiNY1dwf+NuU6D38Mw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz", - "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "env-variable": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz", - "integrity": "sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - }, - "dependencies": { - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - } + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, "requires": { "d": "1", @@ -2939,41 +6558,18 @@ "es6-symbol": "^3.1.1" } }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "es6-promisify": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.0.tgz", - "integrity": "sha512-jCsk2fpfEFusVv1MDkF4Uf0hAzIKNDMgR6LyOIw6a3jwkN1sCgWzuwgnsHY9YSQ8n8P31HoncvE0LC44cpWTrw==", - "dev": true - }, "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" } }, "es6-symbol": { @@ -3001,32 +6597,13 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "esniff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", - "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=", + "integrity": "sha512-vmHXOeOt7FJLsqofvFk4WB3ejvcHizCd8toXXwADmYfd02p2QwHRgkUbhYDX54y08nqk818CUTWipgZGlyN07g==", "dev": true, "requires": { "d": "1", @@ -3040,27 +6617,18 @@ "dev": true }, "essentials": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.1.1.tgz", - "integrity": "sha512-SmaxoAdVu86XkZQM/u6TYSu96ZlFGwhvSk1l9zAkznFuQkMb9mRDS2iq/XWDow7R8OwBwdYH8nLyDKznMD+GWw==", - "dev": true - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/essentials/-/essentials-1.2.0.tgz", + "integrity": "sha512-kP/j7Iw7KeNE8b/o7+tr9uX2s1wegElGOoGZ2Xm35qBr4BbbEcH3/bxR2nfH9l9JANCq9AUrvKw+gRuHtZp0HQ==", + "dev": true, + "requires": { + "uni-global": "^1.0.0" + } }, "event-emitter": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, "requires": { "d": "1", @@ -3069,51 +6637,17 @@ }, "events": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "dev": true }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "requires": { - "type": "^2.0.0" + "type": "^2.7.2" } }, "ext-list": { @@ -3135,22 +6669,6 @@ "sort-keys-length": "^1.0.0" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -3162,54 +6680,41 @@ "tmp": "^0.0.33" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", - "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, "fastq": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", - "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -3218,18 +6723,12 @@ "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" } }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==", - "dev": true - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -3239,79 +6738,40 @@ "escape-string-regexp": "^1.0.5" } }, - "file-exists-dazinatorfork": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/file-exists-dazinatorfork/-/file-exists-dazinatorfork-1.0.2.tgz", - "integrity": "sha512-r70c72ln2YHzQINNfxDp02hAhbGkt1HffZ+Du8oetWDLjDtFja/Lm10lUaSh9e+wD+7VDvPee0b0C9SAy8pWZg==", - "dev": true - }, "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "dev": true, + "requires": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + } }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", "dev": true }, "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", + "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", "dev": true, "requires": { "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", + "strip-outer": "^1.0.1", "trim-repeated": "^1.0.0" } }, "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.0.6.tgz", + "integrity": "sha512-rzpOZ4C9vMFDqOa6dNpog92CoLYjD79dnjLk2TYDDtImRIyLTOzqojCb05Opd1WuiWjs+fshhCgTd8cl7y5t+g==", "dev": true }, - "filing-cabinet": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-2.5.1.tgz", - "integrity": "sha512-GWOdObzou2L0HrJUk8MpJa01q0ZOwuTwTssM2+P+ABJWEGlVWd6ueEatANFdin94/3rdkVSdqpH14VqCNqp3RA==", - "dev": true, - "requires": { - "app-module-path": "^2.2.0", - "commander": "^2.13.0", - "debug": "^4.1.1", - "decomment": "^0.9.2", - "enhanced-resolve": "^4.1.0", - "is-relative-path": "^1.0.2", - "module-definition": "^3.0.0", - "module-lookup-amd": "^6.1.0", - "resolve": "^1.11.1", - "resolve-dependency-path": "^2.0.0", - "sass-lookup": "^3.0.0", - "stylus-lookup": "^3.0.1", - "typescript": "^3.0.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3321,66 +6781,6 @@ "to-regex-range": "^5.0.1" } }, - "find": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find/-/find-0.3.0.tgz", - "integrity": "sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==", - "dev": true, - "requires": { - "traverse-chain": "~0.1.0" - } - }, - "find-process": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-1.4.3.tgz", - "integrity": "sha512-+IA+AUsQCf3uucawyTwMWcY+2M3FXq3BRvw3S+j5Jvydjk31f/+NPWpYZOJs+JUs2GvxH4Yfr6Wham0ZtRLlPA==", - "dev": true, - "requires": { - "chalk": "^2.0.1", - "commander": "^2.11.0", - "debug": "^2.6.8" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "find-requires": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-requires/-/find-requires-1.0.0.tgz", @@ -3402,75 +6802,47 @@ } }, "flat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.0.tgz", - "integrity": "sha512-6KSMM+cHHzXC/hpldXApL2S8Uz+QZv+tq5o/L0KQYleoG+GcwrnIJhTWC7tCOiKQp8D/fIvryINU1OZCCwevjA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.4" - } - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { - "debug": "=3.1.0" + "is-callable": "^1.1.3" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", + "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", "dev": true, "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" } }, "fs-constants": { @@ -3480,53 +6852,69 @@ "dev": true }, "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fs2": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.8.tgz", - "integrity": "sha512-HxOTRiFS3PqwAOmlp1mTwLA+xhQBdaP82b5aBamc/rHKFVyn4qL8YpngaAleD52PNMzBm6TsGOoU/Hq+bAfBhA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/fs2/-/fs2-0.3.9.tgz", + "integrity": "sha512-WsOqncODWRlkjwll+73bAxVW3JPChDgaPX3DT4iTTm73UmG4VgALa7LaFblP232/DN60itkOrPZ8kaP1feksGQ==", "dev": true, "requires": { "d": "^1.0.1", "deferred": "^0.7.11", "es5-ext": "^0.10.53", "event-emitter": "^0.3.5", - "ignore": "^5.1.4", + "ignore": "^5.1.8", "memoizee": "^0.4.14", - "type": "^2.0.0" + "type": "^2.1.0" } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, - "get-amd-module-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz", - "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==", - "dev": true, - "requires": { - "ast-module-types": "^2.3.2", - "node-source-walk": "^4.0.0" - } + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "get-caller-file": { "version": "2.0.5", @@ -3534,207 +6922,108 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dev": true, "requires": { - "npm-conf": "^1.1.0" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" } }, "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-all": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz", - "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.3.1.tgz", + "integrity": "sha512-Y+ESjdI7ZgMwfzanHZYQ87C59jOO0i+Hd+QYtVt9PhLi6d8wlOpzQnfBxWUlaTuAoR3TkybLqqbIoWveU4Ji7Q==", "dev": true, "requires": { - "glob": "^7.1.2", + "glob": "^7.2.3", "yargs": "^15.3.1" } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, - "global-agent": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.8.tgz", - "integrity": "sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A==", - "dev": true, - "requires": { - "boolean": "^3.0.0", - "core-js": "^3.6.4", - "es6-error": "^4.1.1", - "matcher": "^2.1.0", - "roarr": "^2.15.2", - "semver": "^7.1.2", - "serialize-error": "^5.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - } - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "globalthis": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", - "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, - "gonzales-pe": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", - "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } + "get-intrinsic": "^1.1.3" } }, "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "graphlib": { @@ -3746,132 +7035,41 @@ "lodash": "^4.17.15" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { + "has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "function-bind": "^1.1.1" } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { - "has-symbol-support-x": "^1.4.1" + "has-symbols": "^1.0.2" } }, - "has-value": { + "hexoid": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true }, "http-cache-semantics": { "version": "4.1.0", @@ -3879,48 +7077,24 @@ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { - "agent-base": "5", + "agent-base": "6", "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "iconv-lite": { @@ -3933,51 +7107,33 @@ } }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -3985,199 +7141,44 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" } }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4187,60 +7188,22 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, "is-docker": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", - "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { @@ -4249,35 +7212,34 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", "dev": true }, "is-number": { @@ -4286,31 +7248,10 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { @@ -4322,148 +7263,96 @@ "isobject": "^3.0.1" } }, + "is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "dev": true + }, "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "dev": true }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-relative-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", - "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "iso8601-duration": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.2.0.tgz", - "integrity": "sha512-ErTBd++b17E8nmWII1K1uZtBgD1E8RjyvwmxlCjPHNqHMD7gmcMHOw0E8Ro/6+QT4PhHRSnnMo7bxa1vFPkwhg==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } + "requires": {} }, "jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "json-cycle": { @@ -4473,251 +7362,168 @@ "dev": true }, "json-refs": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-2.1.7.tgz", - "integrity": "sha1-uesB/in16j6Sh48VrqEK04taz4k=", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/json-refs/-/json-refs-3.0.15.tgz", + "integrity": "sha512-0vOQd9eLNBL18EGl5yYaO44GhixmImes2wiYn9Z3sag3QnehWrYWlB9AFtMxCL2Bj3fyxgDYkxGFEU/chlYssw==", "dev": true, "requires": { - "commander": "^2.9.0", - "graphlib": "^2.1.1", - "js-yaml": "^3.8.3", + "commander": "~4.1.1", + "graphlib": "^2.1.8", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", "native-promise-only": "^0.8.1", - "path-loader": "^1.0.2", - "slash": "^1.0.0", - "uri-js": "^3.0.2" + "path-loader": "^1.0.10", + "slash": "^3.0.0", + "uri-js": "^4.2.2" }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "punycode": "^2.1.0" + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" } } } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonata": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/jsonata/-/jsonata-1.8.3.tgz", - "integrity": "sha512-r6ztI6ohbpRo77AxBm6vMs3aHZi2L2PaakW7TCPwSkeGcuAZ/SxXGLWH2Npwqq5+YBM/fg/g0EXg/pI9HvXQ8Q==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "jsonpath-plus": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", + "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", "dev": true }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", + "lie": "~3.3.0", "pako": "~1.0.2", - "readable-stream": "~2.0.6" + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "jwt-decode": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-2.2.0.tgz", - "integrity": "sha1-fYa9VmefWM5qhHBKZX3TkruoGnk=", + "integrity": "sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==", "dev": true }, "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "dev": true, "requires": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kuler": { + "lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "requires": { - "colornames": "^1.1.1" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" + "readable-stream": "^2.0.5" }, "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" + "safe-buffer": "~5.1.0" } } } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { "immediate": "~3.0.5" @@ -4733,9 +7539,27 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, "lodash.get": { @@ -4744,10 +7568,16 @@ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true }, "lodash.uniqby": { @@ -4763,194 +7593,144 @@ "dev": true }, "log": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log/-/log-6.0.0.tgz", - "integrity": "sha512-sxChESNYJ/EcQv8C7xpmxhtTOngoXuMEqGDAkhXBEmt3MAzM3SM/TmIBOqnMEVdrOv1+VgZoYbo6U2GemQiU4g==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/log/-/log-6.3.1.tgz", + "integrity": "sha512-McG47rJEWOkXTDioZzQNydAVvZNeEkSyLJ1VWkFwfW+o1knW+QSi8D1KjPn/TnctV+q99lkvJNe1f0E1IjfY2A==", "dev": true, "requires": { - "d": "^1.0.0", + "d": "^1.0.1", "duration": "^0.2.2", - "es5-ext": "^0.10.49", + "es5-ext": "^0.10.53", "event-emitter": "^0.3.5", - "sprintf-kit": "^2.0.0", - "type": "^1.0.1" - }, - "dependencies": { - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - } + "sprintf-kit": "^2.0.1", + "type": "^2.5.0", + "uni-global": "^1.0.0" } }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "log-node": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/log-node/-/log-node-8.0.3.tgz", + "integrity": "sha512-1UBwzgYiCIDFs8A0rM2QdBFo8Wd8UQ0HrSTu/MNI+/2zN3NoHRj2fhplurAyuxTYUXu3Oohugq1jAn5s05u1MQ==", "dev": true, "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ansi-regex": "^5.0.1", + "cli-color": "^2.0.1", + "cli-sprintf-format": "^1.1.1", + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "sprintf-kit": "^2.0.1", + "supports-color": "^8.1.1", + "type": "^2.5.0" + } + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true }, "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, "requires": { "es5-ext": "~0.10.2" } }, - "lsmod": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lsmod/-/lsmod-1.0.0.tgz", - "integrity": "sha1-mgD3bco26yP6BTUK/htYXUKZ5ks=", - "dev": true - }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matcher": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz", - "integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" + "semver": "^6.0.0" }, "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "md5-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", - "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==", - "dev": true - }, "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" } }, "merge2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", - "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -4966,92 +7746,54 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "minipass": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", + "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "module-definition": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.0.tgz", - "integrity": "sha512-HTplA9xwDzH67XJFC1YvZMUElWJD28DV0dUq7lhTs+JKJamUOWA/CcYWSlhW5amJO66uWtY7XdltT+LfX0wIVg==", - "dev": true, - "requires": { - "ast-module-types": "^2.6.0", - "node-source-walk": "^4.0.0" - } - }, - "module-lookup-amd": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-6.2.0.tgz", - "integrity": "sha512-uxHCj5Pw9psZiC1znjU2qPsubt6haCSsN9m7xmIdoTciEgfxUkE1vhtDvjHPuOXEZrVJhjKgkmkP+w73rRuelQ==", - "dev": true, - "requires": { - "commander": "^2.8.1", - "debug": "^4.1.0", - "file-exists-dazinatorfork": "^1.0.2", - "find": "^0.3.0", - "requirejs": "^2.3.5", - "requirejs-config-file": "^3.1.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "mute-stream": { @@ -5060,50 +7802,26 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "nanoid": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", - "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, "native-promise-only": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", - "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", + "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==", "dev": true }, "ncjsm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.0.1.tgz", - "integrity": "sha512-gxh5Sgait8HyclaulfhgetHQGyhFm00ZQqISIfqtwFVnyWJ20rk+55SUamo9n3KhM6Vk63gemKPxIDYiSV/xZw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ncjsm/-/ncjsm-4.3.2.tgz", + "integrity": "sha512-6d1VWA7FY31CpI4Ki97Fpm36jfURkVbpktizp8aoVViTZRQgr/0ddmlKerALSSlzfwQRBeSq1qwwVcBJK4Sk7Q==", "dev": true, "requires": { - "builtin-modules": "^3.1.0", + "builtin-modules": "^3.3.0", "deferred": "^0.7.11", - "es5-ext": "^0.10.51", - "es6-set": "^0.1.5", + "es5-ext": "^0.10.62", + "es6-set": "^0.1.6", + "ext": "^1.7.0", "find-requires": "^1.0.0", - "fs2": "^0.3.6", - "type": "^2.0.0" + "fs2": "^0.3.9", + "type": "^2.7.2" } }, "next-tick": { @@ -5121,29 +7839,19 @@ "node-dir": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", "dev": true, "requires": { "minimatch": "^3.0.2" } }, "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dev": true, "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-source-walk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz", - "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==", - "dev": true, - "requires": { - "@babel/parser": "^7.0.0" + "whatwg-url": "^5.0.0" } }, "normalize-path": { @@ -5153,262 +7861,115 @@ "dev": true }, "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "npm-registry-utilities": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-registry-utilities/-/npm-registry-utilities-1.0.0.tgz", + "integrity": "sha512-9xYfSJy2IFQw1i6462EJzjChL9e65EfSo2Cw6kl0EFeDp05VvU+anrQk3Fc0d1MbVCq7rWIxeer89O9SUQ/uOg==", "dev": true, "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "ext": "^1.6.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.15", + "node-fetch": "^2.6.7", + "semver": "^7.3.5", + "type": "^2.6.0", + "validate-npm-package-name": "^3.0.0" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" } }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=", - "dev": true - }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "open": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/open/-/open-7.0.3.tgz", - "integrity": "sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-docker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", - "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", - "dev": true - }, - "is-wsl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", - "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", - "dev": true - } + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" } }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true }, "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, "requires": { - "p-timeout": "^2.0.1" + "p-timeout": "^3.1.0" } }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, "p-limit": { @@ -5430,9 +7991,9 @@ } }, "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "requires": { "p-finally": "^1.0.0" @@ -5444,54 +8005,10 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", - "dev": true - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "path-exists": { @@ -5502,244 +8019,101 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "path-loader": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.10.tgz", - "integrity": "sha512-CMP0v6S6z8PHeJ6NFVyVJm6WyJjIwFvyz2b0n2/4bKdS/0uZa/9sKUlYZzubrn3zuDRU0zIuEDX9DZYQ2ZI8TA==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/path-loader/-/path-loader-1.0.12.tgz", + "integrity": "sha512-n7oDG8B+k/p818uweWrOixY9/Dsr89o2TkCm6tOTex3fpdo2+BFDgR+KpB37mGKBRsBAlR8CIJMFN0OEy/7hIQ==", "dev": true, "requires": { "native-promise-only": "^0.8.1", - "superagent": "^3.8.3" + "superagent": "^7.1.6" } }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "path2": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path2/-/path2-0.1.0.tgz", + "integrity": "sha512-TX+cz8Jk+ta7IvRy2FAej8rdlbrP0+uBIkP/5DTODez/AuL/vSb30KuAdDxGVREXzn8QfAiu5mJYJ1XjbOhEPA==", + "dev": true + }, + "peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "dev": true + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { "pinkie": "^2.0.0" } }, - "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-values-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz", - "integrity": "sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "precinct": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/precinct/-/precinct-6.2.0.tgz", - "integrity": "sha512-BCAmnOxZzobF3H1/h/gq70pEyvX/BVLWCrzi8beFD22dqu5Z14qOghNUsI24Wg8oaTsGFcIjOGtFX5L9ttmjVg==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "debug": "^4.1.1", - "detective-amd": "^3.0.0", - "detective-cjs": "^3.1.1", - "detective-es6": "^2.0.0", - "detective-less": "^1.0.2", - "detective-postcss": "^3.0.0", - "detective-sass": "^3.0.0", - "detective-scss": "^2.0.0", - "detective-stylus": "^1.0.0", - "detective-typescript": "^5.1.1", - "module-definition": "^3.3.0", - "node-source-walk": "^4.2.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "prettyoutput": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prettyoutput/-/prettyoutput-1.2.0.tgz", - "integrity": "sha512-G2gJwLzLcYS+2m6bTAe+CcDpwak9YpcvpScI0tE4WYb2O3lEZD/YywkMNpGqsSx5wttGvh2UXaKROTKKCyM2dw==", - "dev": true, - "requires": { - "colors": "1.3.x", - "commander": "2.19.x", - "lodash": "4.17.x" - } - }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "process-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-utils/-/process-utils-4.0.0.tgz", + "integrity": "sha512-fMyMQbKCxX51YxR7YGCzPjLsU3yDzXFkP4oi1/Mt5Ixnk7GO/7uUTj8mrCHUwuvozWzI+V7QSJR9cZYnwNOZPg==", + "dev": true, + "requires": { + "ext": "^1.4.0", + "fs2": "^0.3.9", + "memoizee": "^0.4.14", + "type": "^2.1.0" + } + }, "promise-queue": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/promise-queue/-/promise-queue-2.2.5.tgz", "integrity": "sha1-L29ffA9tCBCelnZZx5uIqe1ek7Q=", "dev": true }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -5751,216 +8125,106 @@ } }, "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "side-channel": "^1.0.4" } }, "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz", + "integrity": "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==", "dev": true }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "raven": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/raven/-/raven-1.2.1.tgz", - "integrity": "sha1-lJwTTbAooZC3u/j3kKrlQbfAIL0=", - "dev": true, - "requires": { - "cookie": "0.3.1", - "json-stringify-safe": "5.0.1", - "lsmod": "1.0.0", - "stack-trace": "0.0.9", - "uuid": "3.0.0" - }, - "dependencies": { - "stack-trace": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.9.tgz", - "integrity": "sha1-qPbq7KkGdMMz58Q5U/J1tFFRBpU=", - "dev": true - }, - "uuid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.0.tgz", - "integrity": "sha1-Zyj8BFnEUNeWqZwxg3VpvfZy1yg=", - "dev": true - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true }, "readable-stream": { - "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dev": true, + "requires": { + "readable-stream": "^3.6.0" + } + }, + "readdir-glob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.2.tgz", + "integrity": "sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==", + "dev": true, + "requires": { + "minimatch": "^5.1.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "registry-auth-token": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.1.1.tgz", - "integrity": "sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "replaceall": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/replaceall/-/replaceall-0.1.6.tgz", - "integrity": "sha1-gdgax663LX9cSUKt8ml6MiBojY4=", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "request-promise-core": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", - "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "request-promise-native": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", - "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", - "dev": true, - "requires": { - "request-promise-core": "1.1.3", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "require-main-filename": { @@ -5969,51 +8233,19 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", - "dev": true - }, - "requirejs-config-file": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-3.1.2.tgz", - "integrity": "sha512-sdLWywcDuNz7EIOhenSbRfT4YF84nItDv90coN2htbokjmU2QeyQuSBZILQUKNksepl8UPVU+hgYySFaDxbJPQ==", - "dev": true, - "requires": { - "esprima": "^4.0.0", - "make-dir": "^2.1.0", - "stringify-object": "^3.2.1" - } - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-dependency-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz", - "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" } }, "restore-cursor": { @@ -6026,12 +8258,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6039,34 +8265,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "glob": "^7.0.5" - } - }, - "roarr": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.3.tgz", - "integrity": "sha512-AEjYvmAhlyxOeB9OqPUzQCo3kuAkNfuDk/HqWbZdFsqDFpapkTjiw+p4svNEoRLvuqNTxqfL+s+gtD4eDgZ+CA==", - "dev": true, - "requires": { - "boolean": "^3.0.0", - "detect-node": "^2.0.4", - "globalthis": "^1.0.1", - "json-stringify-safe": "^5.0.1", - "semver-compare": "^1.0.0", - "sprintf-js": "^1.1.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - } + "glob": "^7.1.3" } }, "run-async": { @@ -6076,384 +8280,135 @@ "dev": true }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", - "dev": true - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "tslib": "^1.9.0" + "queue-microtask": "^1.2.2" + } + }, + "run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dev": true, + "requires": { + "tslib": "^2.1.0" } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-lookup": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz", - "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==", - "dev": true, - "requires": { - "commander": "^2.16.0" - } - }, "sax": { "version": "1.2.1", - "resolved": "http://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", "dev": true }, "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, "requires": { - "commander": "~2.8.1" + "commander": "^2.8.1" }, "dependencies": { "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "dev": true, - "requires": { - "graceful-readlink": ">= 1.0.0" - } + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true } } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, "requires": { - "semver": "^5.0.3" - } - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, - "serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", - "dev": true, - "requires": { - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "lru-cache": "^6.0.0" } }, "serverless": { - "version": "1.68.0", - "resolved": "https://registry.npmjs.org/serverless/-/serverless-1.68.0.tgz", - "integrity": "sha512-CLA8K4B/oZm1LwgUDAfCHiVYGszveDSlAUr2mIdzdcVc3CLjzlRZn7IVipy3myXOc7/+kocxOqs3VXogm9A4Wg==", + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/serverless/-/serverless-3.26.0.tgz", + "integrity": "sha512-drVr4akkQwm2Pj7ZN9boh5PoI2nKvlXmy+Cb8Hh1Zv8ybsf47ZUQE6t7dakGA4irYf4SQCbVc72nKqISfarMCQ==", "dev": true, "requires": { - "@serverless/cli": "^1.4.0", - "@serverless/components": "^2.29.2", - "@serverless/enterprise-plugin": "^3.6.6", - "archiver": "^1.3.0", - "async": "^1.5.2", - "aws-sdk": "^2.660.0", + "@serverless/dashboard-plugin": "^6.2.2", + "@serverless/platform-client": "^4.3.2", + "@serverless/utils": "^6.8.2", + "ajv": "^8.11.2", + "ajv-formats": "^2.1.1", + "archiver": "^5.3.1", + "aws-sdk": "^2.1280.0", "bluebird": "^3.7.2", - "boxen": "^3.2.0", "cachedir": "^2.3.0", - "chalk": "^2.4.2", + "chalk": "^4.1.2", "child-process-ext": "^2.1.1", - "ci-info": "^1.6.0", + "ci-info": "^3.7.0", + "cli-progress-footer": "^2.3.2", "d": "^1.0.1", - "dayjs": "^1.8.25", + "dayjs": "^1.11.7", "decompress": "^4.2.1", - "download": "^7.1.0", - "essentials": "^1.1.1", - "fast-levenshtein": "^2.0.6", - "filesize": "^3.6.1", - "fs-extra": "^0.30.0", - "get-stdin": "^5.0.1", - "globby": "^6.1.0", - "graceful-fs": "^4.2.3", - "https-proxy-agent": "^4.0.0", - "inquirer": "^6.5.2", - "is-docker": "^1.1.0", - "is-wsl": "^2.1.1", - "js-yaml": "^3.13.1", + "dotenv": "^16.0.3", + "dotenv-expand": "^9.0.0", + "essentials": "^1.2.0", + "ext": "^1.7.0", + "fastest-levenshtein": "^1.0.16", + "filesize": "^10.0.6", + "fs-extra": "^10.1.0", + "get-stdin": "^8.0.0", + "globby": "^11.1.0", + "got": "^11.8.6", + "graceful-fs": "^4.2.10", + "https-proxy-agent": "^5.0.1", + "is-docker": "^2.2.1", + "js-yaml": "^4.1.0", "json-cycle": "^1.3.0", - "json-refs": "^2.1.7", - "jszip": "^3.4.0", - "jwt-decode": "^2.2.0", - "lodash": "^4.17.15", - "memoizee": "^0.4.14", - "mkdirp": "^0.5.4", - "nanomatch": "^1.2.13", - "ncjsm": "^4.0.1", - "node-fetch": "^1.7.3", - "object-hash": "^2.0.3", - "p-limit": "^2.3.0", + "json-refs": "^3.0.15", + "lodash": "^4.17.21", + "memoizee": "^0.4.15", + "micromatch": "^4.0.5", + "node-fetch": "^2.6.7", + "npm-registry-utilities": "^1.0.0", + "object-hash": "^3.0.0", + "open": "^8.4.0", + "path2": "^0.1.0", + "process-utils": "^4.0.0", "promise-queue": "^2.2.5", - "raven": "^1.2.1", - "rc": "^1.2.8", - "replaceall": "^0.1.6", - "semver": "^5.7.1", - "semver-regex": "^1.0.0", - "stream-promise": "^3.2.0", - "tabtab": "^3.0.2", - "untildify": "^3.0.3", - "update-notifier": "^2.5.0", - "uuid": "^2.0.3", - "write-file-atomic": "^2.4.3", - "yaml-ast-parser": "0.0.43", - "yargs-parser": "^16.1.0" - }, - "dependencies": { - "@serverless/cli": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@serverless/cli/-/cli-1.4.0.tgz", - "integrity": "sha512-YqlCiYmRFeGksw6XJaXbigIDlktc7OfRuVpyPB7IZgkCJ9mUlBmvyWdwqJEQdkUz0xPTGsd4Jd/XSrwyiw1Brg==", - "dev": true, - "requires": { - "@serverless/core": "^1.0.0", - "@serverless/template": "^1.1.0", - "ansi-escapes": "^4.2.0", - "chalk": "^2.4.2", - "chokidar": "^3.0.2", - "dotenv": "^8.0.0", - "figures": "^3.0.0", - "minimist": "^1.2.0", - "prettyoutput": "^1.2.0", - "strip-ansi": "^5.2.0" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "aws-sdk": { - "version": "2.663.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.663.0.tgz", - "integrity": "sha512-xPOszNOaSXTRs8VGXaMbhTKXdlq2TlDRfFRVEGxkZrtow87hEIVZGAUSUme2e3GHqHUDnySwcufrUpUPUizOKQ==", - "dev": true, - "requires": { - "buffer": "4.9.1", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "is-wsl": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz", - "integrity": "sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==", - "dev": true - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jszip": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", - "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "require-from-string": "^2.0.2", + "semver": "^7.3.8", + "signal-exit": "^3.0.7", + "strip-ansi": "^6.0.1", + "supports-color": "^8.1.1", + "tar": "^6.1.13", + "timers-ext": "^0.1.7", + "type": "^2.7.2", + "untildify": "^4.0.0", + "uuid": "^9.0.0", + "yaml-ast-parser": "0.0.43" } }, "serverless-pseudo-parameters": { @@ -6463,84 +8418,88 @@ "dev": true }, "serverless-python-requirements": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-4.2.5.tgz", - "integrity": "sha512-dmdgrSLWgJv2g/LIfFdBIkJFn2duNFRZc7De94AHf2ylZS7s+gKJ8Ga090YdaigWLhH65tMA50Ub06SUk0p6EQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/serverless-python-requirements/-/serverless-python-requirements-5.4.0.tgz", + "integrity": "sha512-0ji96KayLG3G3vxtHS6GRcU2879tFPk6gAaRejRkPCf4RxmbebWjIbf56xljRi7DmBzhmxLJd93FVGPq9aundQ==", "dev": true, "requires": { + "@iarna/toml": "^2.2.5", "appdirectory": "^0.1.0", - "bluebird": "^3.0.6", - "fs-extra": "^7.0.0", - "glob-all": "^3.1.0", - "is-wsl": "^1.1.0", - "jszip": "^3.1.0", + "bluebird": "^3.7.2", + "child-process-ext": "^2.1.1", + "fs-extra": "^9.1.0", + "glob-all": "^3.3.0", + "is-wsl": "^2.2.0", + "jszip": "^3.7.1", "lodash.get": "^4.4.2", - "lodash.set": "^4.3.2", - "lodash.uniqby": "^4.0.0", + "lodash.uniqby": "^4.7.0", "lodash.values": "^4.3.0", - "md5-file": "^4.0.0", - "rimraf": "^2.6.2", - "shell-quote": "^1.6.1" + "rimraf": "^3.0.2", + "set-value": "^4.1.0", + "sha256-file": "1.0.0", + "shell-quote": "^1.7.3" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "serverless-step-functions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/serverless-step-functions/-/serverless-step-functions-1.8.0.tgz", - "integrity": "sha512-SDCGhnD5cj5gJGBqJJp6kTID1/LVytuaqHFeOh1fIN5HE0esY2RgfpPqga1UzZv6TgCdHYW6Ou1TsNVv2KklHQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/serverless-step-functions/-/serverless-step-functions-3.12.1.tgz", + "integrity": "sha512-8PObLriopBZqcEJgFXGKOb3NTXft9zWdYPoQp7tjacPg7sC0EqAgEm4vQ3ZWWg4eidmu1wKv+2QZrzKpUHC0UQ==", "dev": true, "requires": { - "aws-sdk": "^2.282.1", + "@hapi/joi": "^15.0.2", + "@serverless/utils": "^6.7.0", + "asl-validator": "^3.1.0", "bluebird": "^3.4.0", - "chalk": "^1.1.1", - "lodash": "^4.17.10", - "serverless": "^1.29.2" + "chalk": "^4.1.2", + "lodash": "^4.17.11" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "sha256-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sha256-file/-/sha256-file-1.0.0.tgz", + "integrity": "sha512-nqf+g0veqgQAkDx0U2y2Tn2KWyADuuludZTw9A7J3D+61rKlIIl9V5TS4mfnwKuXZOH9B7fQyjYJ9pKRHIsAyg==", + "dev": true + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -6549,69 +8508,41 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "dev": true }, - "shortid": { - "version": "2.2.15", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.15.tgz", - "integrity": "sha512-5EaCy2mx2Jgc/Fdn9uuDuNIIfWBpzY4XIlhoqtXF6qsf+/+SGZ+FxDdX/ZsMZiWupIWNqAEmiNY4RC+LSmCeOw==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "nanoid": "^2.1.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "simple-git": { - "version": "1.132.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.132.0.tgz", - "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.16.0.tgz", + "integrity": "sha512-zuWYsOLEhbJRWVxpjdiXl6eyAyGo/KzVW+KFhhw9MqEEJttcq+32jTWSGyxTdf9e/YCohxRE+9xpWFj9FdiJNw==", "dev": true, "requires": { - "debug": "^4.0.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" } }, "slash": { @@ -6620,215 +8551,10 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "socket.io-stream": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/socket.io-stream/-/socket.io-stream-0.9.1.tgz", - "integrity": "sha1-QhJYMWKIuDrGk7DUPv0J1tQ6upc=", - "dev": true, - "requires": { - "component-bind": "~1.0.0", - "debug": "~2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, "requires": { "is-plain-obj": "^1.0.0" @@ -6837,215 +8563,36 @@ "sort-keys-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "requires": { "sort-keys": "^1.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "split2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.1.1.tgz", - "integrity": "sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { "readable-stream": "^3.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "sprintf-kit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.0.tgz", - "integrity": "sha512-/0d2YTn8ZFVpIPAU230S9ZLF8WDkSSRWvh/UOLM7zzvkCchum1TtouRgyV8OfgOaYilSGU4lSSqzwBXJVlAwUw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sprintf-kit/-/sprintf-kit-2.0.1.tgz", + "integrity": "sha512-2PNlcs3j5JflQKcg4wpdqpZ+AjhQJ2OZEo34NXDtlB0tIPG84xaaXhpA8XFacFiwjKA4m49UOYG83y3hbMn/gQ==", "dev": true, "requires": { - "es5-ext": "^0.10.46" + "es5-ext": "^0.10.53" } }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, "stream-promise": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/stream-promise/-/stream-promise-3.2.0.tgz", @@ -7057,70 +8604,33 @@ "is-stream": "^1.1.0" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" } }, "strip-dirs": { @@ -7132,18 +8642,6 @@ "is-natural-number": "^4.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, "strip-outer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", @@ -7153,216 +8651,81 @@ "escape-string-regexp": "^1.0.2" } }, - "stylus-lookup": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz", - "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==", + "strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", "dev": true, "requires": { - "commander": "^2.8.1", - "debug": "^4.1.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" } }, "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", "dev": true, "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" } }, "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tabtab": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", - "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "debug": "^4.0.1", - "es6-promisify": "^6.0.0", - "inquirer": "^6.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "untildify": "^3.0.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "has-flag": "^4.0.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true + "tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } }, "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" } }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "timers-ext": { @@ -7384,62 +8747,12 @@ "os-tmpdir": "~1.0.2" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7449,112 +8762,67 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" }, "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true } } }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, - "traverse-chain": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", - "integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=", + "traverse": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", + "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", "dev": true }, "trim-repeated": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.2" } }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==", - "dev": true - }, "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", - "dev": true - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", "dev": true }, "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, "unbzip2-stream": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz", - "integrity": "sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "requires": { "buffer": "^5.2.1", @@ -7562,302 +8830,129 @@ }, "dependencies": { "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } } } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "unique-string": { + "uni-global": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "resolved": "https://registry.npmjs.org/uni-global/-/uni-global-1.0.0.tgz", + "integrity": "sha512-WWM3HP+siTxzIWPNUg7hZ4XO8clKi6NoCAJJWnuRL+BAqyFXF8gC03WNyTefGoUXYc47uYgXxpKLIEvo65PEHw==", "dev": true, "requires": { - "crypto-random-string": "^1.0.0" + "type": "^2.5.0" } }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, "url": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "dev": true + } } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, "requires": { - "prepend-http": "^2.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "urlencode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/urlencode/-/urlencode-1.1.0.tgz", - "integrity": "sha1-HyuibwE8hfATP3o61v8nMK33y7c=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.11" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "builtins": "^1.0.3" } }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI=", + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } }, "which": { "version": "1.3.1", @@ -7871,234 +8966,56 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, "requires": { - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" } }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "dev": true, - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - } - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "dev": true, - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "signal-exit": "^3.0.7" } }, "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", - "dev": true - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} }, "xml2js": { "version": "0.4.19", @@ -8112,14 +9029,8 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "dev": true }, "xtend": { @@ -8129,15 +9040,15 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml-ast-parser": { @@ -8154,12 +9065,23 @@ "requires": { "argparse": "^1.0.7", "glob": "^7.0.5" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } } }, "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -8172,71 +9094,38 @@ "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "yargs-parser": "^18.1.2" } }, "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } }, "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dev": true, "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" } } } diff --git a/package.json b/package.json index 05145f7..0e7489d 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,9 @@ "version": "0.1.0", "dependencies": {}, "devDependencies": { - "serverless": "^1.42.3", + "serverless": "^3.21.0", + "serverless-python-requirements": "^5.4.0", "serverless-pseudo-parameters": "^2.2.0", - "serverless-python-requirements": "^4.2.5", - "serverless-step-functions": "^1.8.0" + "serverless-step-functions": "^3.12.1" } } From 2b312547a0e450bf2aac6bf025da529fb5387152 Mon Sep 17 00:00:00 2001 From: Steve Nolen Date: Mon, 27 Feb 2023 09:28:19 -0500 Subject: [PATCH 048/105] add sns topic publishing of successful jobs --- handler.py | 64 ++++++++++++++++++++++++++++++++++------ serverless-resources.yml | 6 ++++ serverless-stepf.yml | 7 +++-- serverless.yml | 12 +++++++- 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/handler.py b/handler.py index ada133c..7011d9f 100644 --- a/handler.py +++ b/handler.py @@ -8,6 +8,27 @@ import botocore CRAN_SRC_R3_URL = 'https://cran.rstudio.com/src/base/R-3/' CRAN_SRC_R4_URL = 'https://cran.rstudio.com/src/base/R-4/' batch_client = boto3.client('batch', region_name='us-east-1') +sns_client = boto3.client('sns', region_name='us-east-1') + + +class JobDetails: + def __init__(self, version, platform): + self.version = version + self.platform = platform + + @classmethod + def from_job_name(cls, job_name): + _R, version, platform = job_name.split('-', 2) + return cls(version.replace('_', '.'), platform) + + def job_name(self): + return f"R-{self.version.replace('.', '_')}-{self.platform}" + + def job_definition_arn(self): + return os.environ[f"JOB_DEFINITION_ARN_{self.platform.replace('-','_')}"] + + def to_json(self): + return {'version': self.version, 'platform': self.platform} def _to_list(input): @@ -78,21 +99,20 @@ def _container_overrides(version): def _submit_job(version, platform): """Submit an R build job to AWS Batch.""" - job_name = '-'.join(['R', version, platform]) - job_name = job_name.replace('.', '_') - job_definition_arn = 'JOB_DEFINITION_ARN_{}'.format(platform.replace('-','_')) + job_details = JobDetails(version, platform) + args = { - 'jobName': job_name, + 'jobName': job_details.job_name(), 'jobQueue': os.environ['JOB_QUEUE_ARN'], - 'jobDefinition': os.environ[job_definition_arn], - 'containerOverrides': _container_overrides(version) + 'jobDefinition': job_details.job_definition_arn(), + 'containerOverrides': _container_overrides(job_details.version) } if os.environ.get('DRYRUN'): - print('DRYRUN: would have queued {}'.format(job_name)) - return 'dryrun-no-job-{}'.format(job_name) + print('DRYRUN: would have queued {}'.format(job_details.job_name)) + return 'dryrun-no-job-{}'.format(job_details.job_name) else: response = batch_client.submit_job(**args) - print("Started job for R:{},Platform:{},id:{}".format(version, platform, response['jobId'])) + print("Started job with details:{},id:{}".format(job_details, response['jobId'])) return response['jobId'] @@ -145,3 +165,29 @@ def poll_running_jobs(event, context): event['finishedJobCount'] = len(event['failedJobIds']) + len(event['succeededJobIds']) event['unfinishedJobCount'] = len(event['jobIds']) - event['finishedJobCount'] return event + + +def finished(event, _context): + """Publish details about successfully finished jobs.""" + + # first, if there were no succeeded jobs, return instead of publishing details about builds + if len(event['succeededJobIds']) < 1: + return event + + # fetch all jobs, removing those which are not in our succeeded id list + r = batch_client.list_jobs(jobQueue=os.environ['JOB_QUEUE_ARN'], jobStatus='SUCCEEDED') + print(f'r: {r}') + succeeded_jobs = [i for i in r['jobSummaryList'] if i['jobId'] in event['succeededJobIds']] + + message = {'versions': []} + + for job in succeeded_jobs: + details = JobDetails.from_job_name(job['jobName']) + message['versions'].append(vars(details)) + + response = sns_client.publish( + TargetArn=os.environ['SNS_TOPIC_ARN'], + Message=json.dumps(message), + ) + print(f'Published to topic, response:{response}') + return event diff --git a/serverless-resources.yml b/serverless-resources.yml index a2aa5c7..efb43b2 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -323,3 +323,9 @@ rBuildsDevelEventRule: Fn::GetAtt: [ rBuildsEventRuleIamRole, Arn ] Arn: Ref: RBuildsStepFunction + +rBuildsTopic: + Type: AWS::SNS::Topic + Properties: + DisplayName: R Builds + TopicName: ${self:custom.${self:provider.stage}.snsTopicName} diff --git a/serverless-stepf.yml b/serverless-stepf.yml index e804b23..d917735 100644 --- a/serverless-stepf.yml +++ b/serverless-stepf.yml @@ -1,5 +1,4 @@ rBuilds: - Comment: "R Builds" id: RBuildsStepFunction name: r-builds-${self:provider.stage} definition: @@ -25,7 +24,11 @@ rBuilds: Next: Wait - Variable: "$.unfinishedJobCount" NumericEquals: 0 - Next: SuccessOrFail + Next: Finished + Finished: + Type: Task + Resource: arn:aws:lambda:#{AWS::Region}:#{AWS::AccountId}:function:${self:service}-${self:provider.stage}-finished + Next: SuccessOrFail SuccessOrFail: Type: Choice Choices: diff --git a/serverless.yml b/serverless.yml index 1ca0da9..aca3f30 100644 --- a/serverless.yml +++ b/serverless.yml @@ -31,8 +31,15 @@ provider: Resource: - arn:aws:s3:::${self:custom.${self:provider.stage}.s3Bucket} - arn:aws:s3:::${self:custom.${self:provider.stage}.s3Bucket}/* + - Effect: Allow + Action: + - "sns:Publish" + Resource: + Ref: rBuildsTopic environment: S3_BUCKET: ${self:custom.${self:provider.stage}.s3Bucket} + SNS_TOPIC_ARN: + Ref: rBuildsTopic JOB_QUEUE_ARN: Ref: rBuildsBatchJobQueue JOB_DEFINITION_ARN_ubuntu_1804: @@ -55,7 +62,8 @@ provider: Ref: rBuildsBatchJobDefinitionOpensuse153 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 + SUPPORTED_PLATFORMS: ubuntu-2004 + #SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 functions: queueBuilds: @@ -63,6 +71,8 @@ functions: handler: handler.queue_builds jobQueueStatus: handler: handler.poll_running_jobs + finished: + handler: handler.finished stepFunctions: From 5e38b6822a71f0480d19234d458ca2d23bb6cc21 Mon Sep 17 00:00:00 2001 From: Steve Nolen Date: Mon, 27 Feb 2023 09:30:36 -0500 Subject: [PATCH 049/105] remove testing env --- serverless.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/serverless.yml b/serverless.yml index aca3f30..f7d93d8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -62,8 +62,7 @@ provider: Ref: rBuildsBatchJobDefinitionOpensuse153 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - SUPPORTED_PLATFORMS: ubuntu-2004 - #SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 + SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 functions: queueBuilds: From a454fda81c49c5207cfbf7a2151a0ee8b11fe09f Mon Sep 17 00:00:00 2001 From: Steve Nolen Date: Mon, 27 Feb 2023 13:49:33 -0500 Subject: [PATCH 050/105] bugfix dry run print --- handler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/handler.py b/handler.py index 7011d9f..eaf91c3 100644 --- a/handler.py +++ b/handler.py @@ -108,8 +108,8 @@ def _submit_job(version, platform): 'containerOverrides': _container_overrides(job_details.version) } if os.environ.get('DRYRUN'): - print('DRYRUN: would have queued {}'.format(job_details.job_name)) - return 'dryrun-no-job-{}'.format(job_details.job_name) + print('DRYRUN: would have queued {}'.format(job_details.job_name())) + return 'dryrun-no-job-{}'.format(job_details.job_name()) else: response = batch_client.submit_job(**args) print("Started job with details:{},id:{}".format(job_details, response['jobId'])) From e9d9673506a13855307816c7b6ab8aadb893eb85 Mon Sep 17 00:00:00 2001 From: Steve Nolen Date: Tue, 28 Feb 2023 07:46:08 -0500 Subject: [PATCH 051/105] exclude next/devel builds from triggering sns publish --- handler.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/handler.py b/handler.py index eaf91c3..91baf50 100644 --- a/handler.py +++ b/handler.py @@ -183,11 +183,16 @@ def finished(event, _context): for job in succeeded_jobs: details = JobDetails.from_job_name(job['jobName']) + # exclude next/devel version from list (for now). + if details.version in ['next', 'devel']: + continue message['versions'].append(vars(details)) - response = sns_client.publish( - TargetArn=os.environ['SNS_TOPIC_ARN'], - Message=json.dumps(message), - ) - print(f'Published to topic, response:{response}') + # don't publish if we've excluded all successful builds + if message['versions']: + response = sns_client.publish( + TargetArn=os.environ['SNS_TOPIC_ARN'], + Message=json.dumps(message), + ) + print(f'Published to topic, response:{response}') return event From 09e29e69fa8c27edb3143e4b5ece08c81ee22fa9 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 18 Apr 2023 14:15:09 -0500 Subject: [PATCH 052/105] Remove R-devel patches for openSUSE 15.3/15.4 Now fixed upstream in R-devel / R 4.3.0. --- builder/Dockerfile.opensuse-153 | 1 - builder/Dockerfile.opensuse-154 | 1 - builder/build.sh | 1 + builder/patches/R-devel.patch | 28 ---------------------------- builder/patches/README.md | 9 +++++++++ 5 files changed, 10 insertions(+), 30 deletions(-) delete mode 100644 builder/patches/R-devel.patch create mode 100644 builder/patches/README.md diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index 6bb332c..fbea3b1 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -92,5 +92,4 @@ ENV CONFIGURE_OPTIONS="\ COPY package.opensuse-153 /package.sh COPY build.sh . -COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 9b6af15..f3134fa 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -102,5 +102,4 @@ ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk COPY package.opensuse-154 /package.sh COPY build.sh . -COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/build.sh b/builder/build.sh index 7f49b3e..143a2af 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -64,6 +64,7 @@ fetch_r_source() { rm /tmp/R-${1}.tar.gz } +# Apply a patch for this R version if present. Typically for R-devel. patch_r() { cd /tmp/R-${1} diff --git a/builder/patches/R-devel.patch b/builder/patches/R-devel.patch deleted file mode 100644 index 4495917..0000000 --- a/builder/patches/R-devel.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/src/extra/blas/Makefile.in b/src/extra/blas/Makefile.in -index 3661416..c9b53e2 100644 ---- a/src/extra/blas/Makefile.in -+++ b/src/extra/blas/Makefile.in -@@ -17,7 +17,7 @@ include $(top_builddir)/Makeconf - - ALL_CFLAGS = $(ALL_CFLAGS_LO) - ALL_FFLAGS = $(ALL_FFLAGS_LO) --ALL_FCLAGS = $(ALL_FFLAGS_LO) -+ALL_FCFLAGS = $(ALL_FFLAGS_LO) - - SOURCES = blas00.c blas.f cmplxblas.f blas2.f90 cmplxblas2.f90 - -diff --git a/src/modules/lapack/Makefile.in b/src/modules/lapack/Makefile.in -index 8e593ea..e35c956 100644 ---- a/src/modules/lapack/Makefile.in -+++ b/src/modules/lapack/Makefile.in -@@ -15,6 +15,10 @@ include $(top_builddir)/Makeconf - .f90.o: - $(FC) $(ALL_FCFLAGS) -c @FCFLAGS_f90@ $< -o $@ - -+ALL_CFLAGS = $(ALL_CFLAGS_LO) -+ALL_FFLAGS = $(ALL_FFLAGS_LO) -+ALL_FCFLAGS = $(ALL_FFLAGS_LO) -+ - SOURCES_C = Lapack.c @USE_VECLIB_G95FIX_TRUE@ vecLibg95c.c - SOURCES_F = @USE_VECLIB_G95FIX_TRUE@ vecLibg95f.f - diff --git a/builder/patches/README.md b/builder/patches/README.md new file mode 100644 index 0000000..e510596 --- /dev/null +++ b/builder/patches/README.md @@ -0,0 +1,9 @@ +# Patches + +Patches can be applied for specific R versions and platforms. To add a patch, create a patch file +at `patches/R-${R_VERSION}.patch` (such as `patches/R-devel.patch`), and add the following line +to the platform Dockerfile: + +```dockerfile +COPY patches /patches +``` From 5fd5d31a085315e3136314647e3a42df0ad92878 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 18 Apr 2023 15:10:50 -0500 Subject: [PATCH 053/105] Add R-devel to GHA CI tests --- .github/workflows/test.yml | 4 ++-- test/get_r_versions.py | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bc70168..777ba60 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,9 +25,9 @@ on: description: | Comma-separated list of R versions. Specify "last-N" to use the last N minor R versions, or "all" to use all minor R versions since R 3.1. - Defaults to "last-5". + Defaults to "last-5,devel". required: false - default: 'last-5' + default: 'last-5,devel' type: string permissions: diff --git a/test/get_r_versions.py b/test/get_r_versions.py index 7e7a668..413a7ac 100644 --- a/test/get_r_versions.py +++ b/test/get_r_versions.py @@ -15,10 +15,10 @@ def main(): 'versions', type=str, nargs='?', - default='last-5', + default='last-5,devel', help="""Comma-separated list of R versions. Specify "last-N" to use the last N minor R versions, or "all" to use all minor R versions since R 3.1. - Defaults to "last-5". + Defaults to "last-5,devel". """ ) args = parser.parse_args() @@ -28,14 +28,17 @@ def main(): def _get_versions(which='all'): supported_versions = sorted(_get_supported_versions(), reverse=True) - + versions = [] + for version in which.split(','): + versions.extend(_expand_version(version, supported_versions)) + return versions + +def _expand_version(which, supported_versions): last_n_versions = None if which.startswith('last-'): last_n_versions = int(which.replace('last-', '')) elif which != 'all': - versions = which.split(',') - versions = [v for v in versions if v in supported_versions] - return versions + return [which] if which in supported_versions else [] versions = {} for ver in supported_versions: From a58ff1aa6e17d2ce6d3d8b7dbeb5496efd5b1b20 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 19 Apr 2023 17:20:33 -0500 Subject: [PATCH 054/105] Revert R-devel gcc-8 patch for Ubuntu 18, openSUSE 15.3/15.4 --- builder/Dockerfile.opensuse-153 | 3 --- builder/Dockerfile.opensuse-154 | 3 --- builder/Dockerfile.ubuntu-1804 | 3 +-- builder/build.sh | 23 ----------------------- builder/package.opensuse-153 | 6 +++--- builder/package.opensuse-154 | 6 +++--- builder/package.ubuntu-1804 | 6 +++--- 7 files changed, 10 insertions(+), 40 deletions(-) diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 index fbea3b1..df3b732 100644 --- a/builder/Dockerfile.opensuse-153 +++ b/builder/Dockerfile.opensuse-153 @@ -15,9 +15,6 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ gcc \ gcc-c++ \ gcc-fortran \ - gcc8 \ - gcc8-c++ \ - gcc8-fortran \ glib2-devel \ glibc-locale \ help2man \ diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index f3134fa..1271a03 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -15,9 +15,6 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ gcc \ gcc-c++ \ gcc-fortran \ - gcc8 \ - gcc8-c++ \ - gcc8-fortran \ glib2-devel \ glibc-locale \ help2man \ diff --git a/builder/Dockerfile.ubuntu-1804 b/builder/Dockerfile.ubuntu-1804 index b6c2614..2d0fc61 100644 --- a/builder/Dockerfile.ubuntu-1804 +++ b/builder/Dockerfile.ubuntu-1804 @@ -7,8 +7,7 @@ RUN set -x \ && export DEBIAN_FRONTEND=noninteractive \ && apt-get update \ && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python-pip \ - && apt-get build-dep -y r-base \ - && apt-get install -y gcc-8 g++-8 gfortran-8 + && apt-get build-dep -y r-base RUN pip install awscli diff --git a/builder/build.sh b/builder/build.sh index 143a2af..84b4676 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -129,30 +129,8 @@ compile_r() { --with-blas \ --with-lapack" - if _version_is_greater_than ${R_VERSION} 4.2.10; then - if [[ "${OS_IDENTIFIER}" = "ubuntu-1804" ]]; then - default_configure_options="$default_configure_options \ - CC=gcc-8 CXX=g++-8 FC=gfortran-8" - gcc_package=gcc-8 - gxx_package=g++-8 - gfortran_package=gfortran-8 - fi - fi - CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:-$default_configure_options} - # For OpenSUSE CONFIGURE_OPTIONS are custom, set in the Dockerfile - if _version_is_greater_than ${R_VERSION} 4.2.10; then - if [[ "${OS_IDENTIFIER}" = "opensuse-153" || \ - "${OS_IDENTIFIER}" = "opensuse-154" ]]; then - CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS \ - CC=gcc-8 CXX=g++-8 FC=gfortran-8" - gcc_package=gcc8 - gxx_package=gcc8-c++ - gfortran_package=gcc8-fortran - fi - fi - # set some common environment variables for the configure step AWK=/usr/bin/awk \ LIBnn=lib \ @@ -196,7 +174,6 @@ EOF package_r() { if [[ -f /package.sh ]]; then export R_VERSION=${1} - export gcc_package gxx_package gfortran_package source /package.sh fi } diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 index 393a297..0f1779b 100644 --- a/builder/package.opensuse-153 +++ b/builder/package.opensuse-153 @@ -39,9 +39,9 @@ homepage: https://www.r-project.org license: GPLv2+ depends: - fontconfig -- ${gcc_package-gcc} -- ${gxx_package-gcc-c++} -- ${gfortran_package-gcc-fortran} +- gcc +- gcc-c++ +- gcc-fortran - glibc-locale - gzip - icu.691-devel diff --git a/builder/package.opensuse-154 b/builder/package.opensuse-154 index b97b2d8..3bd9d89 100644 --- a/builder/package.opensuse-154 +++ b/builder/package.opensuse-154 @@ -55,9 +55,9 @@ homepage: https://www.r-project.org license: GPLv2+ depends: - fontconfig -- ${gcc_package-gcc} -- ${gxx_package-gcc-c++} -- ${gfortran_package-gcc-fortran} +- gcc +- gcc-c++ +- gcc-fortran - glibc-locale - gzip - icu.691-devel diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 index f49efaf..a5a75ae 100644 --- a/builder/package.ubuntu-1804 +++ b/builder/package.ubuntu-1804 @@ -27,9 +27,9 @@ deb: fields: Bugs: https://github.com/rstudio/r-builds/issues depends: -- ${gxx_package-g++} -- ${gcc_package-gcc} -- ${gfortran_package-gfortran} +- g++ +- gcc +- gfortran - libbz2-dev - libc6 - libcairo2 From 0ef67edd08fe87cdf25d6959de7a1a696e70cae0 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Tue, 18 Apr 2023 18:57:04 -0500 Subject: [PATCH 055/105] Use FlexiBLAS on RHEL 9 for R 4.3.0 and above R 4.2.3 and below continue to use shared BLAS - OpenBLAS for backward compat. --- builder/Dockerfile.rhel-9 | 1 + builder/build.sh | 10 ++++++++ builder/package.centos-8 | 15 ++++++++++- builder/package.rhel-9 | 54 ++++++++++++++++++++++++++++----------- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index b46934a..0985ae1 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -11,6 +11,7 @@ RUN dnf -y upgrade \ automake \ bzip2-devel \ cairo-devel \ + flexiblas-devel \ gcc-c++ \ gcc-gfortran \ java-11-openjdk-devel \ diff --git a/builder/build.sh b/builder/build.sh index 84b4676..3a1ba1a 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -131,6 +131,16 @@ compile_r() { CONFIGURE_OPTIONS=${CONFIGURE_OPTIONS:-$default_configure_options} + # For RHEL 9, link to external FlexiBLAS starting from R 4.3.0 to align with EPEL 9 + if _version_is_greater_than "${R_VERSION}" 4.2.10; then + if [[ "${OS_IDENTIFIER}" = "rhel-9" ]]; then + CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS \ + --with-blas=flexiblas --with-lapack=flexiblas" + fi + fi + + echo "Using CONFIGURE_OPTIONS: ${CONFIGURE_OPTIONS}" + # set some common environment variables for the configure step AWK=/usr/bin/awk \ LIBnn=lib \ diff --git a/builder/package.centos-8 b/builder/package.centos-8 index 848ee46..2f8d901 100644 --- a/builder/package.centos-8 +++ b/builder/package.centos-8 @@ -10,7 +10,20 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then pcre_lib='pcre-devel' fi -# create post-install script required for openblas +# Create post-install script required for OpenBLAS. +# +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for Posit Package Manager's binary packages. +# +# However, as of R 4.2.3, EPEL 8's R no longer uses shared BLAS and now links to an +# external OpenBLAS (OpenMP). This means EPEL R no longer has a swappable BLAS and +# is no longer compatible with these R builds. cat <> /post-install.sh mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep ln -s /usr/lib64/libopenblasp.so.0 ${R_INSTALL_PATH}/lib/R/lib/libRblas.so diff --git a/builder/package.rhel-9 b/builder/package.rhel-9 index a4102a8..1c3d03b 100644 --- a/builder/package.rhel-9 +++ b/builder/package.rhel-9 @@ -11,8 +11,6 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre-devel' fi -# Create post-install script required for OpenBLAS. -# # On RHEL and SUSE, we link R against the internal shared BLAS to make the # R binaries more portable and allow users to switch BLAS implementations without # having to recompile R. We default to OpenBLAS, but users may prefer other implementations. @@ -20,7 +18,12 @@ fi # Binary packages built against the shared BLAS are also more portable and may be used # with the default R distributed by RHEL/SUSE, or other R installations using # shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). -# This is especially important for RSPM's binary packages. +# This is especially important for Posit Package Manager's binary packages. +# +# However, EPEL 9's R now links externally against FlexiBLAS, which provides a +# native BLAS switching mechanism for Fedora/RHEL. Starting with R 4.3.0, we also +# link to external FlexiBLAS for compatibility. +# https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager # # On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), # as those distributions use the alternatives system to swap BLAS libraries at runtime. @@ -28,18 +31,41 @@ fi # for portability. # # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS -cat <> /post-install.sh -mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so +if [[ "$("${R_INSTALL_PATH}/bin/R" CMD config BLAS_LIBS)" == "-lflexiblas" ]]; then + blas_lib='flexiblas-devel' + + # Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi EOF -# Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. -cat <> /after-remove.sh -if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} -fi + scripts="scripts: + postremove: /after-remove.sh +" +else + blas_lib='openblas-devel' + + # Create post-install script required for OpenBLAS. + cat <> /post-install.sh + mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep + ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so EOF + # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi +EOF + + scripts="scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +" +fi + if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch cat < /tmp/nfpm.yml @@ -66,7 +92,7 @@ depends: - libXmu - libXt - make -- openblas-devel +- ${blas_lib} - pango ${pcre_libs} - tcl @@ -79,9 +105,7 @@ ${pcre_libs} contents: - src: ${R_INSTALL_PATH} dst: ${R_INSTALL_PATH} -scripts: - postinstall: /post-install.sh - postremove: /after-remove.sh +${scripts} EOF nfpm package \ From 6a56d0aa9f49c8442e3f6663c2047bd5fb372fd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sat, 17 Jun 2023 09:47:41 +0200 Subject: [PATCH 056/105] Add support for Debian 12 --- Makefile | 2 +- README.md | 5 ++- builder/Dockerfile.debian-12 | 29 +++++++++++++++ builder/docker-compose.yml | 12 +++++++ builder/package.debian-12 | 70 ++++++++++++++++++++++++++++++++++++ serverless-resources.yml | 14 ++++++++ serverless.yml | 4 ++- test/docker-compose.yml | 8 +++++ 8 files changed, 141 insertions(+), 3 deletions(-) create mode 100644 builder/Dockerfile.debian-12 create mode 100644 builder/package.debian-12 diff --git a/Makefile b/Makefile index 7e9be6b..c67fe72 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 centos-7 centos-8 rhel-9 opensuse-153 opensuse-154 +PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-153 opensuse-154 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/README.md b/README.md index 0521f7c..2bbd2c4 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ bug, or ask questions on [Posit Community](https://community.rstudio.com). R binaries are built for the following Linux operating systems: - Ubuntu 18.04, 20.04, 22.04 -- Debian 10, 11 +- Debian 10, 11, 12 - CentOS 7 - Red Hat Enterprise Linux 7, 8, 9 - openSUSE 15.3, 15.4 @@ -70,6 +70,9 @@ curl -O https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb # Debian 11 curl -O https://cdn.posit.co/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb + +# Debian 12 +curl -O https://cdn.posit.co/r/debian-12/pkgs/r-${R_VERSION}_1_amd64.deb ``` Then install the package: diff --git a/builder/Dockerfile.debian-12 b/builder/Dockerfile.debian-12 new file mode 100644 index 0000000..62f95a2 --- /dev/null +++ b/builder/Dockerfile.debian-12 @@ -0,0 +1,29 @@ +FROM debian:bullseye + +ENV OS_IDENTIFIER debian-12 + +RUN set -x \ + && export DEBIAN_FRONTEND=noninteractive \ + && echo 'deb-src http://deb.debian.org/debian bullseye main' >> /etc/apt/sources.list \ + && apt-get update \ + && apt-get install -y curl gcc libcurl4-openssl-dev libicu-dev \ + libopenblas-base libpcre2-dev make python3-pip wget \ + && apt-get build-dep -y r-base + +RUN pip3 install awscli + +RUN chmod 0777 /opt + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" + +# Override the default pager used by R +ENV PAGER /usr/bin/pager + +# R 3.x requires PCRE2 for Pango support on Debian 12 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.debian-12 /package.sh +COPY build.sh . +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 889cb28..30fd55b 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -59,6 +59,18 @@ services: image: r-builds:debian-11 volumes: - ./integration/tmp:/tmp/output + debian-12: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.debian-12 + image: r-builds:debian-12 + volumes: + - ./integration/tmp:/tmp/output centos-7: command: ./build.sh environment: diff --git a/builder/package.debian-12 b/builder/package.debian-12 new file mode 100644 index 0000000..8db52a5 --- /dev/null +++ b/builder/package.debian-12 @@ -0,0 +1,70 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On Debian 12, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- libpcre2-dev' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- libpcre2-dev +- libpcre3-dev' +fi + +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: gnu-r +arch: $(dpkg --print-architecture) +priority: optional +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- ca-certificates +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4-openssl-dev +- libglib2.0-0 +- libgomp1 +- libicu-dev +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +${pcre_libs} +- libpng16-16 +- libreadline8 +- libtcl8.6 +- libtiff5 +- libtk8.6 +- libx11-6 +- libxt6 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/serverless-resources.yml b/serverless-resources.yml index efb43b2..207b2c9 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -201,6 +201,20 @@ rBuildsBatchJobDefinitionDebian11: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionDebian12: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" + Timeout: + AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos7: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index f7d93d8..6f54bb2 100644 --- a/serverless.yml +++ b/serverless.yml @@ -52,6 +52,8 @@ provider: Ref: rBuildsBatchJobDefinitionDebian10 JOB_DEFINITION_ARN_debian_11: Ref: rBuildsBatchJobDefinitionDebian11 + JOB_DEFINITION_ARN_debian_12: + Ref: rBuildsBatchJobDefinitionDebian12 JOB_DEFINITION_ARN_centos_7: Ref: rBuildsBatchJobDefinitionCentos7 JOB_DEFINITION_ARN_centos_8: @@ -62,7 +64,7 @@ provider: Ref: rBuildsBatchJobDefinitionOpensuse153 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 + SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index db2dc3f..920c1d8 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -23,6 +23,14 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + debian-12: + image: debian:bookworm + command: /r-builds/test/test-apt.sh + environment: + - OS_IDENTIFIER=debian-12 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds debian-11: image: debian:bullseye command: /r-builds/test/test-apt.sh From 4fdb5a8154b2532d9b9be9d8ac3888f99709465b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sat, 17 Jun 2023 11:07:09 +0200 Subject: [PATCH 057/105] Fix libtiff package name for Debian 12 --- builder/package.debian-12 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/package.debian-12 b/builder/package.debian-12 index 8db52a5..c7673d5 100644 --- a/builder/package.debian-12 +++ b/builder/package.debian-12 @@ -48,7 +48,7 @@ ${pcre_libs} - libpng16-16 - libreadline8 - libtcl8.6 -- libtiff5 +- libtiff6 - libtk8.6 - libx11-6 - libxt6 From 2058bd650374f2c50e188d90f8de9a461e93b105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sat, 17 Jun 2023 15:29:33 +0200 Subject: [PATCH 058/105] Fix Dockerfile for Debian-12 --- builder/Dockerfile.debian-12 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/builder/Dockerfile.debian-12 b/builder/Dockerfile.debian-12 index 62f95a2..47cba63 100644 --- a/builder/Dockerfile.debian-12 +++ b/builder/Dockerfile.debian-12 @@ -1,16 +1,16 @@ -FROM debian:bullseye +FROM debian:bookworm ENV OS_IDENTIFIER debian-12 RUN set -x \ && export DEBIAN_FRONTEND=noninteractive \ - && echo 'deb-src http://deb.debian.org/debian bullseye main' >> /etc/apt/sources.list \ + && echo 'deb-src http://deb.debian.org/debian bookworm main' >> /etc/apt/sources.list \ && apt-get update \ && apt-get install -y curl gcc libcurl4-openssl-dev libicu-dev \ - libopenblas-base libpcre2-dev make python3-pip wget \ + libopenblas0 libpcre2-dev make pipx wget \ && apt-get build-dep -y r-base -RUN pip3 install awscli +RUN pipx install awscli && pipx ensurepath RUN chmod 0777 /opt From a71a56bbb5f24cc08eeae1c43b6519fa21a12fef Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 5 Jul 2023 14:59:06 -0500 Subject: [PATCH 059/105] Fix AWS CLI on PATH for Debian 12; install v2 --- builder/Dockerfile.debian-12 | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/builder/Dockerfile.debian-12 b/builder/Dockerfile.debian-12 index 47cba63..5bc8746 100644 --- a/builder/Dockerfile.debian-12 +++ b/builder/Dockerfile.debian-12 @@ -7,10 +7,14 @@ RUN set -x \ && echo 'deb-src http://deb.debian.org/debian bookworm main' >> /etc/apt/sources.list \ && apt-get update \ && apt-get install -y curl gcc libcurl4-openssl-dev libicu-dev \ - libopenblas0 libpcre2-dev make pipx wget \ + libopenblas0 libpcre2-dev make unzip wget \ && apt-get build-dep -y r-base -RUN pipx install awscli && pipx ensurepath +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip RUN chmod 0777 /opt From c423af8311bdbdbabb6051fd862a7d7b388cae71 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 6 Jul 2023 18:16:43 -0500 Subject: [PATCH 060/105] Fix deploy job; use absolute path for HOME --- deploy.Jenkinsfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/deploy.Jenkinsfile b/deploy.Jenkinsfile index 7abcd19..375c674 100644 --- a/deploy.Jenkinsfile +++ b/deploy.Jenkinsfile @@ -3,12 +3,18 @@ pipeline { dockerfile { dir 'jenkins' label 'docker' + // Required for the serverless-python-requirements plugin to install + // Python requirements using the AWS build images, running Docker inside Docker. additionalBuildArgs '--build-arg DOCKER_GID=$(stat -c %g /var/run/docker.sock) --build-arg JENKINS_UID=$(id -u jenkins) --build-arg JENKINS_GID=$(id -g jenkins)' args '-v /var/run/docker.sock:/var/run/docker.sock --group-add docker' } } environment { - HOME = "." + // Set HOME to the workspace for the serverless-python-requirements plugin. + // The plugin uses HOME for its default cache location, which needs to be + // mounted in the separate Python build container. This needs to be an absolute + // path that also exists on the host since we're mounting the Docker socket. + HOME = "${env.WORKSPACE}" } options { ansiColor('xterm') From ffb8b7b214f55740e61a8e38ae5529cfe312e189 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 6 Jul 2023 18:17:19 -0500 Subject: [PATCH 061/105] Add verbose logging to serverless deploy --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c67fe72..9b969c5 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ rebuild-all: deps fetch-serverless-custom-file $(SLS_BINARY) invoke stepf -n rBuilds -d '{"force": true}' serverless-deploy.%: deps fetch-serverless-custom-file - $(SLS_BINARY) deploy --stage $* + $(SLS_BINARY) deploy --stage $* --verbose define GEN_TARGETS docker-build-$(platform): From 503d980dc40fb34122b09c9ba6f68721abb319e2 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Wed, 5 Jul 2023 14:08:22 -0500 Subject: [PATCH 062/105] Ignore more generated files that increase serverless package size by 20M --- serverless.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/serverless.yml b/serverless.yml index 6f54bb2..3dbf6e8 100644 --- a/serverless.yml +++ b/serverless.yml @@ -11,7 +11,10 @@ package: - integration/** - builder/** - docs/** + # Generated files by other tools - node_modules/** + - .npm/** + - .cache/** provider: name: aws From f43d0784da5a5bea316f10551d8a47d5f8ea4c11 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 10 Jul 2023 14:56:24 -0500 Subject: [PATCH 063/105] Fix R <= 4.2 builds for SUSE 15.4; patch configure to allow libcurl 8.x --- builder/build.sh | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/builder/build.sh b/builder/build.sh index 3a1ba1a..6cee816 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -75,12 +75,13 @@ patch_r() { # compile_r() - $1 as r version compile_r() { - cd /tmp/R-${1} + r_version=${1} + cd "/tmp/R-${r_version}" # tools/config.guess in R versions older than 3.2.2 guess 'unknown' instead of 'pc' # test the version and properly set the flag. build_flag="--build=$(uname -m)-pc-linux-gnu" - if _version_is_greater_than ${R_VERSION} 3.2.2; then + if _version_is_greater_than "${r_version}" 3.2.2; then build_flag='' fi @@ -93,7 +94,7 @@ compile_r() { # https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Using-Fortran # https://gcc.gnu.org/gcc-10/porting_to.html gcc_major_version=$(gcc -dumpversion | cut -d '.' -f 1) - if _version_is_less_than "${R_VERSION}" 3.6.2 && _version_is_greater_than "${gcc_major_version}" 9; then + if _version_is_less_than "${r_version}" 3.6.2 && _version_is_greater_than "${gcc_major_version}" 9; then # Default CFLAGS/FFLAGS for all R 3.x versions is '-g -O2' when using GCC export CFLAGS='-g -O2 -fcommon' export FFLAGS='-g -O2 -fallow-argument-mismatch' @@ -111,7 +112,7 @@ compile_r() { # in R 3.x builds, for distributions where PCRE2 is always required. # In Debian 11/Ubuntu 22/RHEL 9, Pango now depends on PCRE2, so R 3.x will not be compiled with # Pango support if the PCRE2 pkg-config file is missing. - if [[ "${1}" =~ ^3 ]] && pkg-config --exists libpcre2-8 && [ -z "$INCLUDE_PCRE2_IN_R_3" ]; then + if [[ "${r_version}" =~ ^3 ]] && pkg-config --exists libpcre2-8 && [ -z "$INCLUDE_PCRE2_IN_R_3" ]; then mkdir -p /tmp/pcre2 pc_dir=$(pkg-config --variable pcfiledir libpcre2-8) mv ${pc_dir}/libpcre2-8.pc /tmp/pcre2 @@ -120,6 +121,15 @@ compile_r() { trap "{ mv /tmp/pcre2/libpcre2-8.pc ${pc_dir}; mv /tmp/pcre2/pcre2-config ${config_bin}; }" EXIT fi + # Allow libcurl 8.x to be used in R 4.2 and below. Despite a change in major + # version number, libcurl 8 changes neither API nor ABI. This applies the same + # change to configure made in R 4.3.0, replacing exit(1) with exit(0) when + # LIBCURL_VERSION_MAJOR > 7. + # https://github.com/wch/r-source/commit/da6638896413bcbb5970b2335b92582853f94e3c + if _version_is_less_than "${r_version}" 4.3.0; then + sed -i -z 's/#if LIBCURL_VERSION_MAJOR > 7\n exit(1)/#if LIBCURL_VERSION_MAJOR > 7\n exit(0)/' configure + fi + # Default configure options. Some Dockerfiles override this with an ENV directive. default_configure_options="\ --enable-R-shlib \ From fc59a69afd4d7f447166ceaac3539b26f039f9cc Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Mon, 10 Jul 2023 15:09:17 -0500 Subject: [PATCH 064/105] Discontinue openSUSE 15.3 and Ubuntu 18.04 builds for EOL --- Makefile | 2 +- README.md | 14 ++--- builder/Dockerfile.opensuse-153 | 92 --------------------------------- builder/Dockerfile.ubuntu-1804 | 25 --------- builder/docker-compose.yml | 24 --------- builder/package.opensuse-153 | 84 ------------------------------ builder/package.ubuntu-1804 | 69 ------------------------- serverless-resources.yml | 28 ---------- serverless.yml | 6 +-- test/docker-compose.yml | 16 ------ 10 files changed, 6 insertions(+), 354 deletions(-) delete mode 100644 builder/Dockerfile.opensuse-153 delete mode 100644 builder/Dockerfile.ubuntu-1804 delete mode 100644 builder/package.opensuse-153 delete mode 100644 builder/package.ubuntu-1804 diff --git a/Makefile b/Makefile index 9b969c5..1cdad07 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-1804 ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-153 opensuse-154 +PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/README.md b/README.md index 2bbd2c4..7503c0a 100644 --- a/README.md +++ b/README.md @@ -19,12 +19,12 @@ bug, or ask questions on [Posit Community](https://community.rstudio.com). R binaries are built for the following Linux operating systems: -- Ubuntu 18.04, 20.04, 22.04 +- Ubuntu 20.04, 22.04 - Debian 10, 11, 12 - CentOS 7 - Red Hat Enterprise Linux 7, 8, 9 -- openSUSE 15.3, 15.4 -- SUSE Linux Enterprise 15 SP3, 15 SP4 +- openSUSE 15.4 +- SUSE Linux Enterprise 15 SP4 Operating systems are supported until their vendor end-of-support dates, which can be found on the [Posit Platform Support](https://posit.co/about/platform-support/) @@ -56,9 +56,6 @@ R_VERSION=4.1.3 Download the deb package: ```bash -# Ubuntu 18.04 -curl -O https://cdn.posit.co/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb - # Ubuntu 20.04 curl -O https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb @@ -140,9 +137,6 @@ sudo yum install R-${R_VERSION}-1-1.x86_64.rpm Download the rpm package: ```bash -# openSUSE 15.3 / SLES 15 SP3 -curl -O https://cdn.posit.co/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm - # openSUSE 15.4 / SLES 15 SP4 curl -O https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` @@ -291,7 +285,7 @@ environment: # snip JOB_DEFINITION_ARN_debian_11: Ref: rBuildsBatchJobDefinitionDebian11 - SUPPORTED_PLATFORMS: ubuntu-1804,debian-10,centos-7,centos-8 + SUPPORTED_PLATFORMS: debian-10,centos-7,centos-8 ``` ### Makefile diff --git a/builder/Dockerfile.opensuse-153 b/builder/Dockerfile.opensuse-153 deleted file mode 100644 index df3b732..0000000 --- a/builder/Dockerfile.opensuse-153 +++ /dev/null @@ -1,92 +0,0 @@ -FROM opensuse/leap:15.3 - -ENV OS_IDENTIFIER opensuse-153 - -# Most of these packages, and also the configure options that follow were determined -# by reviewing "R-base.spec" from the following OpenSUSE RPM: -# https://download.opensuse.org/repositories/devel:/languages:/R:/released/openSUSE_Leap_42.3/src/R-base-3.5.3-103.1.src.rpm - -RUN zypper --non-interactive update -RUN zypper --non-interactive --gpg-auto-import-keys -n install \ - bzip2 \ - cairo-devel \ - curl \ - fdupes \ - gcc \ - gcc-c++ \ - gcc-fortran \ - glib2-devel \ - glibc-locale \ - help2man \ - # openSUSE/SLES 15.3 originally shipped with ICU 65 (libicu-devel), but later - # added ICU 69 (icu.691-devel) in a patch update. Prefer ICU 69 because the devel - # packages can't coexist, and zypper now resolves libicu-devel to icu.691-devel. - icu.691-devel \ - java-1_8_0-openjdk-devel \ - libX11-devel \ - libXScrnSaver-devel \ - libXmu-devel \ - libXt-devel \ - libbz2-devel \ - libcurl-devel \ - libjpeg-devel \ - libpng-devel \ - libtiff-devel \ - make \ - pango-devel \ - pcre-devel \ - pcre2-devel \ - perl \ - perl-macros \ - python \ - python-pip \ - readline-devel \ - rpm-build \ - shadow \ - tcl-devel \ - texinfo \ - texlive-ae \ - texlive-bibtex \ - texlive-cm-super \ - texlive-dvips \ - texlive-fancyvrb \ - texlive-helvetic \ - texlive-inconsolata \ - texlive-latex \ - texlive-makeindex \ - texlive-metafont \ - texlive-psnfss \ - texlive-tex \ - texlive-times \ - tk-devel \ - unzip \ - wget \ - xdg-utils \ - xorg-x11-devel \ - xz-devel \ - zip \ - zlib-devel \ - && zypper clean - -RUN pip install awscli - -RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch - -RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ - zypper --non-interactive --no-gpg-checks install "nfpm_$(cat /tmp/arch).rpm" && \ - rm "nfpm_$(cat /tmp/arch).rpm" - -RUN chmod 0777 /opt - -# Configure flags for SUSE that don't use the defaults in build.sh -ENV CONFIGURE_OPTIONS="\ - --enable-R-shlib \ - --with-tcltk \ - --with-x \ - --enable-memory-profiling \ - --with-tcl-config=/usr/lib64/tclConfig.sh \ - --with-tk-config=/usr/lib64/tkConfig.sh" - -COPY package.opensuse-153 /package.sh -COPY build.sh . -ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.ubuntu-1804 b/builder/Dockerfile.ubuntu-1804 deleted file mode 100644 index 2d0fc61..0000000 --- a/builder/Dockerfile.ubuntu-1804 +++ /dev/null @@ -1,25 +0,0 @@ -FROM ubuntu:bionic - -ENV OS_IDENTIFIER ubuntu-1804 - -RUN set -x \ - && sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \ - && export DEBIAN_FRONTEND=noninteractive \ - && apt-get update \ - && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python-pip \ - && apt-get build-dep -y r-base - -RUN pip install awscli - -RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ - apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ - rm "nfpm_$(dpkg --print-architecture).deb" - -RUN chmod 0777 /opt - -# Override the default pager used by R -ENV PAGER /usr/bin/pager - -COPY package.ubuntu-1804 /package.sh -COPY build.sh . -ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 30fd55b..8f3bd3d 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -1,16 +1,4 @@ services: - ubuntu-1804: - command: ./build.sh - environment: - - R_VERSION=${R_VERSION} - - R_INSTALL_PATH=${R_INSTALL_PATH} - - LOCAL_STORE=/tmp/output - build: - context: . - dockerfile: Dockerfile.ubuntu-1804 - image: r-builds:ubuntu-1804 - volumes: - - ./integration/tmp:/tmp/output ubuntu-2004: command: ./build.sh environment: @@ -107,18 +95,6 @@ services: image: r-builds:rhel-9 volumes: - ./integration/tmp:/tmp/output - opensuse-153: - command: ./build.sh - environment: - - R_VERSION=${R_VERSION} - - R_INSTALL_PATH=${R_INSTALL_PATH} - - LOCAL_STORE=/tmp/output - build: - context: . - dockerfile: Dockerfile.opensuse-153 - image: r-builds:opensuse-153 - volumes: - - ./integration/tmp:/tmp/output opensuse-154: command: ./build.sh environment: diff --git a/builder/package.opensuse-153 b/builder/package.opensuse-153 deleted file mode 100644 index 0f1779b..0000000 --- a/builder/package.opensuse-153 +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/bash - -if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then - mkdir -p "/tmp/output/${OS_IDENTIFIER}" -fi - -# R 3.x requires PCRE1 -pcre_lib='pcre2-devel' -if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='pcre-devel' -fi - -# create post-install script required for openblas -cat <> /post-install.sh -mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep -ln -s /usr/lib64/libopenblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so -EOF - -# create after-remove script to remove internal blas -cat <> /after-remove.sh -if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} -fi -EOF - -if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch - -cat < /tmp/nfpm.yml -name: R-${R_VERSION} -version: 1 -version_schema: none -arch: $(cat /tmp/arch) -release: 1 -maintainer: Posit Software, PBC -description: | - GNU R statistical computation and graphics system -vendor: Posit Software, PBC -homepage: https://www.r-project.org -license: GPLv2+ -depends: -- fontconfig -- gcc -- gcc-c++ -- gcc-fortran -- glibc-locale -- gzip -- icu.691-devel -- libbz2-devel -- libcairo2 -- libcurl-devel -- libfreetype6 -- libgomp1 -- libjpeg62 -- libpango-1_0-0 -- libreadline7 -- libtiff5 -- make -- openblas-devel -- ${pcre_lib} -- tar -- tcl -- tk -- unzip -- which -- xorg-x11 -- xorg-x11-fonts-100dpi -- xorg-x11-fonts-75dpi -- xz-devel -- zip -- zlib-devel -contents: -- src: ${R_INSTALL_PATH} - dst: ${R_INSTALL_PATH} -scripts: - postinstall: /post-install.sh - postremove: /after-remove.sh -EOF - -nfpm package \ - -f /tmp/nfpm.yml \ - -p rpm \ - -t "/tmp/output/${OS_IDENTIFIER}" - -export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.ubuntu-1804 b/builder/package.ubuntu-1804 deleted file mode 100644 index a5a75ae..0000000 --- a/builder/package.ubuntu-1804 +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/bash - -if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then - mkdir -p "/tmp/output/${OS_IDENTIFIER}" -fi - -# R 3.x requires PCRE1 -pcre_lib='libpcre2-dev' -if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre_lib='libpcre3-dev' -fi - -cat < /tmp/nfpm.yml -name: r-${R_VERSION} -version: 1 -version_schema: none -section: universe/math -arch: $(dpkg --print-architecture) -priority: optional -maintainer: Posit Software, PBC -description: | - GNU R statistical computation and graphics system -vendor: Posit Software, PBC -homepage: https://www.r-project.org -license: GPL-2 -deb: - fields: - Bugs: https://github.com/rstudio/r-builds/issues -depends: -- g++ -- gcc -- gfortran -- libbz2-dev -- libc6 -- libcairo2 -- libcurl4 -- libglib2.0-0 -- libgomp1 -- libicu-dev -- libjpeg8 -- liblzma-dev -- libopenblas-dev -- libpango-1.0-0 -- libpangocairo-1.0-0 -- libpaper-utils -- ${pcre_lib} -- libpng16-16 -- libreadline7 -- libtcl8.6 -- libtiff5 -- libtk8.6 -- libx11-6 -- libxt6 -- make -- ucf -- unzip -- zip -- zlib1g-dev -contents: -- src: ${R_INSTALL_PATH} - dst: ${R_INSTALL_PATH} -EOF - -nfpm package \ - -f /tmp/nfpm.yml \ - -p deb \ - -t "/tmp/output/${OS_IDENTIFIER}" - -export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/serverless-resources.yml b/serverless-resources.yml index 207b2c9..cd846bf 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -131,20 +131,6 @@ rBuildsBatchJobQueue: State: ENABLED Priority: 1 -rBuildsBatchJobDefinitionUbuntu1804: - Type: AWS::Batch::JobDefinition - Properties: - Type: container - ContainerProperties: - Command: - - ./build.sh - Vcpus: 4 - Memory: 4096 - JobRoleArn: - "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] - Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-1804" - Timeout: - AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionUbuntu2004: Type: AWS::Batch::JobDefinition Properties: @@ -257,20 +243,6 @@ rBuildsBatchJobDefinitionRhel9: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" Timeout: AttemptDurationSeconds: 7200 -rBuildsBatchJobDefinitionOpensuse153: - Type: AWS::Batch::JobDefinition - Properties: - Type: container - ContainerProperties: - Command: - - ./build.sh - Vcpus: 4 - Memory: 4096 - JobRoleArn: - "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] - Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-153" - Timeout: - AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse154: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index 3dbf6e8..3b4af82 100644 --- a/serverless.yml +++ b/serverless.yml @@ -45,8 +45,6 @@ provider: Ref: rBuildsTopic JOB_QUEUE_ARN: Ref: rBuildsBatchJobQueue - JOB_DEFINITION_ARN_ubuntu_1804: - Ref: rBuildsBatchJobDefinitionUbuntu1804 JOB_DEFINITION_ARN_ubuntu_2004: Ref: rBuildsBatchJobDefinitionUbuntu2004 JOB_DEFINITION_ARN_ubuntu_2204: @@ -63,11 +61,9 @@ provider: Ref: rBuildsBatchJobDefinitionCentos8 JOB_DEFINITION_ARN_rhel_9: Ref: rBuildsBatchJobDefinitionRhel9 - JOB_DEFINITION_ARN_opensuse_153: - Ref: rBuildsBatchJobDefinitionOpensuse153 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - SUPPORTED_PLATFORMS: ubuntu-1804,ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-153,opensuse-154 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 920c1d8..f44e77e 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -1,12 +1,4 @@ services: - ubuntu-1804: - image: ubuntu:bionic - command: /r-builds/test/test-apt.sh - environment: - - OS_IDENTIFIER=ubuntu-1804 - - R_VERSION=${R_VERSION} - volumes: - - ../:/r-builds ubuntu-2004: image: ubuntu:focal command: /r-builds/test/test-apt.sh @@ -71,14 +63,6 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds - opensuse-153: - image: opensuse/leap:15.3 - command: /r-builds/test/test-zypper.sh - environment: - - OS_IDENTIFIER=opensuse-153 - - R_VERSION=${R_VERSION} - volumes: - - ../:/r-builds opensuse-154: image: opensuse/leap:15.4 command: /r-builds/test/test-zypper.sh From 33c666c5b481dfede67cc3714baf14118e87fcc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 19 Jul 2023 11:07:37 +0200 Subject: [PATCH 065/105] Fix R 3.3.0-3.3.2 builds --- builder/Dockerfile.centos-7 | 1 + builder/Dockerfile.centos-8 | 1 + builder/Dockerfile.debian-10 | 1 + builder/Dockerfile.debian-11 | 1 + builder/Dockerfile.debian-12 | 1 + builder/Dockerfile.opensuse-154 | 1 + builder/Dockerfile.rhel-9 | 1 + builder/Dockerfile.ubuntu-2004 | 1 + builder/Dockerfile.ubuntu-2204 | 1 + builder/build.sh | 4 ++++ builder/patches/README.md | 12 ++++++------ 11 files changed, 19 insertions(+), 6 deletions(-) diff --git a/builder/Dockerfile.centos-7 b/builder/Dockerfile.centos-7 index 61451ec..a038cad 100644 --- a/builder/Dockerfile.centos-7 +++ b/builder/Dockerfile.centos-7 @@ -73,4 +73,5 @@ ENV R_RD4PDF="times,hyper" COPY package.centos-7 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.centos-8 b/builder/Dockerfile.centos-8 index 5c535ab..fa8d8f6 100644 --- a/builder/Dockerfile.centos-8 +++ b/builder/Dockerfile.centos-8 @@ -74,4 +74,5 @@ ENV R_RD4PDF="times,hyper" COPY package.centos-8 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.debian-10 b/builder/Dockerfile.debian-10 index 67b5e08..1afcac5 100644 --- a/builder/Dockerfile.debian-10 +++ b/builder/Dockerfile.debian-10 @@ -23,4 +23,5 @@ ENV PAGER /usr/bin/pager COPY package.debian-10 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.debian-11 b/builder/Dockerfile.debian-11 index b31afda..b8328af 100644 --- a/builder/Dockerfile.debian-11 +++ b/builder/Dockerfile.debian-11 @@ -26,4 +26,5 @@ ENV INCLUDE_PCRE2_IN_R_3 yes COPY package.debian-11 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.debian-12 b/builder/Dockerfile.debian-12 index 5bc8746..f5f4d2b 100644 --- a/builder/Dockerfile.debian-12 +++ b/builder/Dockerfile.debian-12 @@ -30,4 +30,5 @@ ENV INCLUDE_PCRE2_IN_R_3 yes COPY package.debian-12 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.opensuse-154 b/builder/Dockerfile.opensuse-154 index 1271a03..780bbfc 100644 --- a/builder/Dockerfile.opensuse-154 +++ b/builder/Dockerfile.opensuse-154 @@ -99,4 +99,5 @@ ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk COPY package.opensuse-154 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index 0985ae1..c30f876 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -90,4 +90,5 @@ ENV INCLUDE_PCRE2_IN_R_3 yes COPY package.rhel-9 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.ubuntu-2004 b/builder/Dockerfile.ubuntu-2004 index 6e89ff7..7560ea8 100644 --- a/builder/Dockerfile.ubuntu-2004 +++ b/builder/Dockerfile.ubuntu-2004 @@ -22,4 +22,5 @@ ENV PAGER /usr/bin/pager COPY package.ubuntu-2004 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.ubuntu-2204 b/builder/Dockerfile.ubuntu-2204 index 18ea4a0..4a7bb38 100644 --- a/builder/Dockerfile.ubuntu-2204 +++ b/builder/Dockerfile.ubuntu-2204 @@ -25,4 +25,5 @@ ENV INCLUDE_PCRE2_IN_R_3 yes COPY package.ubuntu-2204 /package.sh COPY build.sh . +COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/build.sh b/builder/build.sh index 6cee816..ae3dcda 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -71,6 +71,10 @@ patch_r() { if [ -f "/patches/R-${1}.patch" ]; then patch -p1 < "/patches/R-${1}.patch" fi + + if [ -f "/patches/R-${1}-${OS_IDENTIFIER}.patch" ]; then + patch -p1 < "/patches/R-${1}-${OS_IDENTIFIER}.patch" + fi } # compile_r() - $1 as r version diff --git a/builder/patches/README.md b/builder/patches/README.md index e510596..3276631 100644 --- a/builder/patches/README.md +++ b/builder/patches/README.md @@ -1,9 +1,9 @@ # Patches -Patches can be applied for specific R versions and platforms. To add a patch, create a patch file -at `patches/R-${R_VERSION}.patch` (such as `patches/R-devel.patch`), and add the following line -to the platform Dockerfile: +Patches can be applied for specific R versions and platforms. To add a patch for an R version on +all platforms, create a patch file at `patches/R-${R_VERSION}.patch` (such as +`patches/R-devel.patch`). -```dockerfile -COPY patches /patches -``` +To add a patch for an R version on a specific platform create a patch file at +`patches/R-${R_VERSION}-${OS_IDENTIFIER}.patch` (such as +`patches/R-3.3.0-centos-8.patch`). From 7b9cc434526cf498b6e8c3ba44381760d61e8d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 19 Jul 2023 11:28:51 +0200 Subject: [PATCH 066/105] Add missing patch files Thanks .gitignore! --- builder/patches/R-3.3.0.patch | 20 ++++++++++++++++++++ builder/patches/R-3.3.1.patch | 20 ++++++++++++++++++++ builder/patches/R-3.3.2.patch | 20 ++++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 builder/patches/R-3.3.0.patch create mode 100644 builder/patches/R-3.3.1.patch create mode 100644 builder/patches/R-3.3.2.patch diff --git a/builder/patches/R-3.3.0.patch b/builder/patches/R-3.3.0.patch new file mode 100644 index 0000000..f87bf6b --- /dev/null +++ b/builder/patches/R-3.3.0.patch @@ -0,0 +1,20 @@ +diff --git a/configure b/configure +index e53821d..d26fd72 100755 +--- a/configure ++++ b/configure +@@ -35496,10 +35496,11 @@ else + #include + #include + int main() { +-#ifdef ZLIB_VERSION +-/* Work around Debian bug: it uses 1.2.3.4 even though there was no such +- version on the master site zlib.net */ +- exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0); ++#ifdef ZLIB_VERNUM ++ if (ZLIB_VERNUM < 0x1250) { ++ exit(1); ++ } ++ exit(0); + #else + exit(1); + #endif diff --git a/builder/patches/R-3.3.1.patch b/builder/patches/R-3.3.1.patch new file mode 100644 index 0000000..f87bf6b --- /dev/null +++ b/builder/patches/R-3.3.1.patch @@ -0,0 +1,20 @@ +diff --git a/configure b/configure +index e53821d..d26fd72 100755 +--- a/configure ++++ b/configure +@@ -35496,10 +35496,11 @@ else + #include + #include + int main() { +-#ifdef ZLIB_VERSION +-/* Work around Debian bug: it uses 1.2.3.4 even though there was no such +- version on the master site zlib.net */ +- exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0); ++#ifdef ZLIB_VERNUM ++ if (ZLIB_VERNUM < 0x1250) { ++ exit(1); ++ } ++ exit(0); + #else + exit(1); + #endif diff --git a/builder/patches/R-3.3.2.patch b/builder/patches/R-3.3.2.patch new file mode 100644 index 0000000..f87bf6b --- /dev/null +++ b/builder/patches/R-3.3.2.patch @@ -0,0 +1,20 @@ +diff --git a/configure b/configure +index e53821d..d26fd72 100755 +--- a/configure ++++ b/configure +@@ -35496,10 +35496,11 @@ else + #include + #include + int main() { +-#ifdef ZLIB_VERSION +-/* Work around Debian bug: it uses 1.2.3.4 even though there was no such +- version on the master site zlib.net */ +- exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0); ++#ifdef ZLIB_VERNUM ++ if (ZLIB_VERNUM < 0x1250) { ++ exit(1); ++ } ++ exit(0); + #else + exit(1); + #endif From ee6c49ca9e3342a13fdff3e42d8430c08bb3c772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 19 Jul 2023 23:18:16 +0200 Subject: [PATCH 067/105] Update handler.py not to skip R 3.3.x We have a patch now, so we can build these R versions. --- handler.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/handler.py b/handler.py index 91baf50..f2f9fc9 100644 --- a/handler.py +++ b/handler.py @@ -146,12 +146,6 @@ def queue_builds(event, context): job_ids = [] for version in event['versions_to_build']: for platform in event['supported_platforms']: - # In R 3.3.0, 3.3.1, and 3.3.2, the configure script check for the - # zlib version fails to handle versions longer than 5 characters. - # Skip builds affected by this bug. Most newer distros will be affected. - # https://github.com/rstudio/r-builds/issues/76 - if version in ['3.3.0', '3.3.1', '3.3.2'] and platform not in ['centos-7']: - continue job_ids.append(_submit_job(version, platform)) event['jobIds'] = job_ids return event From 6c9247cfead7d302bbed9a16d86228d862651398 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Tue, 25 Jul 2023 17:35:32 -0400 Subject: [PATCH 068/105] Attempt at adding builds for Fedora 37 and 38 --- Makefile | 2 +- README.md | 20 ++++++ builder/Dockerfile.fedora-37 | 86 ++++++++++++++++++++++++++ builder/Dockerfile.fedora-38 | 86 ++++++++++++++++++++++++++ builder/docker-compose.yml | 24 ++++++++ builder/package.fedora-37 | 116 +++++++++++++++++++++++++++++++++++ builder/package.fedora-38 | 116 +++++++++++++++++++++++++++++++++++ serverless-resources.yml | 28 +++++++++ serverless.yml | 6 +- test/docker-compose.yml | 16 +++++ 10 files changed, 498 insertions(+), 2 deletions(-) create mode 100644 builder/Dockerfile.fedora-37 create mode 100644 builder/Dockerfile.fedora-38 create mode 100644 builder/package.fedora-37 create mode 100644 builder/package.fedora-38 diff --git a/Makefile b/Makefile index 1cdad07..4c9daf8 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 +PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 fedora-37 fedora-38 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/README.md b/README.md index 7503c0a..e7513de 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ R binaries are built for the following Linux operating systems: - Red Hat Enterprise Linux 7, 8, 9 - openSUSE 15.4 - SUSE Linux Enterprise 15 SP4 +- Fedora 37, 38 Operating systems are supported until their vendor end-of-support dates, which can be found on the [Posit Platform Support](https://posit.co/about/platform-support/) @@ -146,6 +147,25 @@ Then install the package: sudo zypper --no-gpg-checks install R-${R_VERSION}-1-1.x86_64.rpm ``` +Download the deb package: +```bash +# Debian 10 +curl -O https://cdn.posit.co/r/fedora-37/pkgs/r-${R_VERSION}_1_amd64.rpm + +# Debian 11 +curl -O https://cdn.posit.co/r/fedora-38/pkgs/r-${R_VERSION}_1_amd64.rpm + +# Debian 12 +curl -O https://cdn.posit.co/r/debian-12/pkgs/r-${R_VERSION}_1_amd64.deb +``` + +Then install the package: +```bash +sudo dnf install r-${R_VERSION}_1_amd64.rpm +``` + + + ### Verify R installation Test that R was successfully installed by running: diff --git a/builder/Dockerfile.fedora-37 b/builder/Dockerfile.fedora-37 new file mode 100644 index 0000000..1d62365 --- /dev/null +++ b/builder/Dockerfile.fedora-37 @@ -0,0 +1,86 @@ +FROM fedora:37 + +ENV OS_IDENTIFIER fedora-37 + +RUN dnf -y upgrade \ + && dnf -y install dnf-plugins-core \ + && dnf -y install \ + autoconf \ + automake \ + bzip2-devel \ + cairo-devel \ + flexiblas-devel \ + gcc-c++ \ + gcc-gfortran \ + java-11-openjdk-devel \ + libICE-devel \ + libSM-devel \ + libX11-devel \ + libXmu-devel \ + libXt-devel \ + libcurl-devel \ + libicu-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + libtool \ + make \ + ncurses-devel \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + readline-devel \ + rpm-build \ + tcl-devel \ + tex \ + texinfo-tex \ + texlive-collection-latexrecommended \ + tk-devel \ + unzip \ + valgrind-devel \ + which \ + wget \ + xz-devel \ + zlib-devel \ + && dnf clean all + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" + +RUN chmod 0777 /opt + +# Configure flags for RHEL 9 that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --enable-memory-profiling \ + --with-x \ + --with-system-valgrind-headers \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh \ + --enable-prebuilt-html" + +# Make sure that patching Java does not break R. +# R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which +# requires users to run `R CMD javareconf` even on minor/patch upgrades. Use the +# major version symlink to avoid this. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.posit.co/envs-pkgs/using-rjava/ +ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk + +# R 3.x requires PCRE2 for Pango support on RHEL 9 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.fedora-37 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.fedora-38 b/builder/Dockerfile.fedora-38 new file mode 100644 index 0000000..103adbe --- /dev/null +++ b/builder/Dockerfile.fedora-38 @@ -0,0 +1,86 @@ +FROM fedora:38 + +ENV OS_IDENTIFIER fedora-38 + +RUN dnf -y upgrade \ + && dnf -y install dnf-plugins-core \ + && dnf -y install \ + autoconf \ + automake \ + bzip2-devel \ + cairo-devel \ + flexiblas-devel \ + gcc-c++ \ + gcc-gfortran \ + java-11-openjdk-devel \ + libICE-devel \ + libSM-devel \ + libX11-devel \ + libXmu-devel \ + libXt-devel \ + libcurl-devel \ + libicu-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + libtool \ + make \ + ncurses-devel \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + readline-devel \ + rpm-build \ + tcl-devel \ + tex \ + texinfo-tex \ + texlive-collection-latexrecommended \ + tk-devel \ + unzip \ + valgrind-devel \ + which \ + wget \ + xz-devel \ + zlib-devel \ + && dnf clean all + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" + +RUN chmod 0777 /opt + +# Configure flags for RHEL 9 that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --enable-memory-profiling \ + --with-x \ + --with-system-valgrind-headers \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh \ + --enable-prebuilt-html" + +# Make sure that patching Java does not break R. +# R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which +# requires users to run `R CMD javareconf` even on minor/patch upgrades. Use the +# major version symlink to avoid this. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.posit.co/envs-pkgs/using-rjava/ +ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk + +# R 3.x requires PCRE2 for Pango support on RHEL 9 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.fedora-38 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 8f3bd3d..b8b0407 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -107,3 +107,27 @@ services: image: r-builds:opensuse-154 volumes: - ./integration/tmp:/tmp/output + fedora-37: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.fedora-37 + image: r-builds:fedora-37 + volumes: + - ./integration/tmp:/tmp/output + fedora-38: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.fedora-38 + image: r-builds:fedora-38 + volumes: + - ./integration/tmp:/tmp/output \ No newline at end of file diff --git a/builder/package.fedora-37 b/builder/package.fedora-37 new file mode 100644 index 0000000..1c3d03b --- /dev/null +++ b/builder/package.fedora-37 @@ -0,0 +1,116 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On RHEL 9, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- pcre2-devel +- pcre-devel' +fi + +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for Posit Package Manager's binary packages. +# +# However, EPEL 9's R now links externally against FlexiBLAS, which provides a +# native BLAS switching mechanism for Fedora/RHEL. Starting with R 4.3.0, we also +# link to external FlexiBLAS for compatibility. +# https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager +# +# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), +# as those distributions use the alternatives system to swap BLAS libraries at runtime. +# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well +# for portability. +# +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS +if [[ "$("${R_INSTALL_PATH}/bin/R" CMD config BLAS_LIBS)" == "-lflexiblas" ]]; then + blas_lib='flexiblas-devel' + + # Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi +EOF + + scripts="scripts: + postremove: /after-remove.sh +" +else + blas_lib='openblas-devel' + + # Create post-install script required for OpenBLAS. + cat <> /post-install.sh + mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep + ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so +EOF + + # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi +EOF + + scripts="scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +" +fi + +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +arch: $(cat /tmp/arch) +release: 1 +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- ${blas_lib} +- pango +${pcre_libs} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +${scripts} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/builder/package.fedora-38 b/builder/package.fedora-38 new file mode 100644 index 0000000..1c3d03b --- /dev/null +++ b/builder/package.fedora-38 @@ -0,0 +1,116 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On RHEL 9, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- pcre2-devel +- pcre-devel' +fi + +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for Posit Package Manager's binary packages. +# +# However, EPEL 9's R now links externally against FlexiBLAS, which provides a +# native BLAS switching mechanism for Fedora/RHEL. Starting with R 4.3.0, we also +# link to external FlexiBLAS for compatibility. +# https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager +# +# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), +# as those distributions use the alternatives system to swap BLAS libraries at runtime. +# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well +# for portability. +# +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS +if [[ "$("${R_INSTALL_PATH}/bin/R" CMD config BLAS_LIBS)" == "-lflexiblas" ]]; then + blas_lib='flexiblas-devel' + + # Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi +EOF + + scripts="scripts: + postremove: /after-remove.sh +" +else + blas_lib='openblas-devel' + + # Create post-install script required for OpenBLAS. + cat <> /post-install.sh + mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep + ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so +EOF + + # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. + cat <> /after-remove.sh + if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} + fi +EOF + + scripts="scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +" +fi + +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +arch: $(cat /tmp/arch) +release: 1 +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- ${blas_lib} +- pango +${pcre_libs} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +${scripts} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/serverless-resources.yml b/serverless-resources.yml index cd846bf..9e8f6db 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -257,6 +257,34 @@ rBuildsBatchJobDefinitionOpensuse154: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionFedora37: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" + Timeout: + AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionFedora38: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" + Timeout: + AttemptDurationSeconds: 7200 # step function cloudwatch event trigger resources rBuildsEventRuleIamRole: diff --git a/serverless.yml b/serverless.yml index 3b4af82..f857a4e 100644 --- a/serverless.yml +++ b/serverless.yml @@ -63,7 +63,11 @@ provider: Ref: rBuildsBatchJobDefinitionRhel9 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154 + JOB_DEFINITION_ARN_fedora_37: + Ref: rBuildsBatchJobDefinitionFedora37 + JOB_DEFINITION_ARN_fedora_38: + Ref: rBuildsBatchJobDefinitionFedora38 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,fedora-37,fedora-38 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index f44e77e..4ba742b 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -71,3 +71,19 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + fedora-37: + image: fedora:37 + command: /r-builds/test/test-yum.sh + environment: + - OS_IDENTIFIER=fedora-37 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds + fedora-38: + image: fedora:38 + command: /r-builds/test/test-yum.sh + environment: + - OS_IDENTIFIER=fedora-38 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds From afa8fddca0d53b76ba714ce47ceee0f7f63be6ab Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 13:51:55 -0400 Subject: [PATCH 069/105] Fix Fedora entry --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e7513de..f43401f 100644 --- a/README.md +++ b/README.md @@ -147,16 +147,15 @@ Then install the package: sudo zypper --no-gpg-checks install R-${R_VERSION}-1-1.x86_64.rpm ``` -Download the deb package: +#### Fedora Linux + +Download the rpm package: ```bash -# Debian 10 +# Fedora 37 curl -O https://cdn.posit.co/r/fedora-37/pkgs/r-${R_VERSION}_1_amd64.rpm -# Debian 11 +# Fedora 38 curl -O https://cdn.posit.co/r/fedora-38/pkgs/r-${R_VERSION}_1_amd64.rpm - -# Debian 12 -curl -O https://cdn.posit.co/r/debian-12/pkgs/r-${R_VERSION}_1_amd64.deb ``` Then install the package: From c0f78b5f758ce22c64268106872930dabe0ae1a7 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 14:11:14 -0400 Subject: [PATCH 070/105] Fix flexiblas --- builder/Dockerfile.fedora-37 | 2 +- builder/Dockerfile.fedora-38 | 2 +- builder/package.fedora-37 | 62 ++++++------------------------------ builder/package.fedora-38 | 62 ++++++------------------------------ 4 files changed, 22 insertions(+), 106 deletions(-) diff --git a/builder/Dockerfile.fedora-37 b/builder/Dockerfile.fedora-37 index 1d62365..4417665 100644 --- a/builder/Dockerfile.fedora-37 +++ b/builder/Dockerfile.fedora-37 @@ -58,7 +58,7 @@ RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_ RUN chmod 0777 /opt -# Configure flags for RHEL 9 that don't use the defaults in build.sh +# Configure flags for that don't use the defaults in build.sh ENV CONFIGURE_OPTIONS="\ --enable-R-shlib \ --with-tcltk \ diff --git a/builder/Dockerfile.fedora-38 b/builder/Dockerfile.fedora-38 index 103adbe..ec0b876 100644 --- a/builder/Dockerfile.fedora-38 +++ b/builder/Dockerfile.fedora-38 @@ -58,7 +58,7 @@ RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_ RUN chmod 0777 /opt -# Configure flags for RHEL 9 that don't use the defaults in build.sh +# Configure flags that don't use the defaults in build.sh ENV CONFIGURE_OPTIONS="\ --enable-R-shlib \ --with-tcltk \ diff --git a/builder/package.fedora-37 b/builder/package.fedora-37 index 1c3d03b..9a7151f 100644 --- a/builder/package.fedora-37 +++ b/builder/package.fedora-37 @@ -11,60 +11,18 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre-devel' fi -# On RHEL and SUSE, we link R against the internal shared BLAS to make the -# R binaries more portable and allow users to switch BLAS implementations without -# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. -# -# Binary packages built against the shared BLAS are also more portable and may be used -# with the default R distributed by RHEL/SUSE, or other R installations using -# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). -# This is especially important for Posit Package Manager's binary packages. -# -# However, EPEL 9's R now links externally against FlexiBLAS, which provides a -# native BLAS switching mechanism for Fedora/RHEL. Starting with R 4.3.0, we also -# link to external FlexiBLAS for compatibility. -# https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager -# -# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), -# as those distributions use the alternatives system to swap BLAS libraries at runtime. -# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well -# for portability. -# -# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS -if [[ "$("${R_INSTALL_PATH}/bin/R" CMD config BLAS_LIBS)" == "-lflexiblas" ]]; then - blas_lib='flexiblas-devel' +blas_lib='flexiblas-devel' - # Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. - cat <> /after-remove.sh - if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} - fi -EOF - - scripts="scripts: - postremove: /after-remove.sh -" -else - blas_lib='openblas-devel' - - # Create post-install script required for OpenBLAS. - cat <> /post-install.sh - mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep - ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so -EOF - - # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. - cat <> /after-remove.sh - if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} - fi -EOF - - scripts="scripts: - postinstall: /post-install.sh - postremove: /after-remove.sh -" +# Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. +cat <> /after-remove.sh +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi +EOF + +scripts="scripts: + postremove: /after-remove.sh +" if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/package.fedora-38 b/builder/package.fedora-38 index 1c3d03b..9a7151f 100644 --- a/builder/package.fedora-38 +++ b/builder/package.fedora-38 @@ -11,60 +11,18 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - pcre-devel' fi -# On RHEL and SUSE, we link R against the internal shared BLAS to make the -# R binaries more portable and allow users to switch BLAS implementations without -# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. -# -# Binary packages built against the shared BLAS are also more portable and may be used -# with the default R distributed by RHEL/SUSE, or other R installations using -# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). -# This is especially important for Posit Package Manager's binary packages. -# -# However, EPEL 9's R now links externally against FlexiBLAS, which provides a -# native BLAS switching mechanism for Fedora/RHEL. Starting with R 4.3.0, we also -# link to external FlexiBLAS for compatibility. -# https://fedoraproject.org/wiki/Changes/FlexiBLAS_as_BLAS/LAPACK_manager -# -# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), -# as those distributions use the alternatives system to swap BLAS libraries at runtime. -# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well -# for portability. -# -# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS -if [[ "$("${R_INSTALL_PATH}/bin/R" CMD config BLAS_LIBS)" == "-lflexiblas" ]]; then - blas_lib='flexiblas-devel' +blas_lib='flexiblas-devel' - # Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. - cat <> /after-remove.sh - if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} - fi -EOF - - scripts="scripts: - postremove: /after-remove.sh -" -else - blas_lib='openblas-devel' - - # Create post-install script required for OpenBLAS. - cat <> /post-install.sh - mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep - ln -s /usr/lib64/libopenblasp.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so -EOF - - # Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. - cat <> /after-remove.sh - if [ -d ${R_INSTALL_PATH} ]; then - rm -r ${R_INSTALL_PATH} - fi -EOF - - scripts="scripts: - postinstall: /post-install.sh - postremove: /after-remove.sh -" +# Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. +cat <> /after-remove.sh +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} fi +EOF + +scripts="scripts: + postremove: /after-remove.sh +" if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch From f8c67002cb931795cf28869f58da541b61f091d4 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 16:13:43 -0400 Subject: [PATCH 071/105] Provide details on blas --- test/test-r.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test-r.sh b/test/test-r.sh index bd376dd..8e2e0df 100755 --- a/test/test-r.sh +++ b/test/test-r.sh @@ -14,5 +14,8 @@ $("${R_HOME}/bin/R" CMD config FC) --version # List shared library dependencies (e.g. BLAS/LAPACK) LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libR.so" +LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libRblas.so" + +ls -la "${R_HOME}/lib/" DIR=$SCRIPT_DIR "${R_HOME}/bin/Rscript" "${SCRIPT_DIR}/test.R" From 7b14f23fd98c2d5b2d8018c937bae6b56167f814 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 16:41:10 -0400 Subject: [PATCH 072/105] Use flexiblas --- builder/Dockerfile.fedora-37 | 3 ++- builder/Dockerfile.fedora-38 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/builder/Dockerfile.fedora-37 b/builder/Dockerfile.fedora-37 index 4417665..efd49a1 100644 --- a/builder/Dockerfile.fedora-37 +++ b/builder/Dockerfile.fedora-37 @@ -67,7 +67,8 @@ ENV CONFIGURE_OPTIONS="\ --with-system-valgrind-headers \ --with-tcl-config=/usr/lib64/tclConfig.sh \ --with-tk-config=/usr/lib64/tkConfig.sh \ - --enable-prebuilt-html" + --enable-prebuilt-html \ + --with-blas=flexiblas" # Make sure that patching Java does not break R. # R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which diff --git a/builder/Dockerfile.fedora-38 b/builder/Dockerfile.fedora-38 index ec0b876..336d143 100644 --- a/builder/Dockerfile.fedora-38 +++ b/builder/Dockerfile.fedora-38 @@ -67,7 +67,8 @@ ENV CONFIGURE_OPTIONS="\ --with-system-valgrind-headers \ --with-tcl-config=/usr/lib64/tclConfig.sh \ --with-tk-config=/usr/lib64/tkConfig.sh \ - --enable-prebuilt-html" + --enable-prebuilt-html \ + --with-blas=flexiblas" # Make sure that patching Java does not break R. # R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which From 85bff410429c484b69a5fc9dfa9184defc577e61 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 17:06:41 -0400 Subject: [PATCH 073/105] Revert --- test/test-r.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/test-r.sh b/test/test-r.sh index 8e2e0df..bd376dd 100755 --- a/test/test-r.sh +++ b/test/test-r.sh @@ -14,8 +14,5 @@ $("${R_HOME}/bin/R" CMD config FC) --version # List shared library dependencies (e.g. BLAS/LAPACK) LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libR.so" -LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${R_HOME}/lib ldd "${R_HOME}/lib/libRblas.so" - -ls -la "${R_HOME}/lib/" DIR=$SCRIPT_DIR "${R_HOME}/bin/Rscript" "${SCRIPT_DIR}/test.R" From 90001f001b2a2afe4055f1f4239f5a2e67e25dd1 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 17:06:51 -0400 Subject: [PATCH 074/105] Fix to handle Fedora --- install.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/install.sh b/install.sh index b46c812..4b9a51f 100755 --- a/install.sh +++ b/install.sh @@ -52,9 +52,14 @@ detect_os () { then distro="LEAP12" fi - if [[ -f /etc/centos-release || -f /etc/redhat-release ]] + if [[ -f /etc/centos-release || -f /etc/redhat-release || -f /etc/fedora-release ]] then - distro="RedHat" + if [[ -f /etc/fedora-release ]] + then + distro="Fedora" + else + distro="RedHat" + fi fi if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:suse:sles:12 ]] then @@ -94,11 +99,11 @@ detect_os () { # Returns the OS version detect_os_version () { os=$1 - if [[ "${os}" =~ ^(RedHat|Alma|Rocky)$ ]]; then + if [[ "${os}" =~ ^(RedHat|Alma|Rocky|Fedora)$ ]]; then # Get the major version. /etc/redhat-release is used if /etc/os-release isn't available, # e.g., on CentOS/RHEL 6. if [[ -f /etc/os-release ]]; then - cat /etc/os-release | grep VERSION_ID= | sed -E 's/VERSION_ID="([0-9.]*)"/\1/' | cut -d '.' -f 1 + cat /etc/os-release | grep VERSION_ID= | sed -E 's/VERSION_ID="?([0-9.]*)"?/\1/' | cut -d '.' -f 1 elif [[ -f /etc/redhat-release ]]; then cat /etc/redhat-release | sed -E 's/[^0-9]+([0-9.]+)[^0-9]*/\1/' | cut -d '.' -f 1 fi @@ -119,7 +124,7 @@ detect_os_version () { detect_installer_type () { os=$1 case $os in - "RedHat" | "CentOS" | "LEAP12" | "LEAP15" | "SLES12" | "SLES15" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "LEAP12" | "LEAP15" | "SLES12" | "SLES15" | "Amazon" | "Alma" | "Rocky") echo "rpm" ;; "Ubuntu" | "Debian") @@ -160,7 +165,7 @@ download_name () { ;; esac case $os in - "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky") echo "R-${version}-1-1.${rpm_arch}.rpm" ;; "Ubuntu" | "Debian") @@ -185,6 +190,9 @@ download_url () { else case $os in + "Fedora") + echo "${CDN_URL}/fedora-${ver}/pkgs/${name}" + ;; "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") if [ "${ver}" -ge 9 ]; then echo "${CDN_URL}/rhel-${ver}/pkgs/${name}" @@ -304,7 +312,7 @@ install_rpm () { yes="-y" fi case $os in - "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky") if ! has_sudo "yum"; then echo "Must have sudo privileges to run yum" exit 1 @@ -333,6 +341,8 @@ install_pre () { ver=$2 case $os in + "Fedora") + ;; "RedHat" | "CentOS" | "Alma" | "Rocky") install_epel "${os}" "${ver}" ;; From 093675c29a8312a4ea6b9661a69d061657db2313 Mon Sep 17 00:00:00 2001 From: Colin Rundel Date: Wed, 2 Aug 2023 17:37:47 -0400 Subject: [PATCH 075/105] Add lapack flag --- builder/Dockerfile.fedora-37 | 3 ++- builder/Dockerfile.fedora-38 | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/builder/Dockerfile.fedora-37 b/builder/Dockerfile.fedora-37 index efd49a1..ed865c4 100644 --- a/builder/Dockerfile.fedora-37 +++ b/builder/Dockerfile.fedora-37 @@ -68,7 +68,8 @@ ENV CONFIGURE_OPTIONS="\ --with-tcl-config=/usr/lib64/tclConfig.sh \ --with-tk-config=/usr/lib64/tkConfig.sh \ --enable-prebuilt-html \ - --with-blas=flexiblas" + --with-blas=flexiblas \ + --with-lapack=flexiblas" # Make sure that patching Java does not break R. # R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which diff --git a/builder/Dockerfile.fedora-38 b/builder/Dockerfile.fedora-38 index 336d143..a5540dc 100644 --- a/builder/Dockerfile.fedora-38 +++ b/builder/Dockerfile.fedora-38 @@ -68,7 +68,8 @@ ENV CONFIGURE_OPTIONS="\ --with-tcl-config=/usr/lib64/tclConfig.sh \ --with-tk-config=/usr/lib64/tkConfig.sh \ --enable-prebuilt-html \ - --with-blas=flexiblas" + --with-blas=flexiblas \ + --with-lapack=flexiblas" # Make sure that patching Java does not break R. # R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which From db1f2a22c7f0873aa12a274b8ee6ffe6d2d4c666 Mon Sep 17 00:00:00 2001 From: Toni Noble Date: Thu, 3 Aug 2023 16:15:18 -0400 Subject: [PATCH 076/105] add support for sles15sp5 --- Makefile | 2 +- builder/Dockerfile.opensuse-155 | 103 ++++++++++++++++++++++++++++++++ builder/docker-compose.yml | 14 ++++- serverless-resources.yml | 14 +++++ serverless.yml | 4 +- test/docker-compose.yml | 8 +++ 6 files changed, 142 insertions(+), 3 deletions(-) create mode 100644 builder/Dockerfile.opensuse-155 diff --git a/Makefile b/Makefile index 4c9daf8..1f4f6ab 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 fedora-37 fedora-38 +PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 opensuse-155 fedora-37 fedora-38 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/builder/Dockerfile.opensuse-155 b/builder/Dockerfile.opensuse-155 new file mode 100644 index 0000000..34c55f1 --- /dev/null +++ b/builder/Dockerfile.opensuse-155 @@ -0,0 +1,103 @@ +FROM opensuse/leap:15.5 + +ENV OS_IDENTIFIER opensuse-155 + +# Most of these packages, and also the configure options that follow were determined +# by reviewing "R-base.spec" from the following OpenSUSE RPM: +# https://download.opensuse.org/repositories/devel:/languages:/R:/released/openSUSE_Leap_42.3/src/R-base-3.5.3-103.1.src.rpm + +RUN zypper --non-interactive update +RUN zypper --non-interactive --gpg-auto-import-keys -n install \ + bzip2 \ + cairo-devel \ + curl \ + fdupes \ + gcc \ + gcc-c++ \ + gcc-fortran \ + glib2-devel \ + glibc-locale \ + help2man \ + # Like openSUSE/SLES 15.4, SUSE 15.5 ships with both ICU 65 (libicu-devel) and + # ICU 69 (icu.691-devel). Prefer ICU 69 because the devel packages can't coexist, and + # zypper resolves libicu-devel to icu.691-devel when installing RPMs. + icu.691-devel \ + java-11-openjdk-devel \ + libX11-devel \ + libXScrnSaver-devel \ + libXmu-devel \ + libXt-devel \ + libbz2-devel \ + libcurl-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + make \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + perl \ + perl-macros \ + readline-devel \ + rpm-build \ + shadow \ + tcl-devel \ + texinfo \ + texlive-ae \ + texlive-bibtex \ + texlive-cm-super \ + texlive-dvips \ + texlive-fancyvrb \ + texlive-helvetic \ + texlive-inconsolata \ + texlive-latex \ + texlive-makeindex \ + texlive-metafont \ + texlive-psnfss \ + texlive-tex \ + texlive-times \ + tk-devel \ + unzip \ + wget \ + xdg-utils \ + xorg-x11-devel \ + xz-devel \ + zip \ + zlib-devel \ + && zypper clean + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + zypper --non-interactive --no-gpg-checks install "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" + +RUN chmod 0777 /opt + +# Configure flags for SUSE that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --with-x \ + --enable-memory-profiling \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh" + +# Make sure that patching Java does not break R. +# On SUSE, the default JAVA_HOME path always uses the major Java version only, +# but the JDK path is chosen by default. We change this to the JRE path to +# support users who only want to install the JRE (non-devel) package. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.posit.co/envs-pkgs/using-rjava/ +ENV JAVA_HOME=/usr/lib64/jvm/jre-11-openjdk + +COPY package.opensuse-155 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index b8b0407..883422a 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -95,6 +95,18 @@ services: image: r-builds:rhel-9 volumes: - ./integration/tmp:/tmp/output + opensuse-155: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.opensuse-155 + image: r-builds:opensuse-155 + volumes: + - ./integration/tmp:/tmp/output opensuse-154: command: ./build.sh environment: @@ -130,4 +142,4 @@ services: dockerfile: Dockerfile.fedora-38 image: r-builds:fedora-38 volumes: - - ./integration/tmp:/tmp/output \ No newline at end of file + - ./integration/tmp:/tmp/output diff --git a/serverless-resources.yml b/serverless-resources.yml index 9e8f6db..5aa51d0 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -243,6 +243,20 @@ rBuildsBatchJobDefinitionRhel9: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionOpensuse155: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-155" + Timeout: + AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse154: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index f857a4e..c80de50 100644 --- a/serverless.yml +++ b/serverless.yml @@ -61,13 +61,15 @@ provider: Ref: rBuildsBatchJobDefinitionCentos8 JOB_DEFINITION_ARN_rhel_9: Ref: rBuildsBatchJobDefinitionRhel9 + JOB_DEFINITION_ARN_opensuse_155: + Ref: rBuildsBatchJobDefinitionOpensuse155 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 JOB_DEFINITION_ARN_fedora_37: Ref: rBuildsBatchJobDefinitionFedora37 JOB_DEFINITION_ARN_fedora_38: Ref: rBuildsBatchJobDefinitionFedora38 - SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,fedora-37,fedora-38 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,opensuse-155,fedora-37,fedora-38 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 4ba742b..764167f 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -63,6 +63,14 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + opensuse-155: + image: opensuse/leap:15.5 + command: /r-builds/test/test-zypper.sh + environment: + - OS_IDENTIFIER=opensuse-155 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds opensuse-154: image: opensuse/leap:15.4 command: /r-builds/test/test-zypper.sh From 509840ccda9bc014b7c91794162cc95be0180c6a Mon Sep 17 00:00:00 2001 From: Toni Noble Date: Thu, 3 Aug 2023 16:22:21 -0400 Subject: [PATCH 077/105] add sles15sp5 to install script --- install.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/install.sh b/install.sh index 4b9a51f..3fe8440 100755 --- a/install.sh +++ b/install.sh @@ -210,9 +210,11 @@ download_url () { echo "${CDN_URL}/opensuse-42/pkgs/${name}" ;; "LEAP15" | "SLES15") - if [ "${ver}" -ge 154 ]; then + if [ "${ver}" -ge 155 ]; then + echo "${CDN_URL}/opensuse-155/pkgs/${name}" + elif [ "${ver}" -eq 154 ]; then echo "${CDN_URL}/opensuse-154/pkgs/${name}" - elif [ "${ver}" -ge 153 ]; then + elif [ "${ver}" -eq 153 ]; then echo "${CDN_URL}/opensuse-153/pkgs/${name}" elif [ "${ver}" -eq 152 ]; then echo "${CDN_URL}/opensuse-152/pkgs/${name}" From 740c10ca537ded2ef1cd3cfa7fbe2875e06a19c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 16 Aug 2023 12:23:00 +0200 Subject: [PATCH 078/105] Fix Fedora download URLs in README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f43401f..2518c27 100644 --- a/README.md +++ b/README.md @@ -152,10 +152,10 @@ sudo zypper --no-gpg-checks install R-${R_VERSION}-1-1.x86_64.rpm Download the rpm package: ```bash # Fedora 37 -curl -O https://cdn.posit.co/r/fedora-37/pkgs/r-${R_VERSION}_1_amd64.rpm +curl -O https://cdn.posit.co/r/fedora-37/pkgs/R-${R_VERSION}-1-1.x86_64.rpm # Fedora 38 -curl -O https://cdn.posit.co/r/fedora-38/pkgs/r-${R_VERSION}_1_amd64.rpm +curl -O https://cdn.posit.co/r/fedora-38/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: From 101246253acf7ac70aa61849ad717eb15c5beb07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Mon, 14 Aug 2023 18:49:54 +0200 Subject: [PATCH 079/105] Fix R 3.0.0 - R 3.0.3 on arm64 --- builder/build.sh | 4 + builder/patches/R-3.0.0-aarch64.patch | 709 ++++++++++++++++++++++++++ builder/patches/R-3.0.1-aarch64.patch | 709 ++++++++++++++++++++++++++ builder/patches/R-3.0.2-aarch64.patch | 709 ++++++++++++++++++++++++++ builder/patches/R-3.0.3-aarch64.patch | 709 ++++++++++++++++++++++++++ builder/patches/README.md | 4 + 6 files changed, 2844 insertions(+) create mode 100644 builder/patches/R-3.0.0-aarch64.patch create mode 100644 builder/patches/R-3.0.1-aarch64.patch create mode 100644 builder/patches/R-3.0.2-aarch64.patch create mode 100644 builder/patches/R-3.0.3-aarch64.patch diff --git a/builder/build.sh b/builder/build.sh index ae3dcda..48b4129 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -75,6 +75,10 @@ patch_r() { if [ -f "/patches/R-${1}-${OS_IDENTIFIER}.patch" ]; then patch -p1 < "/patches/R-${1}-${OS_IDENTIFIER}.patch" fi + + if [ -f "/patches/R-${1}-`arch`.patch" ]; then + patch -p1 < "/patches/R-${1}-`arch`.patch" + fi } # compile_r() - $1 as r version diff --git a/builder/patches/R-3.0.0-aarch64.patch b/builder/patches/R-3.0.0-aarch64.patch new file mode 100644 index 0000000..aa896ad --- /dev/null +++ b/builder/patches/R-3.0.0-aarch64.patch @@ -0,0 +1,709 @@ +diff --git a/configure b/configure +index b3c299e..01f205d 100755 +--- a/configure ++++ b/configure +@@ -5193,6 +5193,7 @@ elif test ${makeinfo_version_maj} -lt 4 \ + else + r_cv_prog_makeinfo_v4=yes + fi ++r_cv_prog_makeinfo_v4=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $r_cv_prog_makeinfo_v4" >&5 + $as_echo "$r_cv_prog_makeinfo_v4" >&6; } +diff --git a/src/extra/tre/regcomp.c b/src/extra/tre/regcomp.c +index 93ddb92..31d4e52 100644 +--- a/src/extra/tre/regcomp.c ++++ b/src/extra/tre/regcomp.c +@@ -99,7 +99,6 @@ tre_regncomp(regex_t *preg, const char *regex, size_t n, int cflags) + return ret; + } + +- + /* this version takes bytes literally, to be used with raw vectors */ + int + tre_regncompb(regex_t *preg, const char *regex, size_t n, int cflags) +@@ -131,7 +130,6 @@ tre_regcomp(regex_t *preg, const char *regex, int cflags) + return tre_regncomp(preg, regex, regex ? strlen(regex) : 0, cflags); + } + +-/* R addition */ + int + tre_regcompb(regex_t *preg, const char *regex, int cflags) + { +diff --git a/src/extra/tre/regexec.c b/src/extra/tre/regexec.c +index 6edaf81..d8f91a3 100644 +--- a/src/extra/tre/regexec.c ++++ b/src/extra/tre/regexec.c +@@ -217,7 +217,6 @@ tre_regexec(const regex_t *preg, const char *str, + return tre_regnexec(preg, str, (unsigned)-1, nmatch, pmatch, eflags); + } + +-/* R addition */ + int + tre_regexecb(const regex_t *preg, const char *str, + size_t nmatch, regmatch_t pmatch[], int eflags) +@@ -329,7 +328,6 @@ tre_regaexec(const regex_t *preg, const char *str, + return tre_reganexec(preg, str, (unsigned)-1, match, params, eflags); + } + +-/* R addition */ + int + tre_regaexecb(const regex_t *preg, const char *str, + regamatch_t *match, regaparams_t params, int eflags) +diff --git a/src/extra/tre/tre-ast.h b/src/extra/tre/tre-ast.h +index 844aee3..d9af376 100644 +--- a/src/extra/tre/tre-ast.h ++++ b/src/extra/tre/tre-ast.h +@@ -55,16 +55,11 @@ typedef struct { + tags, matching parameter settings, and all expressions that match one + character. */ + typedef struct { +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else +- int /* long */ code_min; +- int /* long */ code_max; +-#endif ++ long code_min; ++ long code_max; + int position; + union { +- tre_ctype_t classt; /* [i_a] wrong syntax colouring prevention */ ++ tre_ctype_t class; + int *params; + } u; + tre_ctype_t *neg_classes; +diff --git a/src/extra/tre/tre-compile.c b/src/extra/tre/tre-compile.c +index 7886455..92c14ab 100644 +--- a/src/extra/tre/tre-compile.c ++++ b/src/extra/tre/tre-compile.c +@@ -6,6 +6,13 @@ + + */ + ++/* ++ TODO: ++ - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive ++ function calls. ++*/ ++ ++ + #ifdef HAVE_CONFIG_H + #include + #endif /* HAVE_CONFIG_H */ +@@ -684,8 +691,8 @@ tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + { + tre_literal_t *lit = node->obj; + int pos = lit->position; +- int min = lit->code_min; +- int max = lit->code_max; ++ int min = (int)lit->code_min; ++ int max = (int)lit->code_max; + if (!IS_SPECIAL(lit) || IS_BACKREF(lit)) + { + /* XXX - e.g. [ab] has only one position but two +@@ -945,7 +952,7 @@ tre_expand_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + seq2 = copy; + if (seq2 == NULL) + return REG_ESPACE; +- tmp = tre_ast_new_literal(mem, EMPTY, EMPTY, -1); ++ tmp = tre_ast_new_literal(mem, EMPTY, -1, -1); + if (tmp == NULL) + return REG_ESPACE; + seq2 = tre_ast_new_union(mem, tmp, seq2); +@@ -1052,15 +1059,15 @@ tre_set_empty(tre_mem_t mem) + return NULL; + + new_set[0].position = -1; +- new_set[0].code_min = EMPTY; +- new_set[0].code_max = EMPTY; ++ new_set[0].code_min = -1; ++ new_set[0].code_max = -1; + + return new_set; + } + + static tre_pos_and_tags_t * + tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, +- tre_ctype_t classt, tre_ctype_t *neg_classes, int backref) ++ tre_ctype_t class, tre_ctype_t *neg_classes, int backref) + { + tre_pos_and_tags_t *new_set; + +@@ -1071,12 +1078,12 @@ tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, + new_set[0].position = position; + new_set[0].code_min = code_min; + new_set[0].code_max = code_max; +- new_set[0].classt = classt; ++ new_set[0].class = class; + new_set[0].neg_classes = neg_classes; + new_set[0].backref = backref; + new_set[1].position = -1; +- new_set[1].code_min = EMPTY; +- new_set[1].code_max = EMPTY; ++ new_set[1].code_min = -1; ++ new_set[1].code_max = -1; + + return new_set; + } +@@ -1103,7 +1110,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1].code_min = set1[s1].code_min; + new_set[s1].code_max = set1[s1].code_max; + new_set[s1].assertions = set1[s1].assertions | assertions; +- new_set[s1].classt = set1[s1].classt; ++ new_set[s1].class = set1[s1].class; + new_set[s1].neg_classes = set1[s1].neg_classes; + new_set[s1].backref = set1[s1].backref; + if (set1[s1].tags == NULL && tags == NULL) +@@ -1148,7 +1155,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1 + s2].code_max = set2[s2].code_max; + /* XXX - why not | assertions here as well? */ + new_set[s1 + s2].assertions = set2[s2].assertions; +- new_set[s1 + s2].classt = set2[s2].classt; ++ new_set[s1 + s2].class = set2[s2].class; + new_set[s1 + s2].neg_classes = set2[s2].neg_classes; + new_set[s1 + s2].backref = set2[s2].backref; + if (set2[s2].tags == NULL) +@@ -1231,7 +1238,7 @@ tre_match_empty(tre_stack_t *stack, tre_ast_node_t *node, int *tags, + break; + if (tags[i] < 0) + { +- tags[i] = lit->code_max; ++ tags[i] = (int)lit->code_max; + tags[i + 1] = -1; + } + } +@@ -1373,7 +1380,7 @@ tre_compute_nfl(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree) + node->lastpos = tre_set_one(mem, lit->position, + (int)lit->code_min, + (int)lit->code_max, +- lit->u.classt, lit->neg_classes, ++ lit->u.class, lit->neg_classes, + -1); + if (!node->lastpos) + return REG_ESPACE; +@@ -1614,12 +1621,12 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + (trans + 1)->state = NULL; + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ +- trans->code_min = p1->code_min; +- trans->code_max = p1->code_max; ++ trans->code_min = (tre_cint_t) p1->code_min; ++ trans->code_max = (tre_cint_t) p1->code_max; + trans->state = transitions + offs[p2->position]; + trans->state_id = p2->position; + trans->assertions = p1->assertions | p2->assertions +- | (p1->classt ? ASSERT_CHAR_CLASS : 0) ++ | (p1->class ? ASSERT_CHAR_CLASS : 0) + | (p1->neg_classes != NULL ? ASSERT_CHAR_CLASS_NEG : 0); + if (p1->backref >= 0) + { +@@ -1629,7 +1636,7 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + trans->assertions |= ASSERT_BACKREF; + } + else +- trans->u.classt = p1->classt; ++ trans->u.class = p1->class; + if (p1->neg_classes != NULL) + { + for (i = 0; p1->neg_classes[i] != (tre_ctype_t)0; i++); +@@ -1743,8 +1750,8 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + DPRINT((", assert %d", trans->assertions)); + if (trans->assertions & ASSERT_BACKREF) + DPRINT((", backref %d", trans->u.backref)); +- else if (trans->u.classt) +- DPRINT((", class %ld", (long)trans->u.classt)); ++ else if (trans->u.class) ++ DPRINT((", class %ld", (long)trans->u.class)); + if (trans->neg_classes) + DPRINT((", neg_classes %p", trans->neg_classes)); + if (trans->params) +@@ -1861,10 +1868,10 @@ tre_ast_to_tnfa(tre_ast_node_t *node, tre_tnfa_transition_t *transitions, + do \ + { \ + errcode = err; \ +- if (/*CONSTCOND*/1) \ ++ if (/*CONSTCOND*/(void)1,1) \ + goto error_exit; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + + int +@@ -2050,7 +2057,7 @@ tre_compile(regex_t *preg, const tre_char_t *regex, size_t n, int cflags) + if (TRE_MB_CUR_MAX == 1 && !tmp_ast_l->nullable) + { + int count = 0; +- int k; /* [i_a] */ ++ tre_cint_t k; + DPRINT(("Characters that can start a match:")); + tnfa->firstpos_chars = xcalloc(256, sizeof(char)); + if (tnfa->firstpos_chars == NULL) +@@ -2310,15 +2317,7 @@ tre_config(int query, void *result) + case TRE_CONFIG_VERSION: + *string_result = TRE_VERSION; + return REG_OK; +- +- case TRE_MB_CUR_MAX_VALUE: /* [i_a] */ +-#if defined(TRE_MB_CUR_MAX) +- *int_result = TRE_MB_CUR_MAX; +-#else +- *int_result = 1; +-#endif +- break; +- } ++ } + + return REG_NOMATCH; + } +diff --git a/src/extra/tre/tre-compile.h b/src/extra/tre/tre-compile.h +index 0d81cf2..51d5ac9 100644 +--- a/src/extra/tre/tre-compile.h ++++ b/src/extra/tre/tre-compile.h +@@ -12,16 +12,11 @@ + + typedef struct { + int position; +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else + int code_min; + int code_max; +-#endif + int *tags; + int assertions; +- tre_ctype_t classt; ++ tre_ctype_t class; + tre_ctype_t *neg_classes; + int backref; + int *params; +diff --git a/src/extra/tre/tre-internal.h b/src/extra/tre/tre-internal.h +index c1300ac..822998e 100644 +--- a/src/extra/tre/tre-internal.h ++++ b/src/extra/tre/tre-internal.h +@@ -22,9 +22,9 @@ + + #ifdef TRE_DEBUG + #include +-#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/0) ++#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/(void)0,0) + #else /* !TRE_DEBUG */ +-#define DPRINT(msg) do { } while(/*CONSTCOND*/0) ++#define DPRINT(msg) do { } while(/*CONSTCOND*/(void)0,0) + #endif /* !TRE_DEBUG */ + + #define elementsof(x) ( sizeof(x) / sizeof(x[0]) ) +@@ -151,13 +151,8 @@ typedef struct tnfa_transition tre_tnfa_transition_t; + + struct tnfa_transition { + /* Range of accepted characters. */ +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ + tre_cint_t code_min; + tre_cint_t code_max; +-#else +- int code_min; +- int code_max; +-#endif + /* Pointer to the destination state. */ + tre_tnfa_transition_t *state; + /* ID number of the destination state. */ +@@ -171,7 +166,7 @@ struct tnfa_transition { + /* Assertion parameters. */ + union { + /* Character class assertion. */ +- tre_ctype_t classt; ++ tre_ctype_t class; + /* Back reference assertion. */ + int backref; + } u; +diff --git a/src/extra/tre/tre-match-approx.c b/src/extra/tre/tre-match-approx.c +index 6011114..f08cd0f 100644 +--- a/src/extra/tre/tre-match-approx.c ++++ b/src/extra/tre/tre-match-approx.c +@@ -328,7 +328,7 @@ tre_tnfa_run_approx(const tre_tnfa_t *tnfa, const void *string, int len, + GET_NEXT_WCHAR(); + pos = 0; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + DPRINT(("%03d:%2lc/%05d\n", pos, (tre_cint_t)next_c, (int)next_c)); + +diff --git a/src/extra/tre/tre-match-backtrack.c b/src/extra/tre/tre-match-backtrack.c +index 9630e81..9dd7e94 100644 +--- a/src/extra/tre/tre-match-backtrack.c ++++ b/src/extra/tre/tre-match-backtrack.c +@@ -116,7 +116,7 @@ typedef struct tre_backtrack_struct { + #ifdef TRE_USE_ALLOCA + #define tre_bt_mem_new tre_mem_newa + #define tre_bt_mem_alloc tre_mem_alloca +-#define tre_bt_mem_destroy(obj) do { } while (0) ++#define tre_bt_mem_destroy(obj) do { } while (0,0) + #else /* !TRE_USE_ALLOCA */ + #define tre_bt_mem_new tre_mem_new + #define tre_bt_mem_alloc tre_mem_alloc +@@ -173,7 +173,7 @@ typedef struct tre_backtrack_struct { + stack->item.tags[i] = (_tags)[i]; \ + BT_STACK_MBSTATE_IN; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define BT_STACK_POP() \ + do \ +@@ -186,13 +186,13 @@ typedef struct tre_backtrack_struct { + str_byte = stack->item.str_byte; \ + BT_STACK_WIDE_OUT; \ + state = stack->item.state; \ +- next_c = (tre_char_t)stack->item.next_c; \ ++ next_c = (tre_char_t) stack->item.next_c; \ + for (i = 0; i < tnfa->num_tags; i++) \ + tags[i] = stack->item.tags[i]; \ + BT_STACK_MBSTATE_OUT; \ + stack = stack->prev; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #undef MIN + #define MIN(a, b) ((a) <= (b) ? (a) : (b)) +@@ -372,7 +372,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + if (state == NULL) + goto backtrack; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + tre_tnfa_transition_t *next_state; + int empty_br_match; +@@ -632,7 +632,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + } + } + DPRINT(("restarting from next start position\n")); +- next_c = (tre_char_t)next_c_start; ++ next_c = (tre_char_t) next_c_start; + #ifdef TRE_MBSTATE + mbstate = mbstate_start; + #endif /* TRE_MBSTATE */ +diff --git a/src/extra/tre/tre-match-parallel.c b/src/extra/tre/tre-match-parallel.c +index ddb9fda..6696d11 100644 +--- a/src/extra/tre/tre-match-parallel.c ++++ b/src/extra/tre/tre-match-parallel.c +@@ -269,7 +269,7 @@ tre_tnfa_run_parallel(const tre_tnfa_t *tnfa, const void *string, int len, + DPRINT(("-------------+------------------------------------------------\n")); + + reach_next_i = reach_next; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + /* If no match found yet, add the initial states to `reach_next'. */ + if (match_eo < 0) +diff --git a/src/extra/tre/tre-match-utils.h b/src/extra/tre/tre-match-utils.h +index 7d19c21..d0a4214 100644 +--- a/src/extra/tre/tre-match-utils.h ++++ b/src/extra/tre/tre-match-utils.h +@@ -76,7 +76,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #else /* !TRE_MULTIBYTE */ + +@@ -107,7 +107,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_MULTIBYTE */ + +@@ -132,7 +132,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_WCHAR */ + +@@ -161,11 +161,11 @@ + #define CHECK_CHAR_CLASSES(trans_i, tnfa, eflags) \ + (((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && !(tnfa->cflags & REG_ICASE) \ +- && !tre_isctype((tre_cint_t)prev_c, trans_i->u.classt)) \ ++ && !tre_isctype((tre_cint_t)prev_c, trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && (tnfa->cflags & REG_ICASE) \ +- && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.classt) \ +- && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.classt)) \ ++ && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.class) \ ++ && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS_NEG) \ + && tre_neg_char_classes_match(trans_i->neg_classes,(tre_cint_t)prev_c,\ + tnfa->cflags & REG_ICASE))) +diff --git a/src/extra/tre/tre-mem.c b/src/extra/tre/tre-mem.c +index 51b630c..67ba676 100644 +--- a/src/extra/tre/tre-mem.c ++++ b/src/extra/tre/tre-mem.c +@@ -111,8 +111,8 @@ tre_mem_alloc_impl(tre_mem_t mem, int provided, void *provided_block, + block_size = size * 8; + else + block_size = TRE_MEM_BLOCK_SIZE; +- DPRINT(("tre_mem_alloc: allocating new %u byte block\n", +- (unsigned int)block_size)); ++ DPRINT(("tre_mem_alloc: allocating new %lu byte block\n", ++ (unsigned long)block_size)); + l = xmalloc(sizeof(*l)); + if (l == NULL) + { +diff --git a/src/extra/tre/tre-parse.c b/src/extra/tre/tre-parse.c +index 50d0438..86ccad6 100644 +--- a/src/extra/tre/tre-parse.c ++++ b/src/extra/tre/tre-parse.c +@@ -123,23 +123,22 @@ tre_new_item(tre_mem_t mem, int min, int max, int *i, int *max_i, + + /* Expands a character class to character ranges. */ + static reg_errcode_t +-tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, ++tre_expand_ctype(tre_mem_t mem, tre_ctype_t class, tre_ast_node_t ***items, + int *i, int *max_i, int cflags) + { + reg_errcode_t status = REG_OK; + tre_cint_t c; +- tre_cint_t j; +- int min = EMPTY, max = 0; ++ int j, min = -1, max = 0; + //assert(TRE_MB_CUR_MAX == 1); It is the ctx->cur_max that matters + + DPRINT((" expanding class to character ranges\n")); + for (j = 0; (j < 256) && (status == REG_OK); j++) + { +- c = j; +- if (tre_isctype(c, classt) ++ c = (tre_cint_t) j; ++ if (tre_isctype(c, class) + || ((cflags & REG_ICASE) +- && (tre_isctype(tre_tolower(c), classt) +- || tre_isctype(tre_toupper(c), classt)))) ++ && (tre_isctype(tre_tolower(c), class) ++ || tre_isctype(tre_toupper(c), class)))) + { + if (min < 0) + min = c; +@@ -149,7 +148,7 @@ tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, + { + DPRINT((" range %c (%d) to %c (%d)\n", min, min, max, max)); + status = tre_new_item(mem, min, max, i, max_i, items); +- min = EMPTY; ++ min = -1; + } + } + if (min >= 0 && status == REG_OK) +@@ -164,7 +163,7 @@ tre_compare_items(const void *a, const void *b) + const tre_ast_node_t *node_a = *(tre_ast_node_t * const *)a; + const tre_ast_node_t *node_b = *(tre_ast_node_t * const *)b; + tre_literal_t *l_a = node_a->obj, *l_b = node_b->obj; +- int a_min = l_a->code_min, b_min = l_b->code_min; ++ long a_min = l_a->code_min, b_min = l_b->code_min; + + if (a_min < b_min) + return -1; +@@ -255,7 +254,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + const tre_char_t *re = ctx->re; + reg_errcode_t status = REG_OK; +- tre_ctype_t classt = (tre_ctype_t)0; ++ tre_ctype_t class = (tre_ctype_t)0; + int i = *num_items; + int max_i = *items_size; + int skip; +@@ -278,7 +277,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + tre_cint_t min = 0, max = 0; + +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + if (re + 2 < ctx->re_end + && *(re + 1) == CHAR_MINUS && *(re + 2) != CHAR_RBRACKET) + { +@@ -330,15 +329,15 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + #endif /* !TRE_WCHAR */ + tmp_str[len] = '\0'; + DPRINT((" class name: %s\n", tmp_str)); +- classt = tre_ctype(tmp_str); +- if (!classt) ++ class = tre_ctype(tmp_str); ++ if (!class) + status = REG_ECTYPE; + /* Optimize character classes for 8 bit character sets. */ + if (status == REG_OK && ctx->cur_max == 1) + { +- status = tre_expand_ctype(ctx->mem, classt, items, ++ status = tre_expand_ctype(ctx->mem, class, items, + &i, &max_i, ctx->cflags); +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + skip = 1; + } + re = endptr + 2; +@@ -361,22 +360,22 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + if (status != REG_OK) + break; + +- if (classt && negate) ++ if (class && negate) + if (*num_neg_classes >= MAX_NEG_CLASSES) + status = REG_ESPACE; + else +- neg_classes[(*num_neg_classes)++] = classt; ++ neg_classes[(*num_neg_classes)++] = class; + else if (!skip) + { + status = tre_new_item(ctx->mem, min, max, &i, &max_i, items); + if (status != REG_OK) + break; +- ((tre_literal_t*)((*items)[i-1])->obj)->u.classt = classt; ++ ((tre_literal_t*)((*items)[i-1])->obj)->u.class = class; + } + + /* Add opposite-case counterpoints if REG_ICASE is present. + This is broken if there are more than two "same" characters. */ +- if (ctx->cflags & REG_ICASE && !classt && status == REG_OK && !skip) ++ if (ctx->cflags & REG_ICASE && !class && status == REG_OK && !skip) + { + tre_cint_t cmin, ccurr; + +@@ -455,11 +454,11 @@ tre_parse_bracket(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + { + int min, max; + tre_literal_t *l = items[j]->obj; +- min = l->code_min; +- max = l->code_max; ++ min = (int) l->code_min; ++ max = (int) l->code_max; + + DPRINT(("item: %d - %d, class %p, curr_max = %d\n", +- (int)l->code_min, (int)l->code_max, (void *)l->u.classt, curr_max)); ++ (int)l->code_min, (int)l->code_max, (void *)l->u.class, curr_max)); + + if (negate) + { +@@ -831,7 +830,7 @@ tre_parse_bound(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + /* Create the AST node(s). */ + if (min == 0 && max == 0) + { +- *result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ *result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (*result == NULL) + return REG_ESPACE; + } +@@ -1212,7 +1211,7 @@ tre_parse(tre_parse_ctx_t *ctx) + DPRINT(("tre_parse: extension: '%.*" STRF "\n", + REST(ctx->re))); + ctx->re += 2; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + if (*ctx->re == L'i') + { +@@ -1352,7 +1351,7 @@ tre_parse(tre_parse_ctx_t *ctx) + subexpression was closed. POSIX leaves the meaning of + this to be implementation-defined. We interpret this as + an empty expression (which matches an empty string). */ +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (result == NULL) + return REG_ESPACE; + if (!(ctx->cflags & REG_EXTENDED)) +@@ -1645,7 +1644,7 @@ tre_parse(tre_parse_ctx_t *ctx) + { + DPRINT(("tre_parse: empty: '%.*" STRF "'\n", + REST(ctx->re))); +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (!result) + return REG_ESPACE; + break; +@@ -1715,7 +1714,7 @@ tre_parse(tre_parse_ctx_t *ctx) + if (result->submatch_id >= 0) + { + tre_ast_node_t *n, *tmp_node; +- n = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ n = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (n == NULL) + return REG_ESPACE; + tmp_node = tre_ast_new_catenation(ctx->mem, n, result); +diff --git a/src/extra/tre/tre-stack.h b/src/extra/tre/tre-stack.h +index 7d11c5e..a1acbe7 100644 +--- a/src/extra/tre/tre-stack.h ++++ b/src/extra/tre/tre-stack.h +@@ -54,7 +54,7 @@ declare_popf(int, int); + { \ + status = tre_stack_push_ ## typetag(s, value); \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define STACK_PUSHX(s, typetag, value) \ + { \ +diff --git a/src/extra/tre/tre.h b/src/extra/tre/tre.h +index 9d7d3a7..128475d 100644 +--- a/src/extra/tre/tre.h ++++ b/src/extra/tre/tre.h +@@ -137,14 +137,6 @@ extern int + tre_regexec(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + +-extern size_t +-tre_regerror(int errcode, const regex_t *preg, char *errbuf, +- size_t errbuf_size); +- +-extern void +-tre_regfree(regex_t *preg); +- +-/* R additions */ + extern int + tre_regcompb(regex_t *preg, const char *regex, int cflags); + +@@ -152,6 +144,13 @@ extern int + tre_regexecb(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + ++extern size_t ++tre_regerror(int errcode, const regex_t *preg, char *errbuf, ++ size_t errbuf_size); ++ ++extern void ++tre_regfree(regex_t *preg); ++ + #ifdef TRE_WCHAR + #ifdef HAVE_WCHAR_H + #include +@@ -223,7 +222,10 @@ extern int + tre_regaexec(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); + +-/* R addition */ ++extern int ++tre_reganexec(const regex_t *preg, const char *string, size_t len, ++ regamatch_t *match, regaparams_t params, int eflags); ++ + extern int + tre_regaexecb(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); +@@ -279,8 +281,7 @@ enum { + TRE_CONFIG_WCHAR, + TRE_CONFIG_MULTIBYTE, + TRE_CONFIG_SYSTEM_ABI, +- TRE_CONFIG_VERSION, +- TRE_MB_CUR_MAX_VALUE /* [i_a] - derived from MULTIBYTE and WCHAR, but still handy to have: no need to copy logic in TRE header files, etc. in order to know this */ ++ TRE_CONFIG_VERSION + }; + + /* Returns 1 if the compiled pattern has back references, 0 if not. */ diff --git a/builder/patches/R-3.0.1-aarch64.patch b/builder/patches/R-3.0.1-aarch64.patch new file mode 100644 index 0000000..aa896ad --- /dev/null +++ b/builder/patches/R-3.0.1-aarch64.patch @@ -0,0 +1,709 @@ +diff --git a/configure b/configure +index b3c299e..01f205d 100755 +--- a/configure ++++ b/configure +@@ -5193,6 +5193,7 @@ elif test ${makeinfo_version_maj} -lt 4 \ + else + r_cv_prog_makeinfo_v4=yes + fi ++r_cv_prog_makeinfo_v4=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $r_cv_prog_makeinfo_v4" >&5 + $as_echo "$r_cv_prog_makeinfo_v4" >&6; } +diff --git a/src/extra/tre/regcomp.c b/src/extra/tre/regcomp.c +index 93ddb92..31d4e52 100644 +--- a/src/extra/tre/regcomp.c ++++ b/src/extra/tre/regcomp.c +@@ -99,7 +99,6 @@ tre_regncomp(regex_t *preg, const char *regex, size_t n, int cflags) + return ret; + } + +- + /* this version takes bytes literally, to be used with raw vectors */ + int + tre_regncompb(regex_t *preg, const char *regex, size_t n, int cflags) +@@ -131,7 +130,6 @@ tre_regcomp(regex_t *preg, const char *regex, int cflags) + return tre_regncomp(preg, regex, regex ? strlen(regex) : 0, cflags); + } + +-/* R addition */ + int + tre_regcompb(regex_t *preg, const char *regex, int cflags) + { +diff --git a/src/extra/tre/regexec.c b/src/extra/tre/regexec.c +index 6edaf81..d8f91a3 100644 +--- a/src/extra/tre/regexec.c ++++ b/src/extra/tre/regexec.c +@@ -217,7 +217,6 @@ tre_regexec(const regex_t *preg, const char *str, + return tre_regnexec(preg, str, (unsigned)-1, nmatch, pmatch, eflags); + } + +-/* R addition */ + int + tre_regexecb(const regex_t *preg, const char *str, + size_t nmatch, regmatch_t pmatch[], int eflags) +@@ -329,7 +328,6 @@ tre_regaexec(const regex_t *preg, const char *str, + return tre_reganexec(preg, str, (unsigned)-1, match, params, eflags); + } + +-/* R addition */ + int + tre_regaexecb(const regex_t *preg, const char *str, + regamatch_t *match, regaparams_t params, int eflags) +diff --git a/src/extra/tre/tre-ast.h b/src/extra/tre/tre-ast.h +index 844aee3..d9af376 100644 +--- a/src/extra/tre/tre-ast.h ++++ b/src/extra/tre/tre-ast.h +@@ -55,16 +55,11 @@ typedef struct { + tags, matching parameter settings, and all expressions that match one + character. */ + typedef struct { +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else +- int /* long */ code_min; +- int /* long */ code_max; +-#endif ++ long code_min; ++ long code_max; + int position; + union { +- tre_ctype_t classt; /* [i_a] wrong syntax colouring prevention */ ++ tre_ctype_t class; + int *params; + } u; + tre_ctype_t *neg_classes; +diff --git a/src/extra/tre/tre-compile.c b/src/extra/tre/tre-compile.c +index 7886455..92c14ab 100644 +--- a/src/extra/tre/tre-compile.c ++++ b/src/extra/tre/tre-compile.c +@@ -6,6 +6,13 @@ + + */ + ++/* ++ TODO: ++ - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive ++ function calls. ++*/ ++ ++ + #ifdef HAVE_CONFIG_H + #include + #endif /* HAVE_CONFIG_H */ +@@ -684,8 +691,8 @@ tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + { + tre_literal_t *lit = node->obj; + int pos = lit->position; +- int min = lit->code_min; +- int max = lit->code_max; ++ int min = (int)lit->code_min; ++ int max = (int)lit->code_max; + if (!IS_SPECIAL(lit) || IS_BACKREF(lit)) + { + /* XXX - e.g. [ab] has only one position but two +@@ -945,7 +952,7 @@ tre_expand_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + seq2 = copy; + if (seq2 == NULL) + return REG_ESPACE; +- tmp = tre_ast_new_literal(mem, EMPTY, EMPTY, -1); ++ tmp = tre_ast_new_literal(mem, EMPTY, -1, -1); + if (tmp == NULL) + return REG_ESPACE; + seq2 = tre_ast_new_union(mem, tmp, seq2); +@@ -1052,15 +1059,15 @@ tre_set_empty(tre_mem_t mem) + return NULL; + + new_set[0].position = -1; +- new_set[0].code_min = EMPTY; +- new_set[0].code_max = EMPTY; ++ new_set[0].code_min = -1; ++ new_set[0].code_max = -1; + + return new_set; + } + + static tre_pos_and_tags_t * + tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, +- tre_ctype_t classt, tre_ctype_t *neg_classes, int backref) ++ tre_ctype_t class, tre_ctype_t *neg_classes, int backref) + { + tre_pos_and_tags_t *new_set; + +@@ -1071,12 +1078,12 @@ tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, + new_set[0].position = position; + new_set[0].code_min = code_min; + new_set[0].code_max = code_max; +- new_set[0].classt = classt; ++ new_set[0].class = class; + new_set[0].neg_classes = neg_classes; + new_set[0].backref = backref; + new_set[1].position = -1; +- new_set[1].code_min = EMPTY; +- new_set[1].code_max = EMPTY; ++ new_set[1].code_min = -1; ++ new_set[1].code_max = -1; + + return new_set; + } +@@ -1103,7 +1110,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1].code_min = set1[s1].code_min; + new_set[s1].code_max = set1[s1].code_max; + new_set[s1].assertions = set1[s1].assertions | assertions; +- new_set[s1].classt = set1[s1].classt; ++ new_set[s1].class = set1[s1].class; + new_set[s1].neg_classes = set1[s1].neg_classes; + new_set[s1].backref = set1[s1].backref; + if (set1[s1].tags == NULL && tags == NULL) +@@ -1148,7 +1155,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1 + s2].code_max = set2[s2].code_max; + /* XXX - why not | assertions here as well? */ + new_set[s1 + s2].assertions = set2[s2].assertions; +- new_set[s1 + s2].classt = set2[s2].classt; ++ new_set[s1 + s2].class = set2[s2].class; + new_set[s1 + s2].neg_classes = set2[s2].neg_classes; + new_set[s1 + s2].backref = set2[s2].backref; + if (set2[s2].tags == NULL) +@@ -1231,7 +1238,7 @@ tre_match_empty(tre_stack_t *stack, tre_ast_node_t *node, int *tags, + break; + if (tags[i] < 0) + { +- tags[i] = lit->code_max; ++ tags[i] = (int)lit->code_max; + tags[i + 1] = -1; + } + } +@@ -1373,7 +1380,7 @@ tre_compute_nfl(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree) + node->lastpos = tre_set_one(mem, lit->position, + (int)lit->code_min, + (int)lit->code_max, +- lit->u.classt, lit->neg_classes, ++ lit->u.class, lit->neg_classes, + -1); + if (!node->lastpos) + return REG_ESPACE; +@@ -1614,12 +1621,12 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + (trans + 1)->state = NULL; + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ +- trans->code_min = p1->code_min; +- trans->code_max = p1->code_max; ++ trans->code_min = (tre_cint_t) p1->code_min; ++ trans->code_max = (tre_cint_t) p1->code_max; + trans->state = transitions + offs[p2->position]; + trans->state_id = p2->position; + trans->assertions = p1->assertions | p2->assertions +- | (p1->classt ? ASSERT_CHAR_CLASS : 0) ++ | (p1->class ? ASSERT_CHAR_CLASS : 0) + | (p1->neg_classes != NULL ? ASSERT_CHAR_CLASS_NEG : 0); + if (p1->backref >= 0) + { +@@ -1629,7 +1636,7 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + trans->assertions |= ASSERT_BACKREF; + } + else +- trans->u.classt = p1->classt; ++ trans->u.class = p1->class; + if (p1->neg_classes != NULL) + { + for (i = 0; p1->neg_classes[i] != (tre_ctype_t)0; i++); +@@ -1743,8 +1750,8 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + DPRINT((", assert %d", trans->assertions)); + if (trans->assertions & ASSERT_BACKREF) + DPRINT((", backref %d", trans->u.backref)); +- else if (trans->u.classt) +- DPRINT((", class %ld", (long)trans->u.classt)); ++ else if (trans->u.class) ++ DPRINT((", class %ld", (long)trans->u.class)); + if (trans->neg_classes) + DPRINT((", neg_classes %p", trans->neg_classes)); + if (trans->params) +@@ -1861,10 +1868,10 @@ tre_ast_to_tnfa(tre_ast_node_t *node, tre_tnfa_transition_t *transitions, + do \ + { \ + errcode = err; \ +- if (/*CONSTCOND*/1) \ ++ if (/*CONSTCOND*/(void)1,1) \ + goto error_exit; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + + int +@@ -2050,7 +2057,7 @@ tre_compile(regex_t *preg, const tre_char_t *regex, size_t n, int cflags) + if (TRE_MB_CUR_MAX == 1 && !tmp_ast_l->nullable) + { + int count = 0; +- int k; /* [i_a] */ ++ tre_cint_t k; + DPRINT(("Characters that can start a match:")); + tnfa->firstpos_chars = xcalloc(256, sizeof(char)); + if (tnfa->firstpos_chars == NULL) +@@ -2310,15 +2317,7 @@ tre_config(int query, void *result) + case TRE_CONFIG_VERSION: + *string_result = TRE_VERSION; + return REG_OK; +- +- case TRE_MB_CUR_MAX_VALUE: /* [i_a] */ +-#if defined(TRE_MB_CUR_MAX) +- *int_result = TRE_MB_CUR_MAX; +-#else +- *int_result = 1; +-#endif +- break; +- } ++ } + + return REG_NOMATCH; + } +diff --git a/src/extra/tre/tre-compile.h b/src/extra/tre/tre-compile.h +index 0d81cf2..51d5ac9 100644 +--- a/src/extra/tre/tre-compile.h ++++ b/src/extra/tre/tre-compile.h +@@ -12,16 +12,11 @@ + + typedef struct { + int position; +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else + int code_min; + int code_max; +-#endif + int *tags; + int assertions; +- tre_ctype_t classt; ++ tre_ctype_t class; + tre_ctype_t *neg_classes; + int backref; + int *params; +diff --git a/src/extra/tre/tre-internal.h b/src/extra/tre/tre-internal.h +index c1300ac..822998e 100644 +--- a/src/extra/tre/tre-internal.h ++++ b/src/extra/tre/tre-internal.h +@@ -22,9 +22,9 @@ + + #ifdef TRE_DEBUG + #include +-#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/0) ++#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/(void)0,0) + #else /* !TRE_DEBUG */ +-#define DPRINT(msg) do { } while(/*CONSTCOND*/0) ++#define DPRINT(msg) do { } while(/*CONSTCOND*/(void)0,0) + #endif /* !TRE_DEBUG */ + + #define elementsof(x) ( sizeof(x) / sizeof(x[0]) ) +@@ -151,13 +151,8 @@ typedef struct tnfa_transition tre_tnfa_transition_t; + + struct tnfa_transition { + /* Range of accepted characters. */ +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ + tre_cint_t code_min; + tre_cint_t code_max; +-#else +- int code_min; +- int code_max; +-#endif + /* Pointer to the destination state. */ + tre_tnfa_transition_t *state; + /* ID number of the destination state. */ +@@ -171,7 +166,7 @@ struct tnfa_transition { + /* Assertion parameters. */ + union { + /* Character class assertion. */ +- tre_ctype_t classt; ++ tre_ctype_t class; + /* Back reference assertion. */ + int backref; + } u; +diff --git a/src/extra/tre/tre-match-approx.c b/src/extra/tre/tre-match-approx.c +index 6011114..f08cd0f 100644 +--- a/src/extra/tre/tre-match-approx.c ++++ b/src/extra/tre/tre-match-approx.c +@@ -328,7 +328,7 @@ tre_tnfa_run_approx(const tre_tnfa_t *tnfa, const void *string, int len, + GET_NEXT_WCHAR(); + pos = 0; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + DPRINT(("%03d:%2lc/%05d\n", pos, (tre_cint_t)next_c, (int)next_c)); + +diff --git a/src/extra/tre/tre-match-backtrack.c b/src/extra/tre/tre-match-backtrack.c +index 9630e81..9dd7e94 100644 +--- a/src/extra/tre/tre-match-backtrack.c ++++ b/src/extra/tre/tre-match-backtrack.c +@@ -116,7 +116,7 @@ typedef struct tre_backtrack_struct { + #ifdef TRE_USE_ALLOCA + #define tre_bt_mem_new tre_mem_newa + #define tre_bt_mem_alloc tre_mem_alloca +-#define tre_bt_mem_destroy(obj) do { } while (0) ++#define tre_bt_mem_destroy(obj) do { } while (0,0) + #else /* !TRE_USE_ALLOCA */ + #define tre_bt_mem_new tre_mem_new + #define tre_bt_mem_alloc tre_mem_alloc +@@ -173,7 +173,7 @@ typedef struct tre_backtrack_struct { + stack->item.tags[i] = (_tags)[i]; \ + BT_STACK_MBSTATE_IN; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define BT_STACK_POP() \ + do \ +@@ -186,13 +186,13 @@ typedef struct tre_backtrack_struct { + str_byte = stack->item.str_byte; \ + BT_STACK_WIDE_OUT; \ + state = stack->item.state; \ +- next_c = (tre_char_t)stack->item.next_c; \ ++ next_c = (tre_char_t) stack->item.next_c; \ + for (i = 0; i < tnfa->num_tags; i++) \ + tags[i] = stack->item.tags[i]; \ + BT_STACK_MBSTATE_OUT; \ + stack = stack->prev; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #undef MIN + #define MIN(a, b) ((a) <= (b) ? (a) : (b)) +@@ -372,7 +372,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + if (state == NULL) + goto backtrack; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + tre_tnfa_transition_t *next_state; + int empty_br_match; +@@ -632,7 +632,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + } + } + DPRINT(("restarting from next start position\n")); +- next_c = (tre_char_t)next_c_start; ++ next_c = (tre_char_t) next_c_start; + #ifdef TRE_MBSTATE + mbstate = mbstate_start; + #endif /* TRE_MBSTATE */ +diff --git a/src/extra/tre/tre-match-parallel.c b/src/extra/tre/tre-match-parallel.c +index ddb9fda..6696d11 100644 +--- a/src/extra/tre/tre-match-parallel.c ++++ b/src/extra/tre/tre-match-parallel.c +@@ -269,7 +269,7 @@ tre_tnfa_run_parallel(const tre_tnfa_t *tnfa, const void *string, int len, + DPRINT(("-------------+------------------------------------------------\n")); + + reach_next_i = reach_next; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + /* If no match found yet, add the initial states to `reach_next'. */ + if (match_eo < 0) +diff --git a/src/extra/tre/tre-match-utils.h b/src/extra/tre/tre-match-utils.h +index 7d19c21..d0a4214 100644 +--- a/src/extra/tre/tre-match-utils.h ++++ b/src/extra/tre/tre-match-utils.h +@@ -76,7 +76,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #else /* !TRE_MULTIBYTE */ + +@@ -107,7 +107,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_MULTIBYTE */ + +@@ -132,7 +132,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_WCHAR */ + +@@ -161,11 +161,11 @@ + #define CHECK_CHAR_CLASSES(trans_i, tnfa, eflags) \ + (((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && !(tnfa->cflags & REG_ICASE) \ +- && !tre_isctype((tre_cint_t)prev_c, trans_i->u.classt)) \ ++ && !tre_isctype((tre_cint_t)prev_c, trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && (tnfa->cflags & REG_ICASE) \ +- && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.classt) \ +- && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.classt)) \ ++ && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.class) \ ++ && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS_NEG) \ + && tre_neg_char_classes_match(trans_i->neg_classes,(tre_cint_t)prev_c,\ + tnfa->cflags & REG_ICASE))) +diff --git a/src/extra/tre/tre-mem.c b/src/extra/tre/tre-mem.c +index 51b630c..67ba676 100644 +--- a/src/extra/tre/tre-mem.c ++++ b/src/extra/tre/tre-mem.c +@@ -111,8 +111,8 @@ tre_mem_alloc_impl(tre_mem_t mem, int provided, void *provided_block, + block_size = size * 8; + else + block_size = TRE_MEM_BLOCK_SIZE; +- DPRINT(("tre_mem_alloc: allocating new %u byte block\n", +- (unsigned int)block_size)); ++ DPRINT(("tre_mem_alloc: allocating new %lu byte block\n", ++ (unsigned long)block_size)); + l = xmalloc(sizeof(*l)); + if (l == NULL) + { +diff --git a/src/extra/tre/tre-parse.c b/src/extra/tre/tre-parse.c +index 50d0438..86ccad6 100644 +--- a/src/extra/tre/tre-parse.c ++++ b/src/extra/tre/tre-parse.c +@@ -123,23 +123,22 @@ tre_new_item(tre_mem_t mem, int min, int max, int *i, int *max_i, + + /* Expands a character class to character ranges. */ + static reg_errcode_t +-tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, ++tre_expand_ctype(tre_mem_t mem, tre_ctype_t class, tre_ast_node_t ***items, + int *i, int *max_i, int cflags) + { + reg_errcode_t status = REG_OK; + tre_cint_t c; +- tre_cint_t j; +- int min = EMPTY, max = 0; ++ int j, min = -1, max = 0; + //assert(TRE_MB_CUR_MAX == 1); It is the ctx->cur_max that matters + + DPRINT((" expanding class to character ranges\n")); + for (j = 0; (j < 256) && (status == REG_OK); j++) + { +- c = j; +- if (tre_isctype(c, classt) ++ c = (tre_cint_t) j; ++ if (tre_isctype(c, class) + || ((cflags & REG_ICASE) +- && (tre_isctype(tre_tolower(c), classt) +- || tre_isctype(tre_toupper(c), classt)))) ++ && (tre_isctype(tre_tolower(c), class) ++ || tre_isctype(tre_toupper(c), class)))) + { + if (min < 0) + min = c; +@@ -149,7 +148,7 @@ tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, + { + DPRINT((" range %c (%d) to %c (%d)\n", min, min, max, max)); + status = tre_new_item(mem, min, max, i, max_i, items); +- min = EMPTY; ++ min = -1; + } + } + if (min >= 0 && status == REG_OK) +@@ -164,7 +163,7 @@ tre_compare_items(const void *a, const void *b) + const tre_ast_node_t *node_a = *(tre_ast_node_t * const *)a; + const tre_ast_node_t *node_b = *(tre_ast_node_t * const *)b; + tre_literal_t *l_a = node_a->obj, *l_b = node_b->obj; +- int a_min = l_a->code_min, b_min = l_b->code_min; ++ long a_min = l_a->code_min, b_min = l_b->code_min; + + if (a_min < b_min) + return -1; +@@ -255,7 +254,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + const tre_char_t *re = ctx->re; + reg_errcode_t status = REG_OK; +- tre_ctype_t classt = (tre_ctype_t)0; ++ tre_ctype_t class = (tre_ctype_t)0; + int i = *num_items; + int max_i = *items_size; + int skip; +@@ -278,7 +277,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + tre_cint_t min = 0, max = 0; + +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + if (re + 2 < ctx->re_end + && *(re + 1) == CHAR_MINUS && *(re + 2) != CHAR_RBRACKET) + { +@@ -330,15 +329,15 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + #endif /* !TRE_WCHAR */ + tmp_str[len] = '\0'; + DPRINT((" class name: %s\n", tmp_str)); +- classt = tre_ctype(tmp_str); +- if (!classt) ++ class = tre_ctype(tmp_str); ++ if (!class) + status = REG_ECTYPE; + /* Optimize character classes for 8 bit character sets. */ + if (status == REG_OK && ctx->cur_max == 1) + { +- status = tre_expand_ctype(ctx->mem, classt, items, ++ status = tre_expand_ctype(ctx->mem, class, items, + &i, &max_i, ctx->cflags); +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + skip = 1; + } + re = endptr + 2; +@@ -361,22 +360,22 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + if (status != REG_OK) + break; + +- if (classt && negate) ++ if (class && negate) + if (*num_neg_classes >= MAX_NEG_CLASSES) + status = REG_ESPACE; + else +- neg_classes[(*num_neg_classes)++] = classt; ++ neg_classes[(*num_neg_classes)++] = class; + else if (!skip) + { + status = tre_new_item(ctx->mem, min, max, &i, &max_i, items); + if (status != REG_OK) + break; +- ((tre_literal_t*)((*items)[i-1])->obj)->u.classt = classt; ++ ((tre_literal_t*)((*items)[i-1])->obj)->u.class = class; + } + + /* Add opposite-case counterpoints if REG_ICASE is present. + This is broken if there are more than two "same" characters. */ +- if (ctx->cflags & REG_ICASE && !classt && status == REG_OK && !skip) ++ if (ctx->cflags & REG_ICASE && !class && status == REG_OK && !skip) + { + tre_cint_t cmin, ccurr; + +@@ -455,11 +454,11 @@ tre_parse_bracket(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + { + int min, max; + tre_literal_t *l = items[j]->obj; +- min = l->code_min; +- max = l->code_max; ++ min = (int) l->code_min; ++ max = (int) l->code_max; + + DPRINT(("item: %d - %d, class %p, curr_max = %d\n", +- (int)l->code_min, (int)l->code_max, (void *)l->u.classt, curr_max)); ++ (int)l->code_min, (int)l->code_max, (void *)l->u.class, curr_max)); + + if (negate) + { +@@ -831,7 +830,7 @@ tre_parse_bound(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + /* Create the AST node(s). */ + if (min == 0 && max == 0) + { +- *result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ *result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (*result == NULL) + return REG_ESPACE; + } +@@ -1212,7 +1211,7 @@ tre_parse(tre_parse_ctx_t *ctx) + DPRINT(("tre_parse: extension: '%.*" STRF "\n", + REST(ctx->re))); + ctx->re += 2; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + if (*ctx->re == L'i') + { +@@ -1352,7 +1351,7 @@ tre_parse(tre_parse_ctx_t *ctx) + subexpression was closed. POSIX leaves the meaning of + this to be implementation-defined. We interpret this as + an empty expression (which matches an empty string). */ +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (result == NULL) + return REG_ESPACE; + if (!(ctx->cflags & REG_EXTENDED)) +@@ -1645,7 +1644,7 @@ tre_parse(tre_parse_ctx_t *ctx) + { + DPRINT(("tre_parse: empty: '%.*" STRF "'\n", + REST(ctx->re))); +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (!result) + return REG_ESPACE; + break; +@@ -1715,7 +1714,7 @@ tre_parse(tre_parse_ctx_t *ctx) + if (result->submatch_id >= 0) + { + tre_ast_node_t *n, *tmp_node; +- n = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ n = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (n == NULL) + return REG_ESPACE; + tmp_node = tre_ast_new_catenation(ctx->mem, n, result); +diff --git a/src/extra/tre/tre-stack.h b/src/extra/tre/tre-stack.h +index 7d11c5e..a1acbe7 100644 +--- a/src/extra/tre/tre-stack.h ++++ b/src/extra/tre/tre-stack.h +@@ -54,7 +54,7 @@ declare_popf(int, int); + { \ + status = tre_stack_push_ ## typetag(s, value); \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define STACK_PUSHX(s, typetag, value) \ + { \ +diff --git a/src/extra/tre/tre.h b/src/extra/tre/tre.h +index 9d7d3a7..128475d 100644 +--- a/src/extra/tre/tre.h ++++ b/src/extra/tre/tre.h +@@ -137,14 +137,6 @@ extern int + tre_regexec(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + +-extern size_t +-tre_regerror(int errcode, const regex_t *preg, char *errbuf, +- size_t errbuf_size); +- +-extern void +-tre_regfree(regex_t *preg); +- +-/* R additions */ + extern int + tre_regcompb(regex_t *preg, const char *regex, int cflags); + +@@ -152,6 +144,13 @@ extern int + tre_regexecb(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + ++extern size_t ++tre_regerror(int errcode, const regex_t *preg, char *errbuf, ++ size_t errbuf_size); ++ ++extern void ++tre_regfree(regex_t *preg); ++ + #ifdef TRE_WCHAR + #ifdef HAVE_WCHAR_H + #include +@@ -223,7 +222,10 @@ extern int + tre_regaexec(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); + +-/* R addition */ ++extern int ++tre_reganexec(const regex_t *preg, const char *string, size_t len, ++ regamatch_t *match, regaparams_t params, int eflags); ++ + extern int + tre_regaexecb(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); +@@ -279,8 +281,7 @@ enum { + TRE_CONFIG_WCHAR, + TRE_CONFIG_MULTIBYTE, + TRE_CONFIG_SYSTEM_ABI, +- TRE_CONFIG_VERSION, +- TRE_MB_CUR_MAX_VALUE /* [i_a] - derived from MULTIBYTE and WCHAR, but still handy to have: no need to copy logic in TRE header files, etc. in order to know this */ ++ TRE_CONFIG_VERSION + }; + + /* Returns 1 if the compiled pattern has back references, 0 if not. */ diff --git a/builder/patches/R-3.0.2-aarch64.patch b/builder/patches/R-3.0.2-aarch64.patch new file mode 100644 index 0000000..aa896ad --- /dev/null +++ b/builder/patches/R-3.0.2-aarch64.patch @@ -0,0 +1,709 @@ +diff --git a/configure b/configure +index b3c299e..01f205d 100755 +--- a/configure ++++ b/configure +@@ -5193,6 +5193,7 @@ elif test ${makeinfo_version_maj} -lt 4 \ + else + r_cv_prog_makeinfo_v4=yes + fi ++r_cv_prog_makeinfo_v4=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $r_cv_prog_makeinfo_v4" >&5 + $as_echo "$r_cv_prog_makeinfo_v4" >&6; } +diff --git a/src/extra/tre/regcomp.c b/src/extra/tre/regcomp.c +index 93ddb92..31d4e52 100644 +--- a/src/extra/tre/regcomp.c ++++ b/src/extra/tre/regcomp.c +@@ -99,7 +99,6 @@ tre_regncomp(regex_t *preg, const char *regex, size_t n, int cflags) + return ret; + } + +- + /* this version takes bytes literally, to be used with raw vectors */ + int + tre_regncompb(regex_t *preg, const char *regex, size_t n, int cflags) +@@ -131,7 +130,6 @@ tre_regcomp(regex_t *preg, const char *regex, int cflags) + return tre_regncomp(preg, regex, regex ? strlen(regex) : 0, cflags); + } + +-/* R addition */ + int + tre_regcompb(regex_t *preg, const char *regex, int cflags) + { +diff --git a/src/extra/tre/regexec.c b/src/extra/tre/regexec.c +index 6edaf81..d8f91a3 100644 +--- a/src/extra/tre/regexec.c ++++ b/src/extra/tre/regexec.c +@@ -217,7 +217,6 @@ tre_regexec(const regex_t *preg, const char *str, + return tre_regnexec(preg, str, (unsigned)-1, nmatch, pmatch, eflags); + } + +-/* R addition */ + int + tre_regexecb(const regex_t *preg, const char *str, + size_t nmatch, regmatch_t pmatch[], int eflags) +@@ -329,7 +328,6 @@ tre_regaexec(const regex_t *preg, const char *str, + return tre_reganexec(preg, str, (unsigned)-1, match, params, eflags); + } + +-/* R addition */ + int + tre_regaexecb(const regex_t *preg, const char *str, + regamatch_t *match, regaparams_t params, int eflags) +diff --git a/src/extra/tre/tre-ast.h b/src/extra/tre/tre-ast.h +index 844aee3..d9af376 100644 +--- a/src/extra/tre/tre-ast.h ++++ b/src/extra/tre/tre-ast.h +@@ -55,16 +55,11 @@ typedef struct { + tags, matching parameter settings, and all expressions that match one + character. */ + typedef struct { +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else +- int /* long */ code_min; +- int /* long */ code_max; +-#endif ++ long code_min; ++ long code_max; + int position; + union { +- tre_ctype_t classt; /* [i_a] wrong syntax colouring prevention */ ++ tre_ctype_t class; + int *params; + } u; + tre_ctype_t *neg_classes; +diff --git a/src/extra/tre/tre-compile.c b/src/extra/tre/tre-compile.c +index 7886455..92c14ab 100644 +--- a/src/extra/tre/tre-compile.c ++++ b/src/extra/tre/tre-compile.c +@@ -6,6 +6,13 @@ + + */ + ++/* ++ TODO: ++ - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive ++ function calls. ++*/ ++ ++ + #ifdef HAVE_CONFIG_H + #include + #endif /* HAVE_CONFIG_H */ +@@ -684,8 +691,8 @@ tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + { + tre_literal_t *lit = node->obj; + int pos = lit->position; +- int min = lit->code_min; +- int max = lit->code_max; ++ int min = (int)lit->code_min; ++ int max = (int)lit->code_max; + if (!IS_SPECIAL(lit) || IS_BACKREF(lit)) + { + /* XXX - e.g. [ab] has only one position but two +@@ -945,7 +952,7 @@ tre_expand_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + seq2 = copy; + if (seq2 == NULL) + return REG_ESPACE; +- tmp = tre_ast_new_literal(mem, EMPTY, EMPTY, -1); ++ tmp = tre_ast_new_literal(mem, EMPTY, -1, -1); + if (tmp == NULL) + return REG_ESPACE; + seq2 = tre_ast_new_union(mem, tmp, seq2); +@@ -1052,15 +1059,15 @@ tre_set_empty(tre_mem_t mem) + return NULL; + + new_set[0].position = -1; +- new_set[0].code_min = EMPTY; +- new_set[0].code_max = EMPTY; ++ new_set[0].code_min = -1; ++ new_set[0].code_max = -1; + + return new_set; + } + + static tre_pos_and_tags_t * + tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, +- tre_ctype_t classt, tre_ctype_t *neg_classes, int backref) ++ tre_ctype_t class, tre_ctype_t *neg_classes, int backref) + { + tre_pos_and_tags_t *new_set; + +@@ -1071,12 +1078,12 @@ tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, + new_set[0].position = position; + new_set[0].code_min = code_min; + new_set[0].code_max = code_max; +- new_set[0].classt = classt; ++ new_set[0].class = class; + new_set[0].neg_classes = neg_classes; + new_set[0].backref = backref; + new_set[1].position = -1; +- new_set[1].code_min = EMPTY; +- new_set[1].code_max = EMPTY; ++ new_set[1].code_min = -1; ++ new_set[1].code_max = -1; + + return new_set; + } +@@ -1103,7 +1110,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1].code_min = set1[s1].code_min; + new_set[s1].code_max = set1[s1].code_max; + new_set[s1].assertions = set1[s1].assertions | assertions; +- new_set[s1].classt = set1[s1].classt; ++ new_set[s1].class = set1[s1].class; + new_set[s1].neg_classes = set1[s1].neg_classes; + new_set[s1].backref = set1[s1].backref; + if (set1[s1].tags == NULL && tags == NULL) +@@ -1148,7 +1155,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1 + s2].code_max = set2[s2].code_max; + /* XXX - why not | assertions here as well? */ + new_set[s1 + s2].assertions = set2[s2].assertions; +- new_set[s1 + s2].classt = set2[s2].classt; ++ new_set[s1 + s2].class = set2[s2].class; + new_set[s1 + s2].neg_classes = set2[s2].neg_classes; + new_set[s1 + s2].backref = set2[s2].backref; + if (set2[s2].tags == NULL) +@@ -1231,7 +1238,7 @@ tre_match_empty(tre_stack_t *stack, tre_ast_node_t *node, int *tags, + break; + if (tags[i] < 0) + { +- tags[i] = lit->code_max; ++ tags[i] = (int)lit->code_max; + tags[i + 1] = -1; + } + } +@@ -1373,7 +1380,7 @@ tre_compute_nfl(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree) + node->lastpos = tre_set_one(mem, lit->position, + (int)lit->code_min, + (int)lit->code_max, +- lit->u.classt, lit->neg_classes, ++ lit->u.class, lit->neg_classes, + -1); + if (!node->lastpos) + return REG_ESPACE; +@@ -1614,12 +1621,12 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + (trans + 1)->state = NULL; + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ +- trans->code_min = p1->code_min; +- trans->code_max = p1->code_max; ++ trans->code_min = (tre_cint_t) p1->code_min; ++ trans->code_max = (tre_cint_t) p1->code_max; + trans->state = transitions + offs[p2->position]; + trans->state_id = p2->position; + trans->assertions = p1->assertions | p2->assertions +- | (p1->classt ? ASSERT_CHAR_CLASS : 0) ++ | (p1->class ? ASSERT_CHAR_CLASS : 0) + | (p1->neg_classes != NULL ? ASSERT_CHAR_CLASS_NEG : 0); + if (p1->backref >= 0) + { +@@ -1629,7 +1636,7 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + trans->assertions |= ASSERT_BACKREF; + } + else +- trans->u.classt = p1->classt; ++ trans->u.class = p1->class; + if (p1->neg_classes != NULL) + { + for (i = 0; p1->neg_classes[i] != (tre_ctype_t)0; i++); +@@ -1743,8 +1750,8 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + DPRINT((", assert %d", trans->assertions)); + if (trans->assertions & ASSERT_BACKREF) + DPRINT((", backref %d", trans->u.backref)); +- else if (trans->u.classt) +- DPRINT((", class %ld", (long)trans->u.classt)); ++ else if (trans->u.class) ++ DPRINT((", class %ld", (long)trans->u.class)); + if (trans->neg_classes) + DPRINT((", neg_classes %p", trans->neg_classes)); + if (trans->params) +@@ -1861,10 +1868,10 @@ tre_ast_to_tnfa(tre_ast_node_t *node, tre_tnfa_transition_t *transitions, + do \ + { \ + errcode = err; \ +- if (/*CONSTCOND*/1) \ ++ if (/*CONSTCOND*/(void)1,1) \ + goto error_exit; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + + int +@@ -2050,7 +2057,7 @@ tre_compile(regex_t *preg, const tre_char_t *regex, size_t n, int cflags) + if (TRE_MB_CUR_MAX == 1 && !tmp_ast_l->nullable) + { + int count = 0; +- int k; /* [i_a] */ ++ tre_cint_t k; + DPRINT(("Characters that can start a match:")); + tnfa->firstpos_chars = xcalloc(256, sizeof(char)); + if (tnfa->firstpos_chars == NULL) +@@ -2310,15 +2317,7 @@ tre_config(int query, void *result) + case TRE_CONFIG_VERSION: + *string_result = TRE_VERSION; + return REG_OK; +- +- case TRE_MB_CUR_MAX_VALUE: /* [i_a] */ +-#if defined(TRE_MB_CUR_MAX) +- *int_result = TRE_MB_CUR_MAX; +-#else +- *int_result = 1; +-#endif +- break; +- } ++ } + + return REG_NOMATCH; + } +diff --git a/src/extra/tre/tre-compile.h b/src/extra/tre/tre-compile.h +index 0d81cf2..51d5ac9 100644 +--- a/src/extra/tre/tre-compile.h ++++ b/src/extra/tre/tre-compile.h +@@ -12,16 +12,11 @@ + + typedef struct { + int position; +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else + int code_min; + int code_max; +-#endif + int *tags; + int assertions; +- tre_ctype_t classt; ++ tre_ctype_t class; + tre_ctype_t *neg_classes; + int backref; + int *params; +diff --git a/src/extra/tre/tre-internal.h b/src/extra/tre/tre-internal.h +index c1300ac..822998e 100644 +--- a/src/extra/tre/tre-internal.h ++++ b/src/extra/tre/tre-internal.h +@@ -22,9 +22,9 @@ + + #ifdef TRE_DEBUG + #include +-#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/0) ++#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/(void)0,0) + #else /* !TRE_DEBUG */ +-#define DPRINT(msg) do { } while(/*CONSTCOND*/0) ++#define DPRINT(msg) do { } while(/*CONSTCOND*/(void)0,0) + #endif /* !TRE_DEBUG */ + + #define elementsof(x) ( sizeof(x) / sizeof(x[0]) ) +@@ -151,13 +151,8 @@ typedef struct tnfa_transition tre_tnfa_transition_t; + + struct tnfa_transition { + /* Range of accepted characters. */ +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ + tre_cint_t code_min; + tre_cint_t code_max; +-#else +- int code_min; +- int code_max; +-#endif + /* Pointer to the destination state. */ + tre_tnfa_transition_t *state; + /* ID number of the destination state. */ +@@ -171,7 +166,7 @@ struct tnfa_transition { + /* Assertion parameters. */ + union { + /* Character class assertion. */ +- tre_ctype_t classt; ++ tre_ctype_t class; + /* Back reference assertion. */ + int backref; + } u; +diff --git a/src/extra/tre/tre-match-approx.c b/src/extra/tre/tre-match-approx.c +index 6011114..f08cd0f 100644 +--- a/src/extra/tre/tre-match-approx.c ++++ b/src/extra/tre/tre-match-approx.c +@@ -328,7 +328,7 @@ tre_tnfa_run_approx(const tre_tnfa_t *tnfa, const void *string, int len, + GET_NEXT_WCHAR(); + pos = 0; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + DPRINT(("%03d:%2lc/%05d\n", pos, (tre_cint_t)next_c, (int)next_c)); + +diff --git a/src/extra/tre/tre-match-backtrack.c b/src/extra/tre/tre-match-backtrack.c +index 9630e81..9dd7e94 100644 +--- a/src/extra/tre/tre-match-backtrack.c ++++ b/src/extra/tre/tre-match-backtrack.c +@@ -116,7 +116,7 @@ typedef struct tre_backtrack_struct { + #ifdef TRE_USE_ALLOCA + #define tre_bt_mem_new tre_mem_newa + #define tre_bt_mem_alloc tre_mem_alloca +-#define tre_bt_mem_destroy(obj) do { } while (0) ++#define tre_bt_mem_destroy(obj) do { } while (0,0) + #else /* !TRE_USE_ALLOCA */ + #define tre_bt_mem_new tre_mem_new + #define tre_bt_mem_alloc tre_mem_alloc +@@ -173,7 +173,7 @@ typedef struct tre_backtrack_struct { + stack->item.tags[i] = (_tags)[i]; \ + BT_STACK_MBSTATE_IN; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define BT_STACK_POP() \ + do \ +@@ -186,13 +186,13 @@ typedef struct tre_backtrack_struct { + str_byte = stack->item.str_byte; \ + BT_STACK_WIDE_OUT; \ + state = stack->item.state; \ +- next_c = (tre_char_t)stack->item.next_c; \ ++ next_c = (tre_char_t) stack->item.next_c; \ + for (i = 0; i < tnfa->num_tags; i++) \ + tags[i] = stack->item.tags[i]; \ + BT_STACK_MBSTATE_OUT; \ + stack = stack->prev; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #undef MIN + #define MIN(a, b) ((a) <= (b) ? (a) : (b)) +@@ -372,7 +372,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + if (state == NULL) + goto backtrack; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + tre_tnfa_transition_t *next_state; + int empty_br_match; +@@ -632,7 +632,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + } + } + DPRINT(("restarting from next start position\n")); +- next_c = (tre_char_t)next_c_start; ++ next_c = (tre_char_t) next_c_start; + #ifdef TRE_MBSTATE + mbstate = mbstate_start; + #endif /* TRE_MBSTATE */ +diff --git a/src/extra/tre/tre-match-parallel.c b/src/extra/tre/tre-match-parallel.c +index ddb9fda..6696d11 100644 +--- a/src/extra/tre/tre-match-parallel.c ++++ b/src/extra/tre/tre-match-parallel.c +@@ -269,7 +269,7 @@ tre_tnfa_run_parallel(const tre_tnfa_t *tnfa, const void *string, int len, + DPRINT(("-------------+------------------------------------------------\n")); + + reach_next_i = reach_next; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + /* If no match found yet, add the initial states to `reach_next'. */ + if (match_eo < 0) +diff --git a/src/extra/tre/tre-match-utils.h b/src/extra/tre/tre-match-utils.h +index 7d19c21..d0a4214 100644 +--- a/src/extra/tre/tre-match-utils.h ++++ b/src/extra/tre/tre-match-utils.h +@@ -76,7 +76,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #else /* !TRE_MULTIBYTE */ + +@@ -107,7 +107,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_MULTIBYTE */ + +@@ -132,7 +132,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_WCHAR */ + +@@ -161,11 +161,11 @@ + #define CHECK_CHAR_CLASSES(trans_i, tnfa, eflags) \ + (((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && !(tnfa->cflags & REG_ICASE) \ +- && !tre_isctype((tre_cint_t)prev_c, trans_i->u.classt)) \ ++ && !tre_isctype((tre_cint_t)prev_c, trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && (tnfa->cflags & REG_ICASE) \ +- && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.classt) \ +- && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.classt)) \ ++ && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.class) \ ++ && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS_NEG) \ + && tre_neg_char_classes_match(trans_i->neg_classes,(tre_cint_t)prev_c,\ + tnfa->cflags & REG_ICASE))) +diff --git a/src/extra/tre/tre-mem.c b/src/extra/tre/tre-mem.c +index 51b630c..67ba676 100644 +--- a/src/extra/tre/tre-mem.c ++++ b/src/extra/tre/tre-mem.c +@@ -111,8 +111,8 @@ tre_mem_alloc_impl(tre_mem_t mem, int provided, void *provided_block, + block_size = size * 8; + else + block_size = TRE_MEM_BLOCK_SIZE; +- DPRINT(("tre_mem_alloc: allocating new %u byte block\n", +- (unsigned int)block_size)); ++ DPRINT(("tre_mem_alloc: allocating new %lu byte block\n", ++ (unsigned long)block_size)); + l = xmalloc(sizeof(*l)); + if (l == NULL) + { +diff --git a/src/extra/tre/tre-parse.c b/src/extra/tre/tre-parse.c +index 50d0438..86ccad6 100644 +--- a/src/extra/tre/tre-parse.c ++++ b/src/extra/tre/tre-parse.c +@@ -123,23 +123,22 @@ tre_new_item(tre_mem_t mem, int min, int max, int *i, int *max_i, + + /* Expands a character class to character ranges. */ + static reg_errcode_t +-tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, ++tre_expand_ctype(tre_mem_t mem, tre_ctype_t class, tre_ast_node_t ***items, + int *i, int *max_i, int cflags) + { + reg_errcode_t status = REG_OK; + tre_cint_t c; +- tre_cint_t j; +- int min = EMPTY, max = 0; ++ int j, min = -1, max = 0; + //assert(TRE_MB_CUR_MAX == 1); It is the ctx->cur_max that matters + + DPRINT((" expanding class to character ranges\n")); + for (j = 0; (j < 256) && (status == REG_OK); j++) + { +- c = j; +- if (tre_isctype(c, classt) ++ c = (tre_cint_t) j; ++ if (tre_isctype(c, class) + || ((cflags & REG_ICASE) +- && (tre_isctype(tre_tolower(c), classt) +- || tre_isctype(tre_toupper(c), classt)))) ++ && (tre_isctype(tre_tolower(c), class) ++ || tre_isctype(tre_toupper(c), class)))) + { + if (min < 0) + min = c; +@@ -149,7 +148,7 @@ tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, + { + DPRINT((" range %c (%d) to %c (%d)\n", min, min, max, max)); + status = tre_new_item(mem, min, max, i, max_i, items); +- min = EMPTY; ++ min = -1; + } + } + if (min >= 0 && status == REG_OK) +@@ -164,7 +163,7 @@ tre_compare_items(const void *a, const void *b) + const tre_ast_node_t *node_a = *(tre_ast_node_t * const *)a; + const tre_ast_node_t *node_b = *(tre_ast_node_t * const *)b; + tre_literal_t *l_a = node_a->obj, *l_b = node_b->obj; +- int a_min = l_a->code_min, b_min = l_b->code_min; ++ long a_min = l_a->code_min, b_min = l_b->code_min; + + if (a_min < b_min) + return -1; +@@ -255,7 +254,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + const tre_char_t *re = ctx->re; + reg_errcode_t status = REG_OK; +- tre_ctype_t classt = (tre_ctype_t)0; ++ tre_ctype_t class = (tre_ctype_t)0; + int i = *num_items; + int max_i = *items_size; + int skip; +@@ -278,7 +277,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + tre_cint_t min = 0, max = 0; + +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + if (re + 2 < ctx->re_end + && *(re + 1) == CHAR_MINUS && *(re + 2) != CHAR_RBRACKET) + { +@@ -330,15 +329,15 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + #endif /* !TRE_WCHAR */ + tmp_str[len] = '\0'; + DPRINT((" class name: %s\n", tmp_str)); +- classt = tre_ctype(tmp_str); +- if (!classt) ++ class = tre_ctype(tmp_str); ++ if (!class) + status = REG_ECTYPE; + /* Optimize character classes for 8 bit character sets. */ + if (status == REG_OK && ctx->cur_max == 1) + { +- status = tre_expand_ctype(ctx->mem, classt, items, ++ status = tre_expand_ctype(ctx->mem, class, items, + &i, &max_i, ctx->cflags); +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + skip = 1; + } + re = endptr + 2; +@@ -361,22 +360,22 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + if (status != REG_OK) + break; + +- if (classt && negate) ++ if (class && negate) + if (*num_neg_classes >= MAX_NEG_CLASSES) + status = REG_ESPACE; + else +- neg_classes[(*num_neg_classes)++] = classt; ++ neg_classes[(*num_neg_classes)++] = class; + else if (!skip) + { + status = tre_new_item(ctx->mem, min, max, &i, &max_i, items); + if (status != REG_OK) + break; +- ((tre_literal_t*)((*items)[i-1])->obj)->u.classt = classt; ++ ((tre_literal_t*)((*items)[i-1])->obj)->u.class = class; + } + + /* Add opposite-case counterpoints if REG_ICASE is present. + This is broken if there are more than two "same" characters. */ +- if (ctx->cflags & REG_ICASE && !classt && status == REG_OK && !skip) ++ if (ctx->cflags & REG_ICASE && !class && status == REG_OK && !skip) + { + tre_cint_t cmin, ccurr; + +@@ -455,11 +454,11 @@ tre_parse_bracket(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + { + int min, max; + tre_literal_t *l = items[j]->obj; +- min = l->code_min; +- max = l->code_max; ++ min = (int) l->code_min; ++ max = (int) l->code_max; + + DPRINT(("item: %d - %d, class %p, curr_max = %d\n", +- (int)l->code_min, (int)l->code_max, (void *)l->u.classt, curr_max)); ++ (int)l->code_min, (int)l->code_max, (void *)l->u.class, curr_max)); + + if (negate) + { +@@ -831,7 +830,7 @@ tre_parse_bound(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + /* Create the AST node(s). */ + if (min == 0 && max == 0) + { +- *result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ *result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (*result == NULL) + return REG_ESPACE; + } +@@ -1212,7 +1211,7 @@ tre_parse(tre_parse_ctx_t *ctx) + DPRINT(("tre_parse: extension: '%.*" STRF "\n", + REST(ctx->re))); + ctx->re += 2; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + if (*ctx->re == L'i') + { +@@ -1352,7 +1351,7 @@ tre_parse(tre_parse_ctx_t *ctx) + subexpression was closed. POSIX leaves the meaning of + this to be implementation-defined. We interpret this as + an empty expression (which matches an empty string). */ +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (result == NULL) + return REG_ESPACE; + if (!(ctx->cflags & REG_EXTENDED)) +@@ -1645,7 +1644,7 @@ tre_parse(tre_parse_ctx_t *ctx) + { + DPRINT(("tre_parse: empty: '%.*" STRF "'\n", + REST(ctx->re))); +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (!result) + return REG_ESPACE; + break; +@@ -1715,7 +1714,7 @@ tre_parse(tre_parse_ctx_t *ctx) + if (result->submatch_id >= 0) + { + tre_ast_node_t *n, *tmp_node; +- n = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ n = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (n == NULL) + return REG_ESPACE; + tmp_node = tre_ast_new_catenation(ctx->mem, n, result); +diff --git a/src/extra/tre/tre-stack.h b/src/extra/tre/tre-stack.h +index 7d11c5e..a1acbe7 100644 +--- a/src/extra/tre/tre-stack.h ++++ b/src/extra/tre/tre-stack.h +@@ -54,7 +54,7 @@ declare_popf(int, int); + { \ + status = tre_stack_push_ ## typetag(s, value); \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define STACK_PUSHX(s, typetag, value) \ + { \ +diff --git a/src/extra/tre/tre.h b/src/extra/tre/tre.h +index 9d7d3a7..128475d 100644 +--- a/src/extra/tre/tre.h ++++ b/src/extra/tre/tre.h +@@ -137,14 +137,6 @@ extern int + tre_regexec(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + +-extern size_t +-tre_regerror(int errcode, const regex_t *preg, char *errbuf, +- size_t errbuf_size); +- +-extern void +-tre_regfree(regex_t *preg); +- +-/* R additions */ + extern int + tre_regcompb(regex_t *preg, const char *regex, int cflags); + +@@ -152,6 +144,13 @@ extern int + tre_regexecb(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + ++extern size_t ++tre_regerror(int errcode, const regex_t *preg, char *errbuf, ++ size_t errbuf_size); ++ ++extern void ++tre_regfree(regex_t *preg); ++ + #ifdef TRE_WCHAR + #ifdef HAVE_WCHAR_H + #include +@@ -223,7 +222,10 @@ extern int + tre_regaexec(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); + +-/* R addition */ ++extern int ++tre_reganexec(const regex_t *preg, const char *string, size_t len, ++ regamatch_t *match, regaparams_t params, int eflags); ++ + extern int + tre_regaexecb(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); +@@ -279,8 +281,7 @@ enum { + TRE_CONFIG_WCHAR, + TRE_CONFIG_MULTIBYTE, + TRE_CONFIG_SYSTEM_ABI, +- TRE_CONFIG_VERSION, +- TRE_MB_CUR_MAX_VALUE /* [i_a] - derived from MULTIBYTE and WCHAR, but still handy to have: no need to copy logic in TRE header files, etc. in order to know this */ ++ TRE_CONFIG_VERSION + }; + + /* Returns 1 if the compiled pattern has back references, 0 if not. */ diff --git a/builder/patches/R-3.0.3-aarch64.patch b/builder/patches/R-3.0.3-aarch64.patch new file mode 100644 index 0000000..aa896ad --- /dev/null +++ b/builder/patches/R-3.0.3-aarch64.patch @@ -0,0 +1,709 @@ +diff --git a/configure b/configure +index b3c299e..01f205d 100755 +--- a/configure ++++ b/configure +@@ -5193,6 +5193,7 @@ elif test ${makeinfo_version_maj} -lt 4 \ + else + r_cv_prog_makeinfo_v4=yes + fi ++r_cv_prog_makeinfo_v4=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $r_cv_prog_makeinfo_v4" >&5 + $as_echo "$r_cv_prog_makeinfo_v4" >&6; } +diff --git a/src/extra/tre/regcomp.c b/src/extra/tre/regcomp.c +index 93ddb92..31d4e52 100644 +--- a/src/extra/tre/regcomp.c ++++ b/src/extra/tre/regcomp.c +@@ -99,7 +99,6 @@ tre_regncomp(regex_t *preg, const char *regex, size_t n, int cflags) + return ret; + } + +- + /* this version takes bytes literally, to be used with raw vectors */ + int + tre_regncompb(regex_t *preg, const char *regex, size_t n, int cflags) +@@ -131,7 +130,6 @@ tre_regcomp(regex_t *preg, const char *regex, int cflags) + return tre_regncomp(preg, regex, regex ? strlen(regex) : 0, cflags); + } + +-/* R addition */ + int + tre_regcompb(regex_t *preg, const char *regex, int cflags) + { +diff --git a/src/extra/tre/regexec.c b/src/extra/tre/regexec.c +index 6edaf81..d8f91a3 100644 +--- a/src/extra/tre/regexec.c ++++ b/src/extra/tre/regexec.c +@@ -217,7 +217,6 @@ tre_regexec(const regex_t *preg, const char *str, + return tre_regnexec(preg, str, (unsigned)-1, nmatch, pmatch, eflags); + } + +-/* R addition */ + int + tre_regexecb(const regex_t *preg, const char *str, + size_t nmatch, regmatch_t pmatch[], int eflags) +@@ -329,7 +328,6 @@ tre_regaexec(const regex_t *preg, const char *str, + return tre_reganexec(preg, str, (unsigned)-1, match, params, eflags); + } + +-/* R addition */ + int + tre_regaexecb(const regex_t *preg, const char *str, + regamatch_t *match, regaparams_t params, int eflags) +diff --git a/src/extra/tre/tre-ast.h b/src/extra/tre/tre-ast.h +index 844aee3..d9af376 100644 +--- a/src/extra/tre/tre-ast.h ++++ b/src/extra/tre/tre-ast.h +@@ -55,16 +55,11 @@ typedef struct { + tags, matching parameter settings, and all expressions that match one + character. */ + typedef struct { +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else +- int /* long */ code_min; +- int /* long */ code_max; +-#endif ++ long code_min; ++ long code_max; + int position; + union { +- tre_ctype_t classt; /* [i_a] wrong syntax colouring prevention */ ++ tre_ctype_t class; + int *params; + } u; + tre_ctype_t *neg_classes; +diff --git a/src/extra/tre/tre-compile.c b/src/extra/tre/tre-compile.c +index 7886455..92c14ab 100644 +--- a/src/extra/tre/tre-compile.c ++++ b/src/extra/tre/tre-compile.c +@@ -6,6 +6,13 @@ + + */ + ++/* ++ TODO: ++ - Fix tre_ast_to_tnfa() to recurse using a stack instead of recursive ++ function calls. ++*/ ++ ++ + #ifdef HAVE_CONFIG_H + #include + #endif /* HAVE_CONFIG_H */ +@@ -684,8 +691,8 @@ tre_copy_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + { + tre_literal_t *lit = node->obj; + int pos = lit->position; +- int min = lit->code_min; +- int max = lit->code_max; ++ int min = (int)lit->code_min; ++ int max = (int)lit->code_max; + if (!IS_SPECIAL(lit) || IS_BACKREF(lit)) + { + /* XXX - e.g. [ab] has only one position but two +@@ -945,7 +952,7 @@ tre_expand_ast(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *ast, + seq2 = copy; + if (seq2 == NULL) + return REG_ESPACE; +- tmp = tre_ast_new_literal(mem, EMPTY, EMPTY, -1); ++ tmp = tre_ast_new_literal(mem, EMPTY, -1, -1); + if (tmp == NULL) + return REG_ESPACE; + seq2 = tre_ast_new_union(mem, tmp, seq2); +@@ -1052,15 +1059,15 @@ tre_set_empty(tre_mem_t mem) + return NULL; + + new_set[0].position = -1; +- new_set[0].code_min = EMPTY; +- new_set[0].code_max = EMPTY; ++ new_set[0].code_min = -1; ++ new_set[0].code_max = -1; + + return new_set; + } + + static tre_pos_and_tags_t * + tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, +- tre_ctype_t classt, tre_ctype_t *neg_classes, int backref) ++ tre_ctype_t class, tre_ctype_t *neg_classes, int backref) + { + tre_pos_and_tags_t *new_set; + +@@ -1071,12 +1078,12 @@ tre_set_one(tre_mem_t mem, int position, int code_min, int code_max, + new_set[0].position = position; + new_set[0].code_min = code_min; + new_set[0].code_max = code_max; +- new_set[0].classt = classt; ++ new_set[0].class = class; + new_set[0].neg_classes = neg_classes; + new_set[0].backref = backref; + new_set[1].position = -1; +- new_set[1].code_min = EMPTY; +- new_set[1].code_max = EMPTY; ++ new_set[1].code_min = -1; ++ new_set[1].code_max = -1; + + return new_set; + } +@@ -1103,7 +1110,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1].code_min = set1[s1].code_min; + new_set[s1].code_max = set1[s1].code_max; + new_set[s1].assertions = set1[s1].assertions | assertions; +- new_set[s1].classt = set1[s1].classt; ++ new_set[s1].class = set1[s1].class; + new_set[s1].neg_classes = set1[s1].neg_classes; + new_set[s1].backref = set1[s1].backref; + if (set1[s1].tags == NULL && tags == NULL) +@@ -1148,7 +1155,7 @@ tre_set_union(tre_mem_t mem, tre_pos_and_tags_t *set1, tre_pos_and_tags_t *set2, + new_set[s1 + s2].code_max = set2[s2].code_max; + /* XXX - why not | assertions here as well? */ + new_set[s1 + s2].assertions = set2[s2].assertions; +- new_set[s1 + s2].classt = set2[s2].classt; ++ new_set[s1 + s2].class = set2[s2].class; + new_set[s1 + s2].neg_classes = set2[s2].neg_classes; + new_set[s1 + s2].backref = set2[s2].backref; + if (set2[s2].tags == NULL) +@@ -1231,7 +1238,7 @@ tre_match_empty(tre_stack_t *stack, tre_ast_node_t *node, int *tags, + break; + if (tags[i] < 0) + { +- tags[i] = lit->code_max; ++ tags[i] = (int)lit->code_max; + tags[i + 1] = -1; + } + } +@@ -1373,7 +1380,7 @@ tre_compute_nfl(tre_mem_t mem, tre_stack_t *stack, tre_ast_node_t *tree) + node->lastpos = tre_set_one(mem, lit->position, + (int)lit->code_min, + (int)lit->code_max, +- lit->u.classt, lit->neg_classes, ++ lit->u.class, lit->neg_classes, + -1); + if (!node->lastpos) + return REG_ESPACE; +@@ -1614,12 +1621,12 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + (trans + 1)->state = NULL; + /* Use the character ranges, assertions, etc. from `p1' for + the transition from `p1' to `p2'. */ +- trans->code_min = p1->code_min; +- trans->code_max = p1->code_max; ++ trans->code_min = (tre_cint_t) p1->code_min; ++ trans->code_max = (tre_cint_t) p1->code_max; + trans->state = transitions + offs[p2->position]; + trans->state_id = p2->position; + trans->assertions = p1->assertions | p2->assertions +- | (p1->classt ? ASSERT_CHAR_CLASS : 0) ++ | (p1->class ? ASSERT_CHAR_CLASS : 0) + | (p1->neg_classes != NULL ? ASSERT_CHAR_CLASS_NEG : 0); + if (p1->backref >= 0) + { +@@ -1629,7 +1636,7 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + trans->assertions |= ASSERT_BACKREF; + } + else +- trans->u.classt = p1->classt; ++ trans->u.class = p1->class; + if (p1->neg_classes != NULL) + { + for (i = 0; p1->neg_classes[i] != (tre_ctype_t)0; i++); +@@ -1743,8 +1750,8 @@ tre_make_trans(tre_pos_and_tags_t *p1, tre_pos_and_tags_t *p2, + DPRINT((", assert %d", trans->assertions)); + if (trans->assertions & ASSERT_BACKREF) + DPRINT((", backref %d", trans->u.backref)); +- else if (trans->u.classt) +- DPRINT((", class %ld", (long)trans->u.classt)); ++ else if (trans->u.class) ++ DPRINT((", class %ld", (long)trans->u.class)); + if (trans->neg_classes) + DPRINT((", neg_classes %p", trans->neg_classes)); + if (trans->params) +@@ -1861,10 +1868,10 @@ tre_ast_to_tnfa(tre_ast_node_t *node, tre_tnfa_transition_t *transitions, + do \ + { \ + errcode = err; \ +- if (/*CONSTCOND*/1) \ ++ if (/*CONSTCOND*/(void)1,1) \ + goto error_exit; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + + int +@@ -2050,7 +2057,7 @@ tre_compile(regex_t *preg, const tre_char_t *regex, size_t n, int cflags) + if (TRE_MB_CUR_MAX == 1 && !tmp_ast_l->nullable) + { + int count = 0; +- int k; /* [i_a] */ ++ tre_cint_t k; + DPRINT(("Characters that can start a match:")); + tnfa->firstpos_chars = xcalloc(256, sizeof(char)); + if (tnfa->firstpos_chars == NULL) +@@ -2310,15 +2317,7 @@ tre_config(int query, void *result) + case TRE_CONFIG_VERSION: + *string_result = TRE_VERSION; + return REG_OK; +- +- case TRE_MB_CUR_MAX_VALUE: /* [i_a] */ +-#if defined(TRE_MB_CUR_MAX) +- *int_result = TRE_MB_CUR_MAX; +-#else +- *int_result = 1; +-#endif +- break; +- } ++ } + + return REG_NOMATCH; + } +diff --git a/src/extra/tre/tre-compile.h b/src/extra/tre/tre-compile.h +index 0d81cf2..51d5ac9 100644 +--- a/src/extra/tre/tre-compile.h ++++ b/src/extra/tre/tre-compile.h +@@ -12,16 +12,11 @@ + + typedef struct { + int position; +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ +- tre_cint_t code_min; +- tre_cint_t code_max; +-#else + int code_min; + int code_max; +-#endif + int *tags; + int assertions; +- tre_ctype_t classt; ++ tre_ctype_t class; + tre_ctype_t *neg_classes; + int backref; + int *params; +diff --git a/src/extra/tre/tre-internal.h b/src/extra/tre/tre-internal.h +index c1300ac..822998e 100644 +--- a/src/extra/tre/tre-internal.h ++++ b/src/extra/tre/tre-internal.h +@@ -22,9 +22,9 @@ + + #ifdef TRE_DEBUG + #include +-#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/0) ++#define DPRINT(msg) do {printf msg; fflush(stdout);} while(/*CONSTCOND*/(void)0,0) + #else /* !TRE_DEBUG */ +-#define DPRINT(msg) do { } while(/*CONSTCOND*/0) ++#define DPRINT(msg) do { } while(/*CONSTCOND*/(void)0,0) + #endif /* !TRE_DEBUG */ + + #define elementsof(x) ( sizeof(x) / sizeof(x[0]) ) +@@ -151,13 +151,8 @@ typedef struct tnfa_transition tre_tnfa_transition_t; + + struct tnfa_transition { + /* Range of accepted characters. */ +-#if 0 /* [i_a] must be able to carry the full span of all [Unicode] character codes *PLUS* these 'specials': TAG, PARAMETER, BACKREF, ASSERTION and EMPTY */ + tre_cint_t code_min; + tre_cint_t code_max; +-#else +- int code_min; +- int code_max; +-#endif + /* Pointer to the destination state. */ + tre_tnfa_transition_t *state; + /* ID number of the destination state. */ +@@ -171,7 +166,7 @@ struct tnfa_transition { + /* Assertion parameters. */ + union { + /* Character class assertion. */ +- tre_ctype_t classt; ++ tre_ctype_t class; + /* Back reference assertion. */ + int backref; + } u; +diff --git a/src/extra/tre/tre-match-approx.c b/src/extra/tre/tre-match-approx.c +index 6011114..f08cd0f 100644 +--- a/src/extra/tre/tre-match-approx.c ++++ b/src/extra/tre/tre-match-approx.c +@@ -328,7 +328,7 @@ tre_tnfa_run_approx(const tre_tnfa_t *tnfa, const void *string, int len, + GET_NEXT_WCHAR(); + pos = 0; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + DPRINT(("%03d:%2lc/%05d\n", pos, (tre_cint_t)next_c, (int)next_c)); + +diff --git a/src/extra/tre/tre-match-backtrack.c b/src/extra/tre/tre-match-backtrack.c +index 9630e81..9dd7e94 100644 +--- a/src/extra/tre/tre-match-backtrack.c ++++ b/src/extra/tre/tre-match-backtrack.c +@@ -116,7 +116,7 @@ typedef struct tre_backtrack_struct { + #ifdef TRE_USE_ALLOCA + #define tre_bt_mem_new tre_mem_newa + #define tre_bt_mem_alloc tre_mem_alloca +-#define tre_bt_mem_destroy(obj) do { } while (0) ++#define tre_bt_mem_destroy(obj) do { } while (0,0) + #else /* !TRE_USE_ALLOCA */ + #define tre_bt_mem_new tre_mem_new + #define tre_bt_mem_alloc tre_mem_alloc +@@ -173,7 +173,7 @@ typedef struct tre_backtrack_struct { + stack->item.tags[i] = (_tags)[i]; \ + BT_STACK_MBSTATE_IN; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define BT_STACK_POP() \ + do \ +@@ -186,13 +186,13 @@ typedef struct tre_backtrack_struct { + str_byte = stack->item.str_byte; \ + BT_STACK_WIDE_OUT; \ + state = stack->item.state; \ +- next_c = (tre_char_t)stack->item.next_c; \ ++ next_c = (tre_char_t) stack->item.next_c; \ + for (i = 0; i < tnfa->num_tags; i++) \ + tags[i] = stack->item.tags[i]; \ + BT_STACK_MBSTATE_OUT; \ + stack = stack->prev; \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #undef MIN + #define MIN(a, b) ((a) <= (b) ? (a) : (b)) +@@ -372,7 +372,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + if (state == NULL) + goto backtrack; + +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + tre_tnfa_transition_t *next_state; + int empty_br_match; +@@ -632,7 +632,7 @@ tre_tnfa_run_backtrack(const tre_tnfa_t *tnfa, const void *string, + } + } + DPRINT(("restarting from next start position\n")); +- next_c = (tre_char_t)next_c_start; ++ next_c = (tre_char_t) next_c_start; + #ifdef TRE_MBSTATE + mbstate = mbstate_start; + #endif /* TRE_MBSTATE */ +diff --git a/src/extra/tre/tre-match-parallel.c b/src/extra/tre/tre-match-parallel.c +index ddb9fda..6696d11 100644 +--- a/src/extra/tre/tre-match-parallel.c ++++ b/src/extra/tre/tre-match-parallel.c +@@ -269,7 +269,7 @@ tre_tnfa_run_parallel(const tre_tnfa_t *tnfa, const void *string, int len, + DPRINT(("-------------+------------------------------------------------\n")); + + reach_next_i = reach_next; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + /* If no match found yet, add the initial states to `reach_next'. */ + if (match_eo < 0) +diff --git a/src/extra/tre/tre-match-utils.h b/src/extra/tre/tre-match-utils.h +index 7d19c21..d0a4214 100644 +--- a/src/extra/tre/tre-match-utils.h ++++ b/src/extra/tre/tre-match-utils.h +@@ -76,7 +76,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #else /* !TRE_MULTIBYTE */ + +@@ -107,7 +107,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_MULTIBYTE */ + +@@ -132,7 +132,7 @@ + str_user_end = str_source->get_next_char(&next_c, &pos_add_next, \ + str_source->context); \ + } \ +- } while(/*CONSTCOND*/0) ++ } while(/*CONSTCOND*/(void)0,0) + + #endif /* !TRE_WCHAR */ + +@@ -161,11 +161,11 @@ + #define CHECK_CHAR_CLASSES(trans_i, tnfa, eflags) \ + (((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && !(tnfa->cflags & REG_ICASE) \ +- && !tre_isctype((tre_cint_t)prev_c, trans_i->u.classt)) \ ++ && !tre_isctype((tre_cint_t)prev_c, trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS) \ + && (tnfa->cflags & REG_ICASE) \ +- && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.classt) \ +- && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.classt)) \ ++ && !tre_isctype(tre_tolower((tre_cint_t)prev_c),trans_i->u.class) \ ++ && !tre_isctype(tre_toupper((tre_cint_t)prev_c),trans_i->u.class)) \ + || ((trans_i->assertions & ASSERT_CHAR_CLASS_NEG) \ + && tre_neg_char_classes_match(trans_i->neg_classes,(tre_cint_t)prev_c,\ + tnfa->cflags & REG_ICASE))) +diff --git a/src/extra/tre/tre-mem.c b/src/extra/tre/tre-mem.c +index 51b630c..67ba676 100644 +--- a/src/extra/tre/tre-mem.c ++++ b/src/extra/tre/tre-mem.c +@@ -111,8 +111,8 @@ tre_mem_alloc_impl(tre_mem_t mem, int provided, void *provided_block, + block_size = size * 8; + else + block_size = TRE_MEM_BLOCK_SIZE; +- DPRINT(("tre_mem_alloc: allocating new %u byte block\n", +- (unsigned int)block_size)); ++ DPRINT(("tre_mem_alloc: allocating new %lu byte block\n", ++ (unsigned long)block_size)); + l = xmalloc(sizeof(*l)); + if (l == NULL) + { +diff --git a/src/extra/tre/tre-parse.c b/src/extra/tre/tre-parse.c +index 50d0438..86ccad6 100644 +--- a/src/extra/tre/tre-parse.c ++++ b/src/extra/tre/tre-parse.c +@@ -123,23 +123,22 @@ tre_new_item(tre_mem_t mem, int min, int max, int *i, int *max_i, + + /* Expands a character class to character ranges. */ + static reg_errcode_t +-tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, ++tre_expand_ctype(tre_mem_t mem, tre_ctype_t class, tre_ast_node_t ***items, + int *i, int *max_i, int cflags) + { + reg_errcode_t status = REG_OK; + tre_cint_t c; +- tre_cint_t j; +- int min = EMPTY, max = 0; ++ int j, min = -1, max = 0; + //assert(TRE_MB_CUR_MAX == 1); It is the ctx->cur_max that matters + + DPRINT((" expanding class to character ranges\n")); + for (j = 0; (j < 256) && (status == REG_OK); j++) + { +- c = j; +- if (tre_isctype(c, classt) ++ c = (tre_cint_t) j; ++ if (tre_isctype(c, class) + || ((cflags & REG_ICASE) +- && (tre_isctype(tre_tolower(c), classt) +- || tre_isctype(tre_toupper(c), classt)))) ++ && (tre_isctype(tre_tolower(c), class) ++ || tre_isctype(tre_toupper(c), class)))) + { + if (min < 0) + min = c; +@@ -149,7 +148,7 @@ tre_expand_ctype(tre_mem_t mem, tre_ctype_t classt, tre_ast_node_t ***items, + { + DPRINT((" range %c (%d) to %c (%d)\n", min, min, max, max)); + status = tre_new_item(mem, min, max, i, max_i, items); +- min = EMPTY; ++ min = -1; + } + } + if (min >= 0 && status == REG_OK) +@@ -164,7 +163,7 @@ tre_compare_items(const void *a, const void *b) + const tre_ast_node_t *node_a = *(tre_ast_node_t * const *)a; + const tre_ast_node_t *node_b = *(tre_ast_node_t * const *)b; + tre_literal_t *l_a = node_a->obj, *l_b = node_b->obj; +- int a_min = l_a->code_min, b_min = l_b->code_min; ++ long a_min = l_a->code_min, b_min = l_b->code_min; + + if (a_min < b_min) + return -1; +@@ -255,7 +254,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + const tre_char_t *re = ctx->re; + reg_errcode_t status = REG_OK; +- tre_ctype_t classt = (tre_ctype_t)0; ++ tre_ctype_t class = (tre_ctype_t)0; + int i = *num_items; + int max_i = *items_size; + int skip; +@@ -278,7 +277,7 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + { + tre_cint_t min = 0, max = 0; + +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + if (re + 2 < ctx->re_end + && *(re + 1) == CHAR_MINUS && *(re + 2) != CHAR_RBRACKET) + { +@@ -330,15 +329,15 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + #endif /* !TRE_WCHAR */ + tmp_str[len] = '\0'; + DPRINT((" class name: %s\n", tmp_str)); +- classt = tre_ctype(tmp_str); +- if (!classt) ++ class = tre_ctype(tmp_str); ++ if (!class) + status = REG_ECTYPE; + /* Optimize character classes for 8 bit character sets. */ + if (status == REG_OK && ctx->cur_max == 1) + { +- status = tre_expand_ctype(ctx->mem, classt, items, ++ status = tre_expand_ctype(ctx->mem, class, items, + &i, &max_i, ctx->cflags); +- classt = (tre_ctype_t)0; ++ class = (tre_ctype_t)0; + skip = 1; + } + re = endptr + 2; +@@ -361,22 +360,22 @@ tre_parse_bracket_items(tre_parse_ctx_t *ctx, int negate, + if (status != REG_OK) + break; + +- if (classt && negate) ++ if (class && negate) + if (*num_neg_classes >= MAX_NEG_CLASSES) + status = REG_ESPACE; + else +- neg_classes[(*num_neg_classes)++] = classt; ++ neg_classes[(*num_neg_classes)++] = class; + else if (!skip) + { + status = tre_new_item(ctx->mem, min, max, &i, &max_i, items); + if (status != REG_OK) + break; +- ((tre_literal_t*)((*items)[i-1])->obj)->u.classt = classt; ++ ((tre_literal_t*)((*items)[i-1])->obj)->u.class = class; + } + + /* Add opposite-case counterpoints if REG_ICASE is present. + This is broken if there are more than two "same" characters. */ +- if (ctx->cflags & REG_ICASE && !classt && status == REG_OK && !skip) ++ if (ctx->cflags & REG_ICASE && !class && status == REG_OK && !skip) + { + tre_cint_t cmin, ccurr; + +@@ -455,11 +454,11 @@ tre_parse_bracket(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + { + int min, max; + tre_literal_t *l = items[j]->obj; +- min = l->code_min; +- max = l->code_max; ++ min = (int) l->code_min; ++ max = (int) l->code_max; + + DPRINT(("item: %d - %d, class %p, curr_max = %d\n", +- (int)l->code_min, (int)l->code_max, (void *)l->u.classt, curr_max)); ++ (int)l->code_min, (int)l->code_max, (void *)l->u.class, curr_max)); + + if (negate) + { +@@ -831,7 +830,7 @@ tre_parse_bound(tre_parse_ctx_t *ctx, tre_ast_node_t **result) + /* Create the AST node(s). */ + if (min == 0 && max == 0) + { +- *result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ *result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (*result == NULL) + return REG_ESPACE; + } +@@ -1212,7 +1211,7 @@ tre_parse(tre_parse_ctx_t *ctx) + DPRINT(("tre_parse: extension: '%.*" STRF "\n", + REST(ctx->re))); + ctx->re += 2; +- while (/*CONSTCOND*/1) ++ while (/*CONSTCOND*/(void)1,1) + { + if (*ctx->re == L'i') + { +@@ -1352,7 +1351,7 @@ tre_parse(tre_parse_ctx_t *ctx) + subexpression was closed. POSIX leaves the meaning of + this to be implementation-defined. We interpret this as + an empty expression (which matches an empty string). */ +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (result == NULL) + return REG_ESPACE; + if (!(ctx->cflags & REG_EXTENDED)) +@@ -1645,7 +1644,7 @@ tre_parse(tre_parse_ctx_t *ctx) + { + DPRINT(("tre_parse: empty: '%.*" STRF "'\n", + REST(ctx->re))); +- result = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ result = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (!result) + return REG_ESPACE; + break; +@@ -1715,7 +1714,7 @@ tre_parse(tre_parse_ctx_t *ctx) + if (result->submatch_id >= 0) + { + tre_ast_node_t *n, *tmp_node; +- n = tre_ast_new_literal(ctx->mem, EMPTY, EMPTY, -1); ++ n = tre_ast_new_literal(ctx->mem, EMPTY, -1, -1); + if (n == NULL) + return REG_ESPACE; + tmp_node = tre_ast_new_catenation(ctx->mem, n, result); +diff --git a/src/extra/tre/tre-stack.h b/src/extra/tre/tre-stack.h +index 7d11c5e..a1acbe7 100644 +--- a/src/extra/tre/tre-stack.h ++++ b/src/extra/tre/tre-stack.h +@@ -54,7 +54,7 @@ declare_popf(int, int); + { \ + status = tre_stack_push_ ## typetag(s, value); \ + } \ +- while (/*CONSTCOND*/0) ++ while (/*CONSTCOND*/(void)0,0) + + #define STACK_PUSHX(s, typetag, value) \ + { \ +diff --git a/src/extra/tre/tre.h b/src/extra/tre/tre.h +index 9d7d3a7..128475d 100644 +--- a/src/extra/tre/tre.h ++++ b/src/extra/tre/tre.h +@@ -137,14 +137,6 @@ extern int + tre_regexec(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + +-extern size_t +-tre_regerror(int errcode, const regex_t *preg, char *errbuf, +- size_t errbuf_size); +- +-extern void +-tre_regfree(regex_t *preg); +- +-/* R additions */ + extern int + tre_regcompb(regex_t *preg, const char *regex, int cflags); + +@@ -152,6 +144,13 @@ extern int + tre_regexecb(const regex_t *preg, const char *string, size_t nmatch, + regmatch_t pmatch[], int eflags); + ++extern size_t ++tre_regerror(int errcode, const regex_t *preg, char *errbuf, ++ size_t errbuf_size); ++ ++extern void ++tre_regfree(regex_t *preg); ++ + #ifdef TRE_WCHAR + #ifdef HAVE_WCHAR_H + #include +@@ -223,7 +222,10 @@ extern int + tre_regaexec(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); + +-/* R addition */ ++extern int ++tre_reganexec(const regex_t *preg, const char *string, size_t len, ++ regamatch_t *match, regaparams_t params, int eflags); ++ + extern int + tre_regaexecb(const regex_t *preg, const char *string, + regamatch_t *match, regaparams_t params, int eflags); +@@ -279,8 +281,7 @@ enum { + TRE_CONFIG_WCHAR, + TRE_CONFIG_MULTIBYTE, + TRE_CONFIG_SYSTEM_ABI, +- TRE_CONFIG_VERSION, +- TRE_MB_CUR_MAX_VALUE /* [i_a] - derived from MULTIBYTE and WCHAR, but still handy to have: no need to copy logic in TRE header files, etc. in order to know this */ ++ TRE_CONFIG_VERSION + }; + + /* Returns 1 if the compiled pattern has back references, 0 if not. */ diff --git a/builder/patches/README.md b/builder/patches/README.md index 3276631..0d6e43a 100644 --- a/builder/patches/README.md +++ b/builder/patches/README.md @@ -7,3 +7,7 @@ all platforms, create a patch file at `patches/R-${R_VERSION}.patch` (such as To add a patch for an R version on a specific platform create a patch file at `patches/R-${R_VERSION}-${OS_IDENTIFIER}.patch` (such as `patches/R-3.3.0-centos-8.patch`). + +To add a patch for an R version on a specific architecture, create a patch +file at `patches/R-${R_VERSION}-.patch`, where `` can be +`x86_64` or `aarch64` (e.g. `patches/R-3.3.0-aarch64.patch`). From 5f5418baf1d9011da7b8c120cca9869c1fb4e2ec Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Thu, 31 Aug 2023 10:57:41 -0400 Subject: [PATCH 080/105] Encrypt the ebs and use IMDSv2, with the hop limit of 2 since ECS --- serverless-resources.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index 9e8f6db..8766957 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -84,6 +84,10 @@ rBuildsEcsLaunchTemplate: Ebs: VolumeType: gp3 VolumeSize: 96 + Encrypted: true + MetadataOptions: + HttpTokens: required + HttpPutResponseHopLimit: 2 rBuildsBatchComputeEnvironment: Type: AWS::Batch::ComputeEnvironment From a641169eeae85adcc31f04d9fbd0f2d8af9162fe Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Fri, 1 Sep 2023 10:36:00 -0400 Subject: [PATCH 081/105] solve the ECS.5 security hub error, root filesystem should be read only --- serverless-resources.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index 8766957..3496c4c 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -147,6 +147,7 @@ rBuildsBatchJobDefinitionUbuntu2004: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionUbuntu2204: @@ -161,6 +162,7 @@ rBuildsBatchJobDefinitionUbuntu2204: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian10: @@ -175,6 +177,7 @@ rBuildsBatchJobDefinitionDebian10: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian11: @@ -189,6 +192,7 @@ rBuildsBatchJobDefinitionDebian11: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian12: @@ -203,6 +207,7 @@ rBuildsBatchJobDefinitionDebian12: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos7: @@ -217,6 +222,7 @@ rBuildsBatchJobDefinitionCentos7: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos8: @@ -231,6 +237,7 @@ rBuildsBatchJobDefinitionCentos8: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionRhel9: @@ -245,6 +252,7 @@ rBuildsBatchJobDefinitionRhel9: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse154: @@ -259,6 +267,7 @@ rBuildsBatchJobDefinitionOpensuse154: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora37: @@ -273,6 +282,7 @@ rBuildsBatchJobDefinitionFedora37: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora38: @@ -287,6 +297,7 @@ rBuildsBatchJobDefinitionFedora38: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" + ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 From dab250f9cb9740bc7180acb14c3c66cd707eb3ef Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Fri, 1 Sep 2023 10:40:06 -0400 Subject: [PATCH 082/105] explicitly set privileged=False to attempt to quiet security hub finding ECS.1 --- serverless-resources.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index 3496c4c..9b651e5 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -147,6 +147,7 @@ rBuildsBatchJobDefinitionUbuntu2004: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -162,6 +163,7 @@ rBuildsBatchJobDefinitionUbuntu2204: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -177,6 +179,7 @@ rBuildsBatchJobDefinitionDebian10: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -192,6 +195,7 @@ rBuildsBatchJobDefinitionDebian11: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -207,6 +211,7 @@ rBuildsBatchJobDefinitionDebian12: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -222,6 +227,7 @@ rBuildsBatchJobDefinitionCentos7: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -237,6 +243,7 @@ rBuildsBatchJobDefinitionCentos8: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -252,6 +259,7 @@ rBuildsBatchJobDefinitionRhel9: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -267,6 +275,7 @@ rBuildsBatchJobDefinitionOpensuse154: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -282,6 +291,7 @@ rBuildsBatchJobDefinitionFedora37: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -297,6 +307,7 @@ rBuildsBatchJobDefinitionFedora38: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" + Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 From dc89efcd1c947fda2de7fd571b3fdf2112f6ef05 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Fri, 1 Sep 2023 11:00:45 -0400 Subject: [PATCH 083/105] It turns out we can't fix ECS.1 as far as I can tell, we cannot change the networkmode at all unless we're using eks. https://docs.aws.amazon.com/batch/latest/userguide/job_definition_parameters.html Revert "explicitly set privileged=False to attempt to quiet security hub finding ECS.1" This reverts commit dab250f9cb9740bc7180acb14c3c66cd707eb3ef. --- serverless-resources.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 9b651e5..3496c4c 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -147,7 +147,6 @@ rBuildsBatchJobDefinitionUbuntu2004: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -163,7 +162,6 @@ rBuildsBatchJobDefinitionUbuntu2204: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -179,7 +177,6 @@ rBuildsBatchJobDefinitionDebian10: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -195,7 +192,6 @@ rBuildsBatchJobDefinitionDebian11: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -211,7 +207,6 @@ rBuildsBatchJobDefinitionDebian12: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -227,7 +222,6 @@ rBuildsBatchJobDefinitionCentos7: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -243,7 +237,6 @@ rBuildsBatchJobDefinitionCentos8: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -259,7 +252,6 @@ rBuildsBatchJobDefinitionRhel9: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -275,7 +267,6 @@ rBuildsBatchJobDefinitionOpensuse154: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -291,7 +282,6 @@ rBuildsBatchJobDefinitionFedora37: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 @@ -307,7 +297,6 @@ rBuildsBatchJobDefinitionFedora38: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" - Privileged: false ReadOnlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 From c4fcfe533fcc02fcea0e2a5fe89d695e44cbb97a Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Wed, 6 Sep 2023 10:13:27 -0400 Subject: [PATCH 084/105] capitalization --- serverless-resources.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 3496c4c..6e07941 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -147,7 +147,7 @@ rBuildsBatchJobDefinitionUbuntu2004: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionUbuntu2204: @@ -162,7 +162,7 @@ rBuildsBatchJobDefinitionUbuntu2204: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian10: @@ -177,7 +177,7 @@ rBuildsBatchJobDefinitionDebian10: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian11: @@ -192,7 +192,7 @@ rBuildsBatchJobDefinitionDebian11: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian12: @@ -207,7 +207,7 @@ rBuildsBatchJobDefinitionDebian12: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos7: @@ -222,7 +222,7 @@ rBuildsBatchJobDefinitionCentos7: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos8: @@ -237,7 +237,7 @@ rBuildsBatchJobDefinitionCentos8: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionRhel9: @@ -252,7 +252,7 @@ rBuildsBatchJobDefinitionRhel9: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse154: @@ -267,7 +267,7 @@ rBuildsBatchJobDefinitionOpensuse154: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora37: @@ -282,7 +282,7 @@ rBuildsBatchJobDefinitionFedora37: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora38: @@ -297,7 +297,7 @@ rBuildsBatchJobDefinitionFedora38: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" - ReadOnlyRootFilesystem: true + ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 From f0582d6fcb12c3dc4aef5b00cc5f46d691f15875 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Wed, 6 Sep 2023 10:41:48 -0400 Subject: [PATCH 085/105] Need to write to the filesystem --- serverless-resources.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 6e07941..8766957 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -147,7 +147,6 @@ rBuildsBatchJobDefinitionUbuntu2004: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2004" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionUbuntu2204: @@ -162,7 +161,6 @@ rBuildsBatchJobDefinitionUbuntu2204: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian10: @@ -177,7 +175,6 @@ rBuildsBatchJobDefinitionDebian10: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-10" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian11: @@ -192,7 +189,6 @@ rBuildsBatchJobDefinitionDebian11: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian12: @@ -207,7 +203,6 @@ rBuildsBatchJobDefinitionDebian12: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-12" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos7: @@ -222,7 +217,6 @@ rBuildsBatchJobDefinitionCentos7: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-7" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionCentos8: @@ -237,7 +231,6 @@ rBuildsBatchJobDefinitionCentos8: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:centos-8" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionRhel9: @@ -252,7 +245,6 @@ rBuildsBatchJobDefinitionRhel9: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:rhel-9" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionOpensuse154: @@ -267,7 +259,6 @@ rBuildsBatchJobDefinitionOpensuse154: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora37: @@ -282,7 +273,6 @@ rBuildsBatchJobDefinitionFedora37: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora38: @@ -297,7 +287,6 @@ rBuildsBatchJobDefinitionFedora38: JobRoleArn: "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" - ReadonlyRootFilesystem: true Timeout: AttemptDurationSeconds: 7200 From d88e1c13ca0e17f528478cae483662d781c9e574 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Wed, 6 Sep 2023 15:35:21 -0400 Subject: [PATCH 086/105] Switch to using vpcId and creating the security group directly from within serverless --- serverless-resources.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 8766957..793a753 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -1,3 +1,12 @@ +rBuildsSecurityGroup: + Type: AWS::EC2::SecurityGroup + Properties: + GroupDescription: Security Group for the RBuilds jobs + GroupName: RBuildsJobs + VpcId: ${self:custom.vpcId} + Tags: ${self:custom.tagsList} + + rBuildsBatchIamRole: Type: AWS::IAM::Role Properties: @@ -103,7 +112,8 @@ rBuildsBatchComputeEnvironment: Version: '$Latest' SpotIamFleetRole: "Fn::GetAtt": [ rBuildsSpotFleetIamRole, Arn ] - SecurityGroupIds: ${self:custom.securityGroupIds} + SecurityGroupIds: + "Fn::GetAtt": [ rBuildsSecurityGroup, GroupId ] Subnets: ${self:custom.subnets} Type: SPOT BidPercentage: 100 From e619f3bd4053087222793932574961f0c3fa49cd Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Wed, 6 Sep 2023 16:09:47 -0400 Subject: [PATCH 087/105] Tag list is different here --- serverless-resources.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 793a753..244f186 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -4,7 +4,7 @@ rBuildsSecurityGroup: GroupDescription: Security Group for the RBuilds jobs GroupName: RBuildsJobs VpcId: ${self:custom.vpcId} - Tags: ${self:custom.tagsList} + Tags: ${self:provider.stackTags} rBuildsBatchIamRole: From 1472fe13fc990a5ad34e31b316500871dc2c7b06 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Thu, 7 Sep 2023 12:07:49 -0400 Subject: [PATCH 088/105] security groups is a list --- serverless-resources.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 244f186..d6d7ef2 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -113,7 +113,7 @@ rBuildsBatchComputeEnvironment: SpotIamFleetRole: "Fn::GetAtt": [ rBuildsSpotFleetIamRole, Arn ] SecurityGroupIds: - "Fn::GetAtt": [ rBuildsSecurityGroup, GroupId ] + - "Fn::GetAtt": [ rBuildsSecurityGroup, GroupId ] Subnets: ${self:custom.subnets} Type: SPOT BidPercentage: 100 From 21aad5acc5e778e5e0cbf946c21962c52ace1bdf Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Thu, 7 Sep 2023 17:33:02 -0400 Subject: [PATCH 089/105] support staging and production --- serverless-resources.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index d6d7ef2..acf418e 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -1,8 +1,8 @@ rBuildsSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: - GroupDescription: Security Group for the RBuilds jobs - GroupName: RBuildsJobs + GroupDescription: RBuilds jobs - ${self:provider.stage} + GroupName: RBuildsJobs-${self:provider.stage} VpcId: ${self:custom.vpcId} Tags: ${self:provider.stackTags} From 042612f906bd0b2b3b1750b52d91da3456ee1651 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Thu, 7 Sep 2023 18:53:59 -0400 Subject: [PATCH 090/105] match python-builds with new allocation strategy --- serverless-resources.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/serverless-resources.yml b/serverless-resources.yml index acf418e..1cc835c 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -106,6 +106,7 @@ rBuildsBatchComputeEnvironment: ServiceRole: "Fn::GetAtt": [ rBuildsBatchIamRole, Arn ] ComputeResources: + AllocationStrategy: BEST_FIT_PROGRESSIVE LaunchTemplate: LaunchTemplateId: Ref: rBuildsEcsLaunchTemplate From 8c0af64aeb35edc41a43bcecadd17ce6316b314f Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Fri, 8 Sep 2023 08:54:10 -0400 Subject: [PATCH 091/105] modify tags to match how we did them in python-builds and revdepcheck-cloud --- serverless-resources.yml | 4 ++-- serverless.yml | 12 +++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 1cc835c..246b33e 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -4,7 +4,7 @@ rBuildsSecurityGroup: GroupDescription: RBuilds jobs - ${self:provider.stage} GroupName: RBuildsJobs-${self:provider.stage} VpcId: ${self:custom.vpcId} - Tags: ${self:provider.stackTags} + Tags: ${self:provider.tagsList} rBuildsBatchIamRole: @@ -131,7 +131,7 @@ rBuildsBatchComputeEnvironment: - c5a.xlarge - c5a.2xlarge Ec2KeyPair: ${self:custom.ec2KeyPair} - Tags: ${self:provider.stackTags} + Tags: ${self:provider.tagsMap} MinvCpus: 0 DesiredvCpus: 0 MaxvCpus: 256 diff --git a/serverless.yml b/serverless.yml index f857a4e..57a1827 100644 --- a/serverless.yml +++ b/serverless.yml @@ -22,7 +22,17 @@ provider: stage: ${opt:stage, self:custom.defaultStage} deploymentBucket: name: ${self:custom.deploymentBucket} - stackTags: ${self:custom.${self:provider.stage}.stackTags} + tagsList: + - Key: rs:project + Value: ${self:custom.${self:provider.stage}.tags.project} + - Key: rs:owner + Value: ${self:custom.${self:provider.stage}.tags.owner} + - Key: rs:environment + Value: ${self:custom.${self:provider.stage}.tags.environment} + tagsMap: + "rs:owner": ${self:custom.${self:provider.stage}.tags.owner} + "rs:project": ${self:custom.${self:provider.stage}.tags.project} + "rs:environment": ${self:custom.${self:provider.stage}.tags.environment} iamRoleStatements: - Effect: Allow Action: From 27576d1650e7113db050bfbbf43a0984b9c02cc7 Mon Sep 17 00:00:00 2001 From: nihara-thomas Date: Mon, 2 Oct 2023 14:19:30 -0700 Subject: [PATCH 092/105] Updated README + added package script --- README.md | 6 +++ builder/package.opensuse-155 | 100 +++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 builder/package.opensuse-155 diff --git a/README.md b/README.md index f43401f..01661ea 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,9 @@ R binaries are built for the following Linux operating systems: - CentOS 7 - Red Hat Enterprise Linux 7, 8, 9 - openSUSE 15.4 +- openSUSE 15.5 - SUSE Linux Enterprise 15 SP4 +- SUSE Linux Enterprise 15 SP5 - Fedora 37, 38 Operating systems are supported until their vendor end-of-support dates, which @@ -140,6 +142,10 @@ Download the rpm package: ```bash # openSUSE 15.4 / SLES 15 SP4 curl -O https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm + + +# openSUSE 15.5 / SLES 15 SP5 +curl -O https://cdn.posit.co/r/opensuse-155/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: diff --git a/builder/package.opensuse-155 b/builder/package.opensuse-155 new file mode 100644 index 0000000..3bd9d89 --- /dev/null +++ b/builder/package.opensuse-155 @@ -0,0 +1,100 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1 +pcre_lib='pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_lib='pcre-devel' +fi + +# Create post-install script required for OpenBLAS. +# +# On RHEL and SUSE, we link R against the internal shared BLAS to make the +# R binaries more portable and allow users to switch BLAS implementations without +# having to recompile R. We default to OpenBLAS, but users may prefer other implementations. +# +# Binary packages built against the shared BLAS are also more portable and may be used +# with the default R distributed by RHEL/SUSE, or other R installations using +# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL). +# This is especially important for RSPM's binary packages. +# +# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack), +# as those distributions use the alternatives system to swap BLAS libraries at runtime. +# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well +# for portability. +# +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS +cat <> /post-install.sh +mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep +ln -s /usr/lib64/libopenblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so +EOF + +# Create after-remove script to remove internal BLAS, which won't be cleaned up automatically. +cat <> /after-remove.sh +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} +fi +EOF + +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +arch: $(cat /tmp/arch) +release: 1 +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- fontconfig +- gcc +- gcc-c++ +- gcc-fortran +- glibc-locale +- gzip +- icu.691-devel +- libbz2-devel +- libcairo2 +- libcurl-devel +- libfreetype6 +- libgomp1 +- libjpeg62 +- libopenblas_pthreads-devel +- libpango-1_0-0 +- libreadline7 +- libtiff5 +- make +- ${pcre_lib} +- tar +- tcl +- tk +- unzip +- which +- xorg-x11 +- xorg-x11-fonts-100dpi +- xorg-x11-fonts-75dpi +- xz-devel +- zip +- zlib-devel +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +scripts: + postinstall: /post-install.sh + postremove: /after-remove.sh +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) From 59b26c876a8ccf17d7e4047c8d73f36a323f4b6e Mon Sep 17 00:00:00 2001 From: nihara-thomas Date: Mon, 2 Oct 2023 14:36:06 -0700 Subject: [PATCH 093/105] Updated README --> new platform steps --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 01661ea..bb887ae 100644 --- a/README.md +++ b/README.md @@ -253,6 +253,11 @@ make build-r-$PLATFORM ## Adding a new platform. +### README + +1. Add the new platform to the `Supported Platforms` list. +2. Add rpm package download instructions for the new platform. + ### Dockerfile Create a `builder/Dockerfile.platform-version` (where `platform-version` is `ubuntu-2204` or `centos-7`, etc.) This file must contain four major tasks: @@ -262,6 +267,10 @@ Create a `builder/Dockerfile.platform-version` (where `platform-version` is `ubu 3. The `awscli`, 1.17.10+ if installed via `pip`, for uploading tarballs to S3 4. `COPY` and `ENTRYPOINT` for the `build.sh` file in `builder/`. +### Packaging script + +Create a `builder/package.platform-version` script (where `platform-version` is `ubuntu-2204` or `centos-7`, etc.). + ### docker-compose.yml A new service in the docker-compose file named according to the `platform-version` and containing the proper entries: From 79352c9a625a608c141a48693b577d63c89ba15e Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Mon, 5 Feb 2024 15:34:07 -0500 Subject: [PATCH 094/105] Theoretically we can remove the rBuildsBatchIamRole because the AWSServiceRoleForBatch will be automatically created if we don't specify a service role for the compute environment --- serverless-resources.yml | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index b167262..28ca69b 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -6,21 +6,6 @@ rBuildsSecurityGroup: VpcId: ${self:custom.vpcId} Tags: ${self:provider.tagsList} - -rBuildsBatchIamRole: - Type: AWS::IAM::Role - Properties: - Path: /service-role/ - AssumeRolePolicyDocument: - Version: '2012-10-17' - Statement: - - Effect: Allow - Principal: - Service: - - batch.amazonaws.com - Action: sts:AssumeRole - ManagedPolicyArns: - - arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole rBuildsSpotFleetIamRole: Type: AWS::IAM::Role Properties: @@ -103,8 +88,6 @@ rBuildsBatchComputeEnvironment: DependsOn: rBuildsBatchIamRole Properties: Type: MANAGED - ServiceRole: - "Fn::GetAtt": [ rBuildsBatchIamRole, Arn ] ComputeResources: AllocationStrategy: BEST_FIT_PROGRESSIVE LaunchTemplate: @@ -135,6 +118,7 @@ rBuildsBatchComputeEnvironment: MinvCpus: 0 DesiredvCpus: 0 MaxvCpus: 256 + UpdateToLatestImageVersion: true rBuildsBatchJobQueue: Type: AWS::Batch::JobQueue From 89d27508f999f8ec0784d411906bb9b710487536 Mon Sep 17 00:00:00 2001 From: "Joshua C. Forest" Date: Mon, 5 Feb 2024 16:07:48 -0500 Subject: [PATCH 095/105] remove the dependson --- serverless-resources.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/serverless-resources.yml b/serverless-resources.yml index 28ca69b..43fc685 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -85,7 +85,6 @@ rBuildsEcsLaunchTemplate: rBuildsBatchComputeEnvironment: Type: AWS::Batch::ComputeEnvironment - DependsOn: rBuildsBatchIamRole Properties: Type: MANAGED ComputeResources: From f0e6f2e6d9cfd4c9cca1a3bc1d9a9eb340b3de84 Mon Sep 17 00:00:00 2001 From: Tiago Alves Date: Thu, 8 Feb 2024 13:01:46 +0000 Subject: [PATCH 096/105] Adds Oracle Linux support Adds Oracle Linux support in which version 9 requires different logic to enable CodeReady Builder repository which provides openblas-devel required to install R. Changes validated in both Oracle Linux 8 and 9 versions. --- install.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/install.sh b/install.sh index 3fe8440..cb6eec7 100755 --- a/install.sh +++ b/install.sh @@ -89,6 +89,10 @@ detect_os () { then distro="Rocky" fi + if [[ $(cat /etc/os-release | grep -e "^CPE_NAME\=*" | cut -f 2 -d '=') =~ cpe:/o:oracle:linux: ]] + then + distro="Oracle" + fi if [[ $(cat /etc/os-release | grep -e "^ID\=*" | cut -f 2 -d '=') == "debian" ]]; then distro="Debian" fi @@ -99,7 +103,7 @@ detect_os () { # Returns the OS version detect_os_version () { os=$1 - if [[ "${os}" =~ ^(RedHat|Alma|Rocky|Fedora)$ ]]; then + if [[ "${os}" =~ ^(RedHat|Alma|Rocky|Fedora|Oracle)$ ]]; then # Get the major version. /etc/redhat-release is used if /etc/os-release isn't available, # e.g., on CentOS/RHEL 6. if [[ -f /etc/os-release ]]; then @@ -124,7 +128,7 @@ detect_os_version () { detect_installer_type () { os=$1 case $os in - "RedHat" | "Fedora" | "CentOS" | "LEAP12" | "LEAP15" | "SLES12" | "SLES15" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "LEAP12" | "LEAP15" | "SLES12" | "SLES15" | "Amazon" | "Alma" | "Rocky" | "Oracle") echo "rpm" ;; "Ubuntu" | "Debian") @@ -165,7 +169,7 @@ download_name () { ;; esac case $os in - "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky" | "Oracle") echo "R-${version}-1-1.${rpm_arch}.rpm" ;; "Ubuntu" | "Debian") @@ -193,7 +197,7 @@ download_url () { "Fedora") echo "${CDN_URL}/fedora-${ver}/pkgs/${name}" ;; - "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "CentOS" | "Amazon" | "Alma" | "Rocky" | "Oracle") if [ "${ver}" -ge 9 ]; then echo "${CDN_URL}/rhel-${ver}/pkgs/${name}" else @@ -314,7 +318,7 @@ install_rpm () { yes="-y" fi case $os in - "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky") + "RedHat" | "Fedora" | "CentOS" | "Amazon" | "Alma" | "Rocky" | "Oracle") if ! has_sudo "yum"; then echo "Must have sudo privileges to run yum" exit 1 @@ -345,7 +349,7 @@ install_pre () { case $os in "Fedora") ;; - "RedHat" | "CentOS" | "Alma" | "Rocky") + "RedHat" | "CentOS" | "Alma" | "Rocky" | "Oracle") install_epel "${os}" "${ver}" ;; "Amazon") @@ -389,6 +393,8 @@ install_epel () { if [[ "${os}" == "RedHat" ]]; then ${SUDO} subscription-manager repos --enable "codeready-builder-for-rhel-9-$(arch)-rpms" ${SUDO} dnf install ${yes} https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm + elif [[ "${os}" == "Oracle" ]]; then + ${SUDO} dnf config-manager --set-enabled ol9_codeready_builder else ${SUDO} dnf install ${yes} dnf-plugins-core ${SUDO} dnf config-manager --set-enabled crb From 57c2e9b4a231277d2f3ed6e9247a5a37075df26d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Mon, 19 Feb 2024 19:23:32 +0100 Subject: [PATCH 097/105] Fix devel builds for libdeflate Closes #194. --- builder/package.ubuntu-2204 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index 2ae13f3..8152153 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -11,6 +11,11 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - libpcre3-dev' fi +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + cat < /tmp/nfpm.yml name: r-${R_VERSION} version: 1 @@ -35,6 +40,7 @@ depends: - libc6 - libcairo2 - libcurl4 +${deflate_libs} - libglib2.0-0 - libgomp1 - libicu-dev From 973eedc7f6c9da09f06db9a6e025d834920b5f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Mon, 19 Feb 2024 19:23:32 +0100 Subject: [PATCH 098/105] Fix devel builds for libdeflate Closes #194. --- builder/package.ubuntu-2204 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/builder/package.ubuntu-2204 b/builder/package.ubuntu-2204 index 2ae13f3..8152153 100644 --- a/builder/package.ubuntu-2204 +++ b/builder/package.ubuntu-2204 @@ -11,6 +11,11 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - libpcre3-dev' fi +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + cat < /tmp/nfpm.yml name: r-${R_VERSION} version: 1 @@ -35,6 +40,7 @@ depends: - libc6 - libcairo2 - libcurl4 +${deflate_libs} - libglib2.0-0 - libgomp1 - libicu-dev From 90b81606fd4f8294f9e74d1747e7f5850157f5fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Mon, 19 Feb 2024 14:59:37 +0100 Subject: [PATCH 099/105] The xfig() device is deprecated in R 4.4.0 So we do not test it any more. Cf. https://github.com/wch/r-source/commit/d04d9dbcf44858eeb3589a826020a6a343c210c1 --- test/test.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/test.R b/test/test.R index 8be20c1..be4144e 100644 --- a/test/test.R +++ b/test/test.R @@ -34,8 +34,10 @@ tryCatch(capabilities(), warning = function(w) { # Check graphics devices # https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/Devices.html -for (dev_name in c("png", "jpeg", "tiff", "svg", "bmp", "pdf", "postscript", - "xfig", "pictex", "cairo_pdf", "cairo_ps")) { +devices <- c("png", "jpeg", "tiff", "svg", "bmp", "pdf", "postscript", + if (getRversion() < "4.4.0") "xfig", + "pictex", "cairo_pdf", "cairo_ps") +for (dev_name in devices) { # Skip unsupported graphics devices (e.g. tiff in R >= 3.3 on CentOS 6) if (dev_name %in% names(capabilities()) && capabilities(dev_name) == FALSE) { next From 453876ff20954b2dfd2a18887a2340fada5ba5e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Mon, 19 Feb 2024 15:21:04 +0100 Subject: [PATCH 100/105] pictex device is also deprecated in R 4.4.0 Do not test that, either. [ci skip] --- test/test.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test.R b/test/test.R index be4144e..d7ace39 100644 --- a/test/test.R +++ b/test/test.R @@ -35,8 +35,8 @@ tryCatch(capabilities(), warning = function(w) { # Check graphics devices # https://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/Devices.html devices <- c("png", "jpeg", "tiff", "svg", "bmp", "pdf", "postscript", - if (getRversion() < "4.4.0") "xfig", - "pictex", "cairo_pdf", "cairo_ps") + if (getRversion() < "4.4.0") c("xfig", "pictex"), + "cairo_pdf", "cairo_ps") for (dev_name in devices) { # Skip unsupported graphics devices (e.g. tiff in R >= 3.3 on CentOS 6) if (dev_name %in% names(capabilities()) && capabilities(dev_name) == FALSE) { From 2317e4c57569ec67b83b2e22490cf09c2cfe9b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Wed, 21 Feb 2024 10:39:53 +0100 Subject: [PATCH 101/105] Fix libdeflate dep on Debian 11, 12 as well To fix up #204. --- builder/package.debian-11 | 6 ++++++ builder/package.debian-12 | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/builder/package.debian-11 b/builder/package.debian-11 index 03be1b4..ad97ab9 100644 --- a/builder/package.debian-11 +++ b/builder/package.debian-11 @@ -11,6 +11,11 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - libpcre3-dev' fi +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + cat < /tmp/nfpm.yml name: r-${R_VERSION} version: 1 @@ -36,6 +41,7 @@ depends: - libc6 - libcairo2 - libcurl4-openssl-dev +${deflate_libs} - libglib2.0-0 - libgomp1 - libicu-dev diff --git a/builder/package.debian-12 b/builder/package.debian-12 index c7673d5..79bf036 100644 --- a/builder/package.debian-12 +++ b/builder/package.debian-12 @@ -11,6 +11,11 @@ if [[ "${R_VERSION}" =~ ^3 ]]; then - libpcre3-dev' fi +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + cat < /tmp/nfpm.yml name: r-${R_VERSION} version: 1 @@ -36,6 +41,7 @@ depends: - libc6 - libcairo2 - libcurl4-openssl-dev +${deflate_libs} - libglib2.0-0 - libgomp1 - libicu-dev From c268f65b170b1730315e536c959bd311362707d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Thu, 22 Feb 2024 15:30:00 +0100 Subject: [PATCH 102/105] Add support for Fedora 39 Drop support for Fedora 37, EOL 2023-12-05. --- Makefile | 2 +- ...kerfile.fedora-37 => Dockerfile.fedora-39} | 6 ++-- builder/docker-compose.yml | 24 ++++++++-------- .../{package.fedora-37 => package.fedora-39} | 0 serverless-resources.yml | 28 +++++++++---------- serverless.yml | 6 ++-- test/docker-compose.yml | 16 +++++------ 7 files changed, 41 insertions(+), 41 deletions(-) rename builder/{Dockerfile.fedora-37 => Dockerfile.fedora-39} (96%) rename builder/{package.fedora-37 => package.fedora-39} (100%) diff --git a/Makefile b/Makefile index 1f4f6ab..7e14efd 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 opensuse-155 fedora-37 fedora-38 +PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 opensuse-155 fedora-38 fedora-39 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/builder/Dockerfile.fedora-37 b/builder/Dockerfile.fedora-39 similarity index 96% rename from builder/Dockerfile.fedora-37 rename to builder/Dockerfile.fedora-39 index ed865c4..7f6306d 100644 --- a/builder/Dockerfile.fedora-37 +++ b/builder/Dockerfile.fedora-39 @@ -1,6 +1,6 @@ -FROM fedora:37 +FROM fedora:39 -ENV OS_IDENTIFIER fedora-37 +ENV OS_IDENTIFIER fedora-39 RUN dnf -y upgrade \ && dnf -y install dnf-plugins-core \ @@ -82,7 +82,7 @@ ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk # R 3.x requires PCRE2 for Pango support on RHEL 9 ENV INCLUDE_PCRE2_IN_R_3 yes -COPY package.fedora-37 /package.sh +COPY package.fedora-39 /package.sh COPY build.sh . COPY patches /patches ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 883422a..35244f9 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -119,18 +119,6 @@ services: image: r-builds:opensuse-154 volumes: - ./integration/tmp:/tmp/output - fedora-37: - command: ./build.sh - environment: - - R_VERSION=${R_VERSION} - - R_INSTALL_PATH=${R_INSTALL_PATH} - - LOCAL_STORE=/tmp/output - build: - context: . - dockerfile: Dockerfile.fedora-37 - image: r-builds:fedora-37 - volumes: - - ./integration/tmp:/tmp/output fedora-38: command: ./build.sh environment: @@ -143,3 +131,15 @@ services: image: r-builds:fedora-38 volumes: - ./integration/tmp:/tmp/output + fedora-39: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.fedora-39 + image: r-builds:fedora-39 + volumes: + - ./integration/tmp:/tmp/output diff --git a/builder/package.fedora-37 b/builder/package.fedora-39 similarity index 100% rename from builder/package.fedora-37 rename to builder/package.fedora-39 diff --git a/serverless-resources.yml b/serverless-resources.yml index 43fc685..235ec85 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -269,20 +269,6 @@ rBuildsBatchJobDefinitionOpensuse154: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:opensuse-154" Timeout: AttemptDurationSeconds: 7200 -rBuildsBatchJobDefinitionFedora37: - Type: AWS::Batch::JobDefinition - Properties: - Type: container - ContainerProperties: - Command: - - ./build.sh - Vcpus: 4 - Memory: 4096 - JobRoleArn: - "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] - Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-37" - Timeout: - AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionFedora38: Type: AWS::Batch::JobDefinition Properties: @@ -297,6 +283,20 @@ rBuildsBatchJobDefinitionFedora38: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-38" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionFedora39: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-39" + Timeout: + AttemptDurationSeconds: 7200 # step function cloudwatch event trigger resources rBuildsEventRuleIamRole: diff --git a/serverless.yml b/serverless.yml index 7f7fef2..824c358 100644 --- a/serverless.yml +++ b/serverless.yml @@ -75,11 +75,11 @@ provider: Ref: rBuildsBatchJobDefinitionOpensuse155 JOB_DEFINITION_ARN_opensuse_154: Ref: rBuildsBatchJobDefinitionOpensuse154 - JOB_DEFINITION_ARN_fedora_37: - Ref: rBuildsBatchJobDefinitionFedora37 JOB_DEFINITION_ARN_fedora_38: Ref: rBuildsBatchJobDefinitionFedora38 - SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,opensuse-155,fedora-37,fedora-38 + JOB_DEFINITION_ARN_fedora_39: + Ref: rBuildsBatchJobDefinitionFedora39 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,opensuse-155,fedora-38,fedora-39 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 764167f..d86944d 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -79,14 +79,6 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds - fedora-37: - image: fedora:37 - command: /r-builds/test/test-yum.sh - environment: - - OS_IDENTIFIER=fedora-37 - - R_VERSION=${R_VERSION} - volumes: - - ../:/r-builds fedora-38: image: fedora:38 command: /r-builds/test/test-yum.sh @@ -95,3 +87,11 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + fedora-39: + image: fedora:39 + command: /r-builds/test/test-yum.sh + environment: + - OS_IDENTIFIER=fedora-39 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds From ed9f9433cc399b15ee01d671d96fab2b1b3c006c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sat, 24 Feb 2024 11:20:29 +0100 Subject: [PATCH 103/105] Update README for Fedora 39 update Dropping Fedora 37, now EOL, adding Fedora 39, now that the R packages are available. [ci skip] --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 40604ca..2ea5dc3 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ R binaries are built for the following Linux operating systems: - openSUSE 15.5 - SUSE Linux Enterprise 15 SP4 - SUSE Linux Enterprise 15 SP5 -- Fedora 37, 38 +- Fedora 38, 39 Operating systems are supported until their vendor end-of-support dates, which can be found on the [Posit Platform Support](https://posit.co/about/platform-support/) @@ -157,11 +157,11 @@ sudo zypper --no-gpg-checks install R-${R_VERSION}-1-1.x86_64.rpm Download the rpm package: ```bash -# Fedora 37 -curl -O https://cdn.posit.co/r/fedora-37/pkgs/R-${R_VERSION}-1-1.x86_64.rpm - # Fedora 38 curl -O https://cdn.posit.co/r/fedora-38/pkgs/R-${R_VERSION}-1-1.x86_64.rpm + +# Fedora 39 +curl -O https://cdn.posit.co/r/fedora-39/pkgs/R-${R_VERSION}-1-1.x86_64.rpm ``` Then install the package: From 490e1513d3962ec368b68e11a6601ee24da30244 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Thu, 29 Feb 2024 13:28:58 -0600 Subject: [PATCH 104/105] Update versions.json generation for addition of .tar.xz source files --- handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/handler.py b/handler.py index f2f9fc9..8b04681 100644 --- a/handler.py +++ b/handler.py @@ -52,7 +52,7 @@ def _cran_r_versions(url): r_versions = [] for link in soup.find_all('a'): href = link.get('href') - if 'R-' in href: + if href.startswith('R-') and href.endswith('.tar.gz'): v = href.replace('.tar.gz', '').replace('R-', '') if '-revised' not in v: # reject 3.2.4-revised r_versions.append(v) From 111621f79a47ba8ca0e1e41f00e55a5bcfbe0a10 Mon Sep 17 00:00:00 2001 From: Greg Lin Date: Fri, 12 Apr 2024 19:21:34 -0500 Subject: [PATCH 105/105] Add support for Ubuntu 24.04 --- Makefile | 2 +- README.md | 7 +++- builder/Dockerfile.ubuntu-2404 | 33 +++++++++++++++ builder/docker-compose.yml | 12 ++++++ builder/package.ubuntu-2404 | 77 ++++++++++++++++++++++++++++++++++ serverless-resources.yml | 14 +++++++ serverless.yml | 4 +- test/docker-compose.yml | 8 ++++ 8 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 builder/Dockerfile.ubuntu-2404 create mode 100644 builder/package.ubuntu-2404 diff --git a/Makefile b/Makefile index 7e14efd..1c35ebe 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 opensuse-155 fedora-38 fedora-39 +PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-154 opensuse-155 fedora-38 fedora-39 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/README.md b/README.md index 2ea5dc3..5e9cdae 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ bug, or ask questions on [Posit Community](https://community.rstudio.com). R binaries are built for the following Linux operating systems: -- Ubuntu 20.04, 22.04 +- Ubuntu 20.04, 22.04, 24.04 - Debian 10, 11, 12 - CentOS 7 - Red Hat Enterprise Linux 7, 8, 9 @@ -51,7 +51,7 @@ bash -c "$(curl -L https://rstd.io/r-install)" Define the version of R that you want to install. Available versions of R can be found here: https://cdn.posit.co/r/versions.json ```bash -R_VERSION=4.1.3 +R_VERSION=4.3.3 ``` ### Download and install R @@ -65,6 +65,9 @@ curl -O https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb # Ubuntu 22.04 curl -O https://cdn.posit.co/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb +# Ubuntu 24.04 +curl -O https://cdn.posit.co/r/ubuntu-2404/pkgs/r-${R_VERSION}_1_amd64.deb + # Debian 10 curl -O https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb diff --git a/builder/Dockerfile.ubuntu-2404 b/builder/Dockerfile.ubuntu-2404 new file mode 100644 index 0000000..d5bbdf8 --- /dev/null +++ b/builder/Dockerfile.ubuntu-2404 @@ -0,0 +1,33 @@ +FROM ubuntu:noble + +ENV OS_IDENTIFIER ubuntu-2404 + +RUN set -x \ + && sed -i "s|Types: deb|Types: deb deb-src|g" /etc/apt/sources.list.d/ubuntu.sources \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt update \ + && apt install -y curl libcurl4-openssl-dev libicu-dev libopenblas0-pthread libpcre2-dev libpcre3-dev unzip wget \ + && apt build-dep -y r-base + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ + apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ + rm "nfpm_$(dpkg --print-architecture).deb" + +RUN chmod 0777 /opt + +# Override the default pager used by R +ENV PAGER /usr/bin/pager + +# R 3.x requires PCRE2 for Pango support on Ubuntu 24 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.ubuntu-2404 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 35244f9..9450da0 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -23,6 +23,18 @@ services: image: r-builds:ubuntu-2204 volumes: - ./integration/tmp:/tmp/output + ubuntu-2404: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.ubuntu-2404 + image: r-builds:ubuntu-2404 + volumes: + - ./integration/tmp:/tmp/output debian-10: command: ./build.sh environment: diff --git a/builder/package.ubuntu-2404 b/builder/package.ubuntu-2404 new file mode 100644 index 0000000..8973464 --- /dev/null +++ b/builder/package.ubuntu-2404 @@ -0,0 +1,77 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On Ubuntu 24, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- libpcre2-dev' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- libpcre2-dev +- libpcre3-dev' +fi + +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: universe/math +priority: optional +arch: $(dpkg --print-architecture) +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPL-2 +deb: + fields: + Bugs: https://github.com/rstudio/r-builds/issues +depends: +- g++ +- gcc +- gfortran +- libbz2-dev +- libc6 +- libcairo2 +- libcurl4t64 +${deflate_libs} +- libglib2.0-0t64 +- libgomp1 +- libicu-dev +- libjpeg8 +- liblzma-dev +- libopenblas-dev +- libpango-1.0-0 +- libpangocairo-1.0-0 +- libpaper-utils +${pcre_libs} +- libpng16-16t64 +- libreadline8t64 +- libtcl8.6 +- libtiff6 +- libtirpc-dev +- libtk8.6 +- libx11-6 +- libxt6t64 +- make +- ucf +- unzip +- zip +- zlib1g-dev +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p deb \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.deb | head -1) diff --git a/serverless-resources.yml b/serverless-resources.yml index 235ec85..c2f7640 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -157,6 +157,20 @@ rBuildsBatchJobDefinitionUbuntu2204: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2204" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionUbuntu2404: + Type: AWS::Batch::JobDefinition + Properties: + Type: container + ContainerProperties: + Command: + - ./build.sh + Vcpus: 4 + Memory: 4096 + JobRoleArn: + "Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ] + Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:ubuntu-2404" + Timeout: + AttemptDurationSeconds: 7200 rBuildsBatchJobDefinitionDebian10: Type: AWS::Batch::JobDefinition Properties: diff --git a/serverless.yml b/serverless.yml index 824c358..621550b 100644 --- a/serverless.yml +++ b/serverless.yml @@ -59,6 +59,8 @@ provider: Ref: rBuildsBatchJobDefinitionUbuntu2004 JOB_DEFINITION_ARN_ubuntu_2204: Ref: rBuildsBatchJobDefinitionUbuntu2204 + JOB_DEFINITION_ARN_ubuntu_2404: + Ref: rBuildsBatchJobDefinitionUbuntu2404 JOB_DEFINITION_ARN_debian_10: Ref: rBuildsBatchJobDefinitionDebian10 JOB_DEFINITION_ARN_debian_11: @@ -79,7 +81,7 @@ provider: Ref: rBuildsBatchJobDefinitionFedora38 JOB_DEFINITION_ARN_fedora_39: Ref: rBuildsBatchJobDefinitionFedora39 - SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,opensuse-155,fedora-38,fedora-39 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,ubuntu-2404,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-154,opensuse-155,fedora-38,fedora-39 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index d86944d..5618337 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -15,6 +15,14 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + ubuntu-2404: + image: ubuntu:noble + command: /r-builds/test/test-apt.sh + environment: + - OS_IDENTIFIER=ubuntu-2404 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds debian-12: image: debian:bookworm command: /r-builds/test/test-apt.sh