├── templates ├── per-java │ ├── compat │ ├── source │ │ └── format │ ├── adoptium_jdk.csh │ ├── adoptium_jdk.sh │ ├── adoptium-javaX-installer.dirs │ ├── adoptium-javaX-set-default.install │ ├── adoptium-javaX-set-default.postinst │ ├── sharedmimeinfo │ ├── rules │ ├── adoptium-javaX-installer.postrm │ ├── changelog │ ├── copyright │ ├── adoptium-javaX-installer.prerm │ └── control └── per-arch │ └── adoptium-javaX-installer.postinst.archX ├── .gitignore ├── generator ├── package.json ├── generate.js └── package-lock.json ├── test.sh ├── debuild.sh ├── apt_repo.sh ├── README.md ├── .github └── workflows │ └── build-and-deploy.yml └── publish.sh /templates/per-java/compat: -------------------------------------------------------------------------------- 1 | 9 2 | -------------------------------------------------------------------------------- /templates/per-java/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | generated 3 | generator/node_modules 4 | packages 5 | repo 6 | -------------------------------------------------------------------------------- /templates/per-java/adoptium_jdk.csh: -------------------------------------------------------------------------------- 1 | setenv JAVA_HOME /usr/lib/jvm/{{destDir}} 2 | -------------------------------------------------------------------------------- /templates/per-java/adoptium_jdk.sh: -------------------------------------------------------------------------------- 1 | export JAVA_HOME=/usr/lib/jvm/{{destDir}} 2 | -------------------------------------------------------------------------------- /templates/per-java/adoptium-javaX-installer.dirs: -------------------------------------------------------------------------------- 1 | usr/lib/jvm/{{destDir}} 2 | var/cache/{{destDir}}-installer 3 | -------------------------------------------------------------------------------- /templates/per-java/adoptium-javaX-set-default.install: -------------------------------------------------------------------------------- 1 | debian/adoptium_jdk.sh /etc/profile.d/ 2 | debian/adoptium_jdk.csh /etc/profile.d/ 3 | -------------------------------------------------------------------------------- /templates/per-java/adoptium-javaX-set-default.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | update-java-alternatives -s {{destDir}} > /dev/null 2>&1 4 | 5 | #DEBHELPER# 6 | 7 | exit 0 8 | -------------------------------------------------------------------------------- /templates/per-java/sharedmimeinfo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Java Archive 5 | 6 | 7 | -------------------------------------------------------------------------------- /templates/per-java/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # -*- makefile -*- 3 | 4 | # Uncomment this to turn on verbose mode. 5 | #export DH_VERBOSE=1 6 | 7 | %: 8 | dh $@ 9 | 10 | # Use xz (not zstd) compression for deb packages 11 | override_dh_builddeb: 12 | dh_builddeb -- -Zxz 13 | -------------------------------------------------------------------------------- /templates/per-java/adoptium-javaX-installer.postrm: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | case "$1" in 6 | purge|remove|abort-install) 7 | rm -rf "/usr/lib/jvm/{{destDir}}" 8 | rm -rf "/var/cache/{{destDir}}-installer" 9 | rm -rf "/usr/lib/jvm/.{{destDir}}.jinfo" 10 | ;; 11 | esac 12 | 13 | #DEBHELPER# 14 | 15 | exit 0 16 | -------------------------------------------------------------------------------- /templates/per-java/changelog: -------------------------------------------------------------------------------- 1 | {{sourcePackageName}} ({{version}}) {{distribution}}; urgency=medium 2 | 3 | * Installer for Adoptium Temurin {{JDKorJREupper}} {{jdkVersion}} with {{jvmTypeDesc}} 4 | * {{JDKorJREupper}} {{jdkVersion}} composed version {{version}}. 5 | {{debChangeLogArches}} 6 | 7 | -- {{signerName}} <{{signerEmail}}> {{buildDateChangelog}} 8 | -------------------------------------------------------------------------------- /templates/per-java/copyright: -------------------------------------------------------------------------------- 1 | Files: debian/* 2 | Copyright: 2018-{{buildDateYear}} Ricardo Pardini 3 | 2012-2017 Alin Andrei 4 | 2012 Bruce Ingalls 5 | 2001-2006 Takuo KITAME 6 | 2006-2007 Bart Martens 7 | License: GPL-3+ 8 | -------------------------------------------------------------------------------- /generator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adoptium-deb-generator", 3 | "version": "0.0.6", 4 | "description": "", 5 | "main": "generate.js", 6 | "scripts": {}, 7 | "author": "Ricardo Pardini ", 8 | "license": "Apache2.0", 9 | "dependencies": { 10 | "glob-all": "^3", 11 | "good-guy-disk-cache": "^2", 12 | "good-guy-http": "^1", 13 | "moment": "^2", 14 | "mustache": "^3" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /templates/per-java/adoptium-javaX-installer.prerm: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | JINFO_MANIFEST_FILE=/usr/lib/jvm/.{{destDir}}.jinfo 6 | # @TODO: use the jinfo lines starting with jre/jdk to actually remove the alternatives? 7 | 8 | 9 | J_INSTALL_DIR=/usr/lib/jvm/{{destDir}} 10 | case "$1" in 11 | remove|deconfigure|purge) 12 | for f in ${J_INSTALL_DIR}/man/man1/*; do 13 | name=$(basename ${f} .1.gz) 14 | if [[ ! -f "/usr/bin/$name" || -L "/usr/bin/$name" ]]; then 15 | update-alternatives --remove ${name} ${J_INSTALL_DIR}/bin/${name} 16 | fi 17 | done 18 | ;; 19 | esac 20 | 21 | #DEBHELPER# 22 | 23 | exit 0 24 | -------------------------------------------------------------------------------- /test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | BASE_DIR="$(pwd)" 5 | 6 | # Config 7 | VERSION=${VERSION:-adoptium-8-jdk-hotspot} 8 | TEST_IMAGE="${TEST_IMAGE:-ubuntu:rolling}" 9 | 10 | # Run via docker 11 | cat <${REPO_DIR}/conf/distributions 17 | Origin: deb.adoptium.net 18 | Label: deb.adoptium.net 19 | Codename: stable 20 | Architectures: amd64 ppc64el arm64 armel s390x source 21 | Components: main 22 | Description: Adoptium Debian Installer Packages 23 | SignWith: ${PACKAGE_SIGNER_KEYID} 24 | EOD 25 | 26 | # Determine a list of binary debs to include in the repo 27 | # reprepro does not accept identical package(-names) with different contents (sha1) 28 | # our build does generate different contents (in different runs) and I'd like to keep old versions around 29 | LIST_DEBS_NEW="" 30 | for ONE_DEB in ${PACKAGES_DIR}/*.deb; do 31 | echo "Considering adding to repo: $ONE_DEB" 32 | BASE_ONE_DEB=$(basename ${ONE_DEB}) 33 | EXISTING_DEB_IN_REPO=$(find ${REPO_DIR}/pool -type f -name ${BASE_ONE_DEB}) 34 | if [[ "a${EXISTING_DEB_IN_REPO}" == "a" ]]; then 35 | echo "- New .deb to include in repo: ${BASE_ONE_DEB}" 36 | LIST_DEBS_NEW="${LIST_DEBS_NEW} ${ONE_DEB}" 37 | else 38 | echo "- Existing .deb: ${BASE_ONE_DEB}" 39 | fi 40 | done 41 | 42 | echo "** Final list of DEBs to include: ${LIST_DEBS_NEW}" 43 | if [[ "a${LIST_DEBS_NEW}a" == "aa" ]]; then 44 | echo "No new packages, nothing to do." 45 | else 46 | echo "New packages, running reprepro..." 47 | reprepro -b "${REPO_DIR}" includedeb stable ${LIST_DEBS_NEW} # 'stable' = distro name 48 | echo "Repository generated at ${REPO_DIR}/" 49 | fi 50 | -------------------------------------------------------------------------------- /templates/per-java/control: -------------------------------------------------------------------------------- 1 | Source: {{sourcePackageName}} 2 | Section: java 3 | Priority: optional 4 | Maintainer: {{signerName}} <{{signerEmail}}> 5 | Build-Depends: debhelper, lsb-release, bash (>= 4.0) 6 | Standards-Version: {{standardsVersion}} 7 | Homepage: https://adoptium.net/ 8 | 9 | Package: {{sourcePackageName}} 10 | Section: java 11 | Architecture: {{allDebArches}} 12 | Pre-Depends: wget, ca-certificates, bash (>= 4.0) 13 | Depends: java-common (>= 0.24), locales, libxrender1, libxtst6, libxi6, libfontconfig1, libasound2, ${misc:Depends} 14 | Recommends: fonts-dejavu-extra 15 | Suggests: fonts-ipafont-gothic, fonts-ipafont-mincho, fonts-wqy-microhei, fonts-wqy-zenhei, 16 | fonts-indic, {{setDefaultPackageName}}(= ${binary:Version}) 17 | Provides: {{provides}} 18 | Description: {{fullHumanTitle}} 19 | Installer package for {{fullHumanTitle}}. 20 | This package does not contain binary files, but is only a downloader/installer. 21 | To set this as system-wide default, install the package 22 | {{setDefaultPackageName}} 23 | 24 | Package: {{setDefaultPackageName}} 25 | Section: java 26 | Architecture: {{allDebArches}} 27 | Pre-Depends: {{sourcePackageName}}(= ${binary:Version}) 28 | Depends: ${misc:Depends} 29 | Provides: adoptium-default 30 | Conflicts: amazoncorretto-default, adoptopenjdk-default, adoptium-default, oracle-java6-set-default, 31 | oracle-java7-set-default, oracle-java8-set-default, oracle-java9-set-default 32 | Description: Set {{fullHumanTitle}} as default 33 | Sets {{fullHumanTitle}} as the system default. 34 | This will set JAVA_HOME, and run update-java-alternatives for you. 35 | 36 | {{commentForVirtualPackage}}Package: {{virtualPackageName}} 37 | {{commentForVirtualPackage}}Section: java 38 | {{commentForVirtualPackage}}Architecture: {{allDebArches}} 39 | {{commentForVirtualPackage}}Depends: {{sourcePackageName}}(= ${binary:Version}), ${misc:Depends} 40 | {{commentForVirtualPackage}}Recommends: {{setDefaultPackageName}}(= ${binary:Version}) 41 | {{commentForVirtualPackage}}Description: Virtual package for {{fullHumanTitle}} 42 | {{commentForVirtualPackage}} Virtual package depending {{fullHumanTitle}} 43 | {{commentForVirtualPackage}} This package depends on {{sourcePackageName}} 44 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Debian/Ubuntu installer packages for Eclipse Adoptium 2 | 3 | This uses the Eclipse Adoptium API to produce Ubuntu/Debian packages which download and install Eclipse Adoptium from 4 | their official releases. 5 | 6 | - Ubuntu: [ppa:rpardini/adoptium-installers](https://launchpad.net/~rpardini/+archive/ubuntu/adoptium-installers) 7 | or see instructions below. 8 | - Debian: there's an APT repo hosted at GitHub Pages, see below for instructions. 9 | - The Debian instructions also work for Ubuntu if you'd rather avoid PPA's. 10 | 11 | Use these packages at your own risk. These are NOT official packages. 12 | 13 | ## For Ubuntu: 14 | 15 | ```bash 16 | [[ ! -f /usr/bin/add-apt-repository ]] && sudo apt-get -y install software-properties-common # Make sure 'add-apt-repository' is available 17 | sudo add-apt-repository --yes ppa:rpardini/adoptium-installers 18 | sudo apt-get install adoptium-17-installer # or 8, 11, etc; also adoptium-17-jdk-hotspot-installer-set-default 19 | ``` 20 | 21 | ## For Debian: 22 | 23 | ```bash 24 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A1EAC8B7 # add the builder key 25 | echo 'deb https://rpardini.github.io/adoptium-deb-installer stable main' > /etc/apt/sources.list.d/rpardini-adoptium.list # add the package repo to sources 26 | sudo apt-get update # update from sources 27 | sudo apt-get install adoptium-17-installer # or 8, 11, etc; also adoptium-17-jdk-hotspot-installer-set-default 28 | ``` 29 | 30 | # For developers/builders 31 | 32 | This repo produces **source** packages which are then uploaded to Launchpad, where they're built and hosted. The final 33 | packages produced are essentially just downloader scripts, and try to handle proxy usage, SHA256 verification, 34 | `update-alternatives` and `update-java-alternatives` as per `java-common` standards. 35 | 36 | A huge amount of the actual installer scripting was stolen from 37 | [Alin Andrei](https://launchpad.net/~webupd8team/+archive/ubuntu/java)'s webupd8 `oracle-java8-installer` 38 | -- all the update-alternatives, manpages, etc stuff is clearly in need of work. The proxy handling also needs to be 39 | confirmed; a few of his provisions like using a custom `wgetrc` was kept, but a lot of cosmetic stuff like icons were 40 | removed. 41 | 42 | Due to the way Launchpad works, a big part of this is calculating a single set/version from many possible JDK builds for 43 | different architectures. It seems common that `aarch64` and/or `s390x` archs have different Eclipse Adoptium builds than 44 | other architectures, at least for Java 8 and Java 11. Update: Adoptium does not suffer so much from those. 45 | 46 | For this reason (and also cause I'm a bit of a codegen freak) I implemented a Node.js script that 47 | consumes [Eclipse Adoptium's releases API](https://api.adoptium.net/) and process sets of templates to produce final 48 | source packages. 49 | 50 | Also due to Launchpad's requirements, I build a lot of (otherwise identical) source packages for different 51 | distributions/series (trusty, xenial, bionic, etc); please instruct me how to avoid this if you know. 52 | 53 | # Credits 54 | 55 | * Of course, [Eclipse Adoptium](https://adoptium.net/) for all of the actual amazing work, and for the API. 56 | * [Alin Andrei/webupd8](https://launchpad.net/~webupd8team/+archive/ubuntu/java) for the 57 | original `oracle-jdk8-installer` from which I started this work 58 | * Launchpad for actually building on many architectures and hosting the whole thing for Ubuntu 59 | * GitHub for repo, Github Actions, and hosting the Debian repo with GitHub Pages. Please don't ban me. 60 | -------------------------------------------------------------------------------- /.github/workflows/build-and-deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | on: 3 | push: 4 | branches: [ 'adoptium' ] # Run on pushes to main adoptium only 5 | schedule: 6 | - cron: '0 3 * * *' # Scheduled runs every day at 3am UTC 7 | jobs: 8 | build-and-deploy: 9 | runs-on: ubuntu-latest # github runners. 10 | steps: 11 | 12 | - name: Install dependencies 13 | run: | 14 | echo 'man-db man-db/auto-update boolean false' | sudo debconf-set-selections 15 | sudo apt-get -q -y update 16 | sudo apt-get -q -y install devscripts debhelper dput reprepro eatmydata parallel 17 | env: 18 | DEBIAN_FRONTEND: noninteractive 19 | 20 | - name: Clone and checkout this repo 21 | uses: actions/checkout@v3 22 | with: 23 | path: src 24 | 25 | - name: Set up Node.js 16 26 | uses: actions/setup-node@v3 27 | with: 28 | node-version: '16' 29 | 30 | - name: Import GPG key from GitHub secrets 31 | id: import_gpg 32 | uses: crazy-max/ghaction-import-gpg@111c56156bcc6918c056dbef52164cfa583dc549 # v5.2.0 # https://github.com/crazy-max/ghaction-import-gpg/releases 33 | with: 34 | gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} 35 | passphrase: ${{ secrets.PASSPHRASE }} 36 | 37 | 38 | - name: Build Source and Binary packages for Adoptium 39 | working-directory: src 40 | run: ./build.sh 41 | env: 42 | # key comment "name (comment)", if any, is required by dpkg tooling 43 | PACKAGE_SIGNER_NAME: "${{ steps.import_gpg.outputs.name }} (Used for package signing)" 44 | PACKAGE_SIGNER_EMAIL: ${{ steps.import_gpg.outputs.email }} 45 | RUN_GENERATOR: 1 46 | 47 | 48 | - name: Test install adoptium-17-jre-hotspot vs debian:stable (amd64) 49 | working-directory: src 50 | run: ./test.sh 51 | env: 52 | VERSION: adoptium-17-jre-hotspot 53 | TEST_IMAGE: debian:stable 54 | 55 | - name: Test install adoptium-17-jdk-hotspot vs debian:stable (amd64) 56 | working-directory: src 57 | run: ./test.sh 58 | env: 59 | VERSION: adoptium-17-jdk-hotspot 60 | TEST_IMAGE: debian:stable 61 | 62 | - name: Test install adoptium-21-jdk-hotspot vs debian:stable (amd64) 63 | working-directory: src 64 | run: ./test.sh 65 | env: 66 | VERSION: adoptium-21-jdk-hotspot 67 | TEST_IMAGE: debian:stable 68 | 69 | - name: Test install adoptium-8-jre-hotspot vs ubuntu:rolling (amd64) 70 | working-directory: src 71 | run: ./test.sh 72 | env: 73 | VERSION: adoptium-8-jdk-hotspot 74 | TEST_IMAGE: ubuntu:rolling 75 | 76 | 77 | - name: Checkout GitHub pages repo 78 | uses: actions/checkout@v3 # https://github.com/actions/checkout#usage 79 | with: 80 | repository: rpardini/adoptium-deb-installer 81 | ref: "repo-adoptium" # branch 82 | path: src/repo 83 | 84 | - name: Configure git identity for apt repo repo 85 | working-directory: src/repo 86 | run: | 87 | git config user.name github-actions 88 | git config user.email github-actions@github.com 89 | 90 | - name: Deploy source packages to Launchpad and binaries to apt repo 91 | working-directory: src 92 | run: ./publish.sh 93 | env: 94 | PUSH_APT_REPO: 1 # using reprepro, and the keyid in PACKAGE_SIGNER_KEYID 95 | CLEAN_APT_REPO: 0 # 1 will start the apt repo from scratch 96 | UPLOAD_LAUNCHPAD: 1 # using dput; packages have to be signed 97 | PACKAGE_SIGNER_KEYID: ${{ steps.import_gpg.outputs.keyid }} # key reference, used by reprepro 98 | 99 | - name: Show GPG user IDs 100 | run: | 101 | echo "fingerprint: ${{ steps.import_gpg.outputs.fingerprint }}" 102 | echo "keyid: ${{ steps.import_gpg.outputs.keyid }}" 103 | echo "name: ${{ steps.import_gpg.outputs.name }}" 104 | echo "email: ${{ steps.import_gpg.outputs.email }}" 105 | 106 | -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # shellcheck disable=SC2002 # My cats are not useless, thank you. 3 | 4 | set -e 5 | BASE_DIR="$(pwd)" 6 | 7 | # Config 8 | declare -i CLEAN_APT_REPO=${CLEAN_APT_REPO:-0} 9 | declare -i PUSH_APT_REPO=${PUSH_APT_REPO:-0} 10 | declare -i UPLOAD_LAUNCHPAD=${UPLOAD_LAUNCHPAD:-1} 11 | 12 | GH_PAGES_BRANCH="${GH_PAGES_BRANCH:-repo-adoptium}" 13 | GH_PAGES_REPO_URL="${GH_PAGES_REPO_URL:-git@github.com:rpardini/adoptium-deb-installer.git}" 14 | export PACKAGE_SIGNER_KEYID=${PACKAGE_SIGNER_KEYID:-63FF2EEC3156A973} # For reprepro 15 | 16 | echo "::group::Testing signing..." 17 | echo "Testing signing" | gpg --sign --armor 18 | echo "::endgroup::" 19 | 20 | if [[ ! -d repo ]]; then 21 | echo "'repo' dir is not there, cloning..." 22 | echo "Cloning gh-pages repo at ${PWD}/repo ..." 23 | git clone --branch "${GH_PAGES_BRANCH}" --single-branch "${GH_PAGES_REPO_URL}" repo 24 | fi 25 | 26 | if [[ ${CLEAN_APT_REPO} -gt 0 ]]; then 27 | echo "Cleaning repo contents..." 28 | rm -rf repo/conf repo/db repo/dists repo/pool 29 | fi 30 | 31 | if [[ ${UPLOAD_LAUNCHPAD} -gt 0 ]]; then 32 | echo "::group::Uploading Ubuntu (source) packages to Launchpad..." 33 | cd packages/sourcepkg 34 | 35 | # Let's not overwhelm launchpad with uploads for unchanged packages. 36 | # We'll keep a list of the uploaded file names in the apt repo (otherwise unrelated) 37 | declare -i NUMBER_PACKAGES_TO_UPLOAD 38 | PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE="${BASE_DIR}/repo/launchpad.list" 39 | CURRENTLY_GENERATED_LAUNCHPAD_PACKAGES_FILE="${BASE_DIR}/repo/currently_generated_launchpad.list" 40 | TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE="${BASE_DIR}/repo/to_upload_launchpad.list" 41 | 42 | # Write this-run filenames to the new file... 43 | find . -type f -name \*.changes | sort -u >"${CURRENTLY_GENERATED_LAUNCHPAD_PACKAGES_FILE}" 44 | 45 | # If the old file does not exist, just do them all. 46 | if [[ ! -f "${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}" ]]; then 47 | echo "No previous uploaded packages list, uploading all newly built packages." 48 | cat "${CURRENTLY_GENERATED_LAUNCHPAD_PACKAGES_FILE}" | sort -u >"${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" 49 | else 50 | # We have a list of previously-uploaded, compare with new one and do only new packages. 51 | # 'comm' is nice, but it wants sorted inputs. 52 | comm -13 "${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}" "${CURRENTLY_GENERATED_LAUNCHPAD_PACKAGES_FILE}" >"${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" 53 | fi 54 | 55 | NUMBER_PACKAGES_TO_UPLOAD="$(cat "${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" | wc -l)" 56 | echo "::notice file=publish.sh::Will upload ${NUMBER_PACKAGES_TO_UPLOAD} to Launchpad." 57 | 58 | if [[ ${NUMBER_PACKAGES_TO_UPLOAD} -gt 0 ]]; then 59 | echo "- Actually Uploading ${NUMBER_PACKAGES_TO_UPLOAD} to Launchpad..." 60 | 61 | cat "${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" | xargs dput --unchecked ppa:rpardini/adoptium-installers 62 | 63 | echo "- dput done, marking ${NUMBER_PACKAGES_TO_UPLOAD} packages as uploaded..." 64 | # This will be pushed together with the apt repo below 65 | cat "${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" >>"${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}" 66 | cat "${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}" | sort -u >"${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}.sorted" 67 | mv "${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}.sorted" "${PREVIOUSLY_UPLOADED_LAUNCHPAD_PACKAGES_FILE}" 68 | else 69 | echo "- Zero packages to upload. Doing nothing." 70 | fi 71 | 72 | # Cleanup work files 73 | rm -f "${CURRENTLY_GENERATED_LAUNCHPAD_PACKAGES_FILE}" "${TO_UPLOAD_LAUNCHPAD_PACKAGES_FILE}" 74 | 75 | cd "${BASE_DIR}" 76 | echo "::endgroup::" 77 | fi 78 | 79 | echo "::group::Creating repo for debian packages..." 80 | ./apt_repo.sh 81 | echo "::endgroup::" 82 | 83 | # go in there, add everything to git, commit and push it 84 | if [[ ${PUSH_APT_REPO} -gt 0 ]]; then 85 | echo "::group::Publish repo for debian packages via git/github pages..." 86 | cd repo 87 | git add . 88 | git commit -m "Updating adoptium repo" || true # commit fails if there's nothing to commit 89 | git push origin "${GH_PAGES_BRANCH}" || true # push fails if there's nothing to push 90 | cd "${BASE_DIR}" 91 | echo "::endgroup::" 92 | fi 93 | 94 | echo "Done publishing." 95 | -------------------------------------------------------------------------------- /templates/per-arch/adoptium-javaX-installer.postinst.archX: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # rpardini: this script is a mess, it dates back to 2006. 4 | 5 | set -e 6 | #set -x 7 | 8 | fp_exit_with_error() { 9 | echo "" 1>&2 10 | echo "{{fullHumanTitle}} is NOT installed: $@" 1>&2 11 | exit 1 12 | } 13 | 14 | FILENAME_TAR_GZ="{{{filename}}}" 15 | DOWNLOAD_TAR_GZ_URL="{{{downloadUrl}}}" 16 | SHA256SUM_TGZ="{{sha256sum}}" 17 | # @TODO: maybe remove J_ID 18 | J_ID={{destDir}} 19 | INSTALLER_DIR=/var/cache/{{destDir}}-installer 20 | 21 | PRIORITY=1081 # The priority for the alternatives. 22 | JINFO_MANIFEST_FILE=/usr/lib/jvm/.{{destDir}}.jinfo 23 | J_INSTALL_DIR=/usr/lib/jvm/{{destDir}} 24 | 25 | ########Create dirs 26 | mkdir -p ${INSTALLER_DIR} 27 | mkdir -p /usr/lib/jvm 28 | ############# 29 | 30 | 31 | # Download and unpack, either from existing local file or download. 32 | cd ${INSTALLER_DIR} 33 | 34 | if [[ -f "${INSTALLER_DIR}/$FILENAME_TAR_GZ" ]]; then 35 | echo "Installing from local file ${INSTALLER_DIR}/$FILENAME_TAR_GZ" 36 | else 37 | # no local file 38 | echo "No local file detected, will download." 39 | 40 | # use apt proxy if configured. 41 | APT_PROXIES=$(apt-config shell \ 42 | http_proxy Acquire::http::Proxy \ 43 | https_proxy Acquire::https::Proxy \ 44 | ftp_proxy Acquire::ftp::Proxy \ 45 | dl_direct Acquire::http::Proxy::github.com \ 46 | dl_direct Acquire::http::Proxy::amazons3.com \ 47 | ) 48 | 49 | if [[ -n "$APT_PROXIES" ]]; then 50 | eval export $APT_PROXIES 51 | fi 52 | 53 | if [[ "$dl_direct" = "DIRECT" ]]; then 54 | unset http_proxy 55 | unset https_proxy 56 | unset ftp_proxy 57 | fi 58 | 59 | # if $INSTALLER_DIR/wgetrc exists, use it for downloading. 60 | # This allows for very specific edge cases to work. 61 | if [[ -f ${INSTALLER_DIR}/wgetrc ]]; then 62 | echo "Using wget settings from $INSTALLER_DIR/wgetrc" 63 | else 64 | echo "No $INSTALLER_DIR/wgetrc file found." 65 | echo "Creating $INSTALLER_DIR/wgetrc with default values." 66 | 67 | # setting wget options 68 | :> ${INSTALLER_DIR}/wgetrc 69 | echo "noclobber = off" >> ${INSTALLER_DIR}/wgetrc 70 | echo "dir_prefix = ." >> ${INSTALLER_DIR}/wgetrc 71 | echo "dirstruct = off" >> ${INSTALLER_DIR}/wgetrc 72 | echo "dot_style = giga" >> ${INSTALLER_DIR}/wgetrc 73 | echo "tries = 5" >> ${INSTALLER_DIR}/wgetrc 74 | fi 75 | 76 | # Now actually download the .tar.gz file. 77 | echo "Downloading {{fullHumanTitle}}..." 78 | wget --config=$INSTALLER_DIR/wgetrc --no-verbose --local-encoding=UTF-8 --continue -O ${FILENAME_TAR_GZ} ${DOWNLOAD_TAR_GZ_URL} || fp_exit_with_error "download failed" 79 | echo "Download done." 80 | fi 81 | 82 | # verify SHA256 checksum of (copied or downloaded) tarball 83 | echo -n "Checking SHA256 checksum: " 84 | echo "$SHA256SUM_TGZ $FILENAME_TAR_GZ" | sha256sum -c > /dev/null 2>&1 || fp_exit_with_error "sha256sum mismatch $FILENAME_TAR_GZ" 85 | echo "done, checksum $SHA256SUM_TGZ matched." 86 | 87 | # unpack. 88 | echo -n "Unpacking: " 89 | tar xzf ${FILENAME_TAR_GZ} || fp_exit_with_error "cannot unpack" 90 | echo "done." 91 | 92 | J_DIR_INSIDE_TAR_GZ=$(find . -maxdepth 1 -type d | grep -v "^.$" | xargs) 93 | 94 | echo -n "Putting '{{fullHumanTitle}}' in place, from dir '${J_DIR_INSIDE_TAR_GZ}': " 95 | # make it owned by root, OpenJDK sends it with uid 500 or something. 96 | chown -R root:root ${J_DIR_INSIDE_TAR_GZ} 97 | 98 | # Copy JDK to the right dir 99 | mv ${J_DIR_INSIDE_TAR_GZ} ${J_ID} 100 | rm -rf ${J_INSTALL_DIR} 101 | cp -rf ${J_ID} /usr/lib/jvm/ 102 | 103 | # Clean up 104 | rm -rf ${J_ID} 105 | 106 | echo "done." 107 | 108 | echo "Cleaning outdated downloads..." 109 | find ${INSTALLER_DIR} -maxdepth 1 -name '*.tar.gz' ! -name ${FILENAME_TAR_GZ} -type f -print 110 | find ${INSTALLER_DIR} -maxdepth 1 -name '*.tar.gz' ! -name ${FILENAME_TAR_GZ} -type f -delete 111 | 112 | # Gzips the man pages, if the directory exists. 113 | if [[ -d ${J_INSTALL_DIR}/man/man1 ]]; then 114 | gzip -9 ${J_INSTALL_DIR}/man/man1/*.1 || { echo "Could not find man pages even though dir exists!" 1>&2 ; } 115 | fi 116 | 117 | # create .jinfo file header, for update-java-alternatives. 118 | cat << EOD > ${JINFO_MANIFEST_FILE} 119 | name=${J_ID} 120 | alias=${J_ID} 121 | priority=${PRIORITY} 122 | section=java 123 | EOD 124 | 125 | HAS_JAVA_BIN=false 126 | # Here we start from the binaries, and look for the man pages. 127 | # create alternatives for the jre binaries. 128 | # also add them to the .jinfo manifest for easy switching. 129 | if [ -d ${J_INSTALL_DIR}/jre/bin ]; then # only jdk8 has this, so skip if not 130 | for f in ${J_INSTALL_DIR}/jre/bin/*; do 131 | name=`basename ${f}`; 132 | if [[ -f "$J_INSTALL_DIR/man/man1/$name.1.gz" ]]; then 133 | # man page available, install as a slave of the tool 134 | update-alternatives --install /usr/bin/${name} ${name} ${J_INSTALL_DIR}/jre/bin/${name} ${PRIORITY} --slave /usr/share/man/man1/${name}.1.gz ${name}.1.gz ${J_INSTALL_DIR}/man/man1/${name}.1.gz 135 | else 136 | # no man page available for this specific tool 137 | update-alternatives --install /usr/bin/${name} ${name} ${J_INSTALL_DIR}/jre/bin/${name} ${PRIORITY} 138 | fi 139 | echo "jre $name $J_INSTALL_DIR/jre/bin/$name" >> ${JINFO_MANIFEST_FILE} 140 | [[ "a$name" == "ajava" ]] && HAS_JAVA_BIN=true 141 | done 142 | fi 143 | 144 | if [ -d ${J_INSTALL_DIR}/bin ]; then # only jdk8 has this, so skip if not 145 | for f in ${J_INSTALL_DIR}/bin/*; do 146 | name=`basename ${f}`; 147 | if [[ -f "$J_INSTALL_DIR/man/man1/$name.1.gz" ]]; then 148 | # man page available, install as a slave of the tool 149 | update-alternatives --install /usr/bin/${name} ${name} ${J_INSTALL_DIR}/bin/${name} ${PRIORITY} --slave /usr/share/man/man1/${name}.1.gz ${name}.1.gz ${J_INSTALL_DIR}/man/man1/${name}.1.gz 150 | else 151 | # no man page available for this specific tool 152 | update-alternatives --install /usr/bin/${name} ${name} ${J_INSTALL_DIR}/bin/${name} ${PRIORITY} 153 | fi 154 | echo "jre $name $J_INSTALL_DIR/bin/$name" >> ${JINFO_MANIFEST_FILE} 155 | [[ "a$name" == "ajava" ]] && HAS_JAVA_BIN=true 156 | done 157 | fi 158 | 159 | 160 | # For the non-JRE tools, we actually start from the man pages. 161 | if [[ -d ${J_INSTALL_DIR}/man/man1 ]]; then 162 | for f in ${J_INSTALL_DIR}/man/man1/*; do 163 | name=`basename ${f} .1.gz`; 164 | #don't link already linked JRE files 165 | if [[ ! -e ${J_INSTALL_DIR}/jre/bin/${name} ]]; then 166 | if [[ ! -e ${J_INSTALL_DIR}/bin/${name} ]]; then 167 | echo "** Missing executable ${J_INSTALL_DIR}/bin/${name} even though man page ${f} exists." 1>&2 168 | echo "** This is probably a bug in Adoptium and should be reported upstream." 1>&2 169 | else 170 | update-alternatives --install /usr/bin/${name} ${name} ${J_INSTALL_DIR}/bin/${name} ${PRIORITY} --slave /usr/share/man/man1/${name}.1.gz ${name}.1.gz ${J_INSTALL_DIR}/man/man1/${name}.1.gz 171 | echo "jdk $name $J_INSTALL_DIR/bin/$name" >> ${JINFO_MANIFEST_FILE} 172 | [[ "a$name" == "ajava" ]] && HAS_JAVA_BIN=true 173 | fi 174 | fi 175 | done 176 | fi 177 | 178 | if [[ "$HAS_JAVA_BIN" != "true" ]]; then 179 | echo "Package failed to install a 'java' alternative. This is probably a bug in the installer, or upstream." 1>&2 180 | ls -laR ${J_INSTALL_DIR} 1>&2 181 | exit 3 182 | fi 183 | 184 | # Place security config files in /etc so they are not overwritten on upgrade. 185 | # @TODO: pardini: I am not sure this is a good idea; new JDK versions can bring updated files? 186 | 187 | mkdir -p /etc/${J_ID}/security 188 | for configfile in blacklist blacklisted.certs java.policy java.security trusted.libraries 189 | do 190 | if [ ! -e /etc/${J_ID}/security/${configfile} ] && [ -e $J_INSTALL_DIR/jre/lib/security/${configfile} ]; then 191 | mv ${J_INSTALL_DIR}/jre/lib/security/${configfile} /etc/${J_ID}/security/ 192 | else 193 | rm -f ${J_INSTALL_DIR}/jre/lib/security/${configfile} 194 | fi 195 | done 196 | 197 | for configfile in blacklist blacklisted.certs java.policy java.security trusted.libraries 198 | do 199 | if [ ! -e ${J_INSTALL_DIR}/jre/lib/security/${configfile} ] && [ -e /etc/${J_ID}/security/${configfile} ]; then 200 | ln -s /etc/${J_ID}/security/${configfile} ${J_INSTALL_DIR}/jre/lib/security/ 201 | fi 202 | done 203 | 204 | cat << 'EOD' 205 | _ _ _ _ 206 | / \ __| | ___ _ __ | |_(_)_ _ _ __ ___ 207 | / _ \ / _` |/ _ \| '_ \| __| | | | | '_ ` _ \ 208 | / ___ \ (_| | (_) | |_) | |_| | |_| | | | | | | 209 | /_/ \_\__,_|\___/| .__/ \__|_|\__,_|_| |_| |_| 210 | |_| 211 | EOD 212 | 213 | echo "{{fullHumanTitle}} installed" 214 | echo "To set {{fullHumanTitle}} as default, install the \"{{setDefaultPackageName}}\" package." 215 | 216 | #DEBHELPER# 217 | 218 | -------------------------------------------------------------------------------- /generator/generate.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // config 4 | const architectures = new Set(['x64', 'aarch64', 'ppc64le', 's390x', 'arm']); 5 | const archMapJdkToDebian = {'x64': 'amd64', 'aarch64': 'arm64', 'ppc64le': 'ppc64el', 's390x': 's390x', 'arm': 'armel'}; //subtle differences 6 | const wantedJavaVersions = new Set([8, 11, 17, 21]); // official GA releases from adoptium 7 | const linuxesAndDistros = new Set([ 8 | { 9 | name: 'ubuntu', 10 | distros: new Set(['trusty', 'xenial', 'bionic', 'focal', 'jammy', 'mantic']), // LTS ESM releases + last release + next, but not the ones frozen, like hir.sute or gro.ovy 11 | standardsVersion: "3.9.7", 12 | useDistroInVersion: true, 13 | singleBinaryForAllArches: false, 14 | postArchesHook: null 15 | }, 16 | { 17 | name: 'debian', 18 | distros: new Set(['stable']), // Single distro for Debian 19 | standardsVersion: "3.9.6", 20 | useDistroInVersion: false, 21 | singleBinaryForAllArches: true, 22 | postArchesHook: joinDebianPostinstForAllArches 23 | } 24 | ]); 25 | 26 | // the person building and signing the packages. 27 | const signerName = process.env.PACKAGE_SIGNER_NAME || "Adoptium .deb Installer Key (Used for package signing)"; 28 | const signerEmail = process.env.PACKAGE_SIGNER_EMAIL || "adoptium.deb@pardini.net"; 29 | 30 | // generator version; this is used to add to the generated package's version timestamp (in minutes) 31 | const generatorVersionIncrement = 2; 32 | 33 | // we use promisified filesystem functions from node.js 34 | const regular_fs = require('fs'); 35 | const fs = regular_fs.promises; 36 | const path = require('path'); 37 | const glob = require('glob-all'); 38 | 39 | // moment for date formatting 40 | const moment = require('moment'); 41 | 42 | // mustache to resolve the templates. 43 | const mustache = require('mustache'); 44 | 45 | // I use 'good-guy-http', lol, this does quick and easy disk caching of the URLs 46 | // so that I don't hammer adoptium API during development 47 | let goodGuyDiskCache = require("good-guy-disk-cache"); 48 | const goodGuy = require('good-guy-http')({ 49 | maxRetries: 5, 50 | timeout: 5000, 51 | cache: new goodGuyDiskCache("adoptium-deb-generator"), 52 | forceCaching: { 53 | cached: true, 54 | timeToLive: 60 * 60 * 1000, // in milliseconds 55 | mustRevalidate: false 56 | }, 57 | }); 58 | 59 | 60 | async function main() { 61 | let allPromises = []; 62 | allPromises.push(generateForGivenKitAndJVM("jdk", "hotspot")); 63 | allPromises.push(generateForGivenKitAndJVM("jre", "hotspot")); 64 | // adoptium does not carry openj9 anymore, that's a separate project now. 65 | //allPromises.push(generateForGivenKitAndJVM("jdk", "openj9")); 66 | //allPromises.push(generateForGivenKitAndJVM("jre", "openj9")); 67 | await Promise.all(allPromises); 68 | } 69 | 70 | async function generateForGivenKitAndJVM(jdkOrJre, hotspotOrOpenJ9) { 71 | console.log(`Generating for ${jdkOrJre}+${hotspotOrOpenJ9}...`); 72 | 73 | const basePath = path.dirname(__dirname); 74 | const templateFilesPerJava = await walk(`${basePath}/templates/per-java/`); 75 | const templateFilesPerArch = await walk(`${basePath}/templates/per-arch/`); 76 | const generatedDirBase = `${basePath}/generated`; 77 | 78 | const jdkBuildsPerArch = await getJDKInfosFromAdoptiumAPI(jdkOrJre, hotspotOrOpenJ9); 79 | 80 | // who DOESN'T love 4 nested for-loops? 81 | for (const linux of linuxesAndDistros) { 82 | for (const distroLinux of linux.distros) { 83 | for (const javaX of jdkBuildsPerArch.values()) { 84 | // the per-Java templates... 85 | let destPath = `${generatedDirBase}/${linux.name}/${javaX.jdkJreVersionJvmType}/${distroLinux}/debian`; 86 | let fnView = {javaX: `${javaX.jdkJreVersionJvmType}`}; 87 | let javaXview_extra = { 88 | provides: createProducesLine(javaX), 89 | standardsVersion: linux.standardsVersion, 90 | allDebArches: linux.singleBinaryForAllArches ? "all" : javaX.allDebArches, 91 | distribution: `${distroLinux}`, 92 | version: linux.useDistroInVersion ? `${javaX.baseJoinedVersion}~${distroLinux}` : javaX.baseJoinedVersion, 93 | virtualPackageName: `adoptium-${javaX.jdkVersion}-installer`, 94 | commentForVirtualPackage: javaX.isDefaultForVirtualPackage ? "" : "#", 95 | sourcePackageName: `adoptium-${javaX.jdkJreVersionJvmType}-installer`, 96 | setDefaultPackageName: `adoptium-${javaX.jdkJreVersionJvmType}-set-default`, 97 | signerName: signerName, 98 | signerEmail: signerEmail 99 | }; 100 | let javaXview = Object.assign(javaX, javaXview_extra); 101 | 102 | await processTemplates(templateFilesPerJava, destPath, fnView, javaXview, true); 103 | 104 | let archProcessedTemplates = []; 105 | 106 | for (const arch of javaX.arches.values()) { 107 | let archFnView = Object.assign({archX: arch.debArch}, fnView); 108 | let archXview = Object.assign(arch, javaXview); 109 | archProcessedTemplates[arch.debArch] = await processTemplates(templateFilesPerArch, destPath, archFnView, archXview, !linux.singleBinaryForAllArches); 110 | } 111 | 112 | if (linux.postArchesHook) await linux.postArchesHook(archProcessedTemplates, destPath, javaX); 113 | 114 | // Here we should make sure destPath and everything inside it have the version's timestamp. 115 | await recursiveChangeFileDate(destPath, javaX.buildDateTS.toDate()); 116 | 117 | } 118 | } 119 | } 120 | } 121 | 122 | async function joinDebianPostinstForAllArches(archProcessedTemplates, destPath, javaX) { 123 | let postInstContents = [ 124 | "#! /bin/bash", 125 | `# joined script for multi-arch postinst for ${javaX.jdkJreVersionJvmType}`, 126 | "DPKG_ARCH=$(dpkg --print-architecture)", 127 | "DID_FIND_ARCH=false" 128 | ]; 129 | for (const debArch of Object.keys(archProcessedTemplates)) { 130 | postInstContents.push(`if [[ "$DPKG_ARCH" == "${debArch}" ]]; then`); 131 | postInstContents.push(`echo "Installing for arch '${debArch}'..."`); 132 | postInstContents.push((archProcessedTemplates[debArch]['adoptium-javaX-installer.postinst.archX'])); 133 | postInstContents.push(`DID_FIND_ARCH=true`); 134 | postInstContents.push(`fi`); 135 | } 136 | postInstContents.push('if [[ "$DID_FIND_ARCH" == "false" ]]; then'); 137 | postInstContents.push(' echo "Unsupported architecture ${DPKG_ARCH}"'); 138 | postInstContents.push(` exit 2`); 139 | postInstContents.push(`fi`); 140 | 141 | await writeTemplateFile(destPath, { 142 | dirs: "", 143 | executable: true 144 | }, `adoptium-${javaX.jdkJreVersionJvmType}-installer.postinst`, postInstContents.join("\n")); 145 | } 146 | 147 | function createProducesLine(javaX) { 148 | let prodArr = ['java-runtime', 'default-jre', 'default-jre-headless']; 149 | prodArr = prodArr.concat(createJavaProducesPrefixForVersion(javaX.jdkVersion, '-runtime')); 150 | prodArr = prodArr.concat(createJavaProducesPrefixForVersion(javaX.jdkVersion, '-runtime-headless')); 151 | // jre: java-runtime, default-jre, default-jre-headless, javaX-runtime, javaX-runtime-headless 152 | 153 | if (javaX.jdkJre === 'jdk') { 154 | // for jdk: java-compiler, default-jdk, default-jdk-headless, javaX-sdk, javaX-sdk-headless 155 | prodArr = prodArr.concat(['java-compiler', 'default-jdk', 'default-jdk-headless']); 156 | prodArr = prodArr.concat(createJavaProducesPrefixForVersion(javaX.jdkVersion, '-sdk')); 157 | prodArr = prodArr.concat(createJavaProducesPrefixForVersion(javaX.jdkVersion, '-sdk-headless')); 158 | } 159 | return prodArr.join(", "); 160 | } 161 | 162 | function createJavaProducesPrefixForVersion(javaVersion, suffix) { 163 | let javas = [`java${suffix}`, `java2${suffix}`]; 164 | for (let i = 5; i < javaVersion + 1; i++) { 165 | javas.push(`java${i}${suffix}`) 166 | } 167 | return javas; 168 | } 169 | 170 | async function getJDKInfosFromAdoptiumAPI(jdkOrJre, hotspotOrOpenJ9) { 171 | let javaBuildArchsPerVersion = new Map(); 172 | 173 | for (let wantedJavaVersion of wantedJavaVersions) { 174 | try { 175 | let apiData = await processAPIData(wantedJavaVersion, architectures, jdkOrJre, hotspotOrOpenJ9); 176 | javaBuildArchsPerVersion.set(wantedJavaVersion, apiData); 177 | } catch (e) { 178 | console.error(`Error getting release data for ${wantedJavaVersion} ${jdkOrJre} ${hotspotOrOpenJ9}: ${e.message}`); 179 | } 180 | } 181 | return javaBuildArchsPerVersion; 182 | } 183 | 184 | async function processAPIData(jdkVersion, wantedArchs, jdkOrJre, hotspotOrOpenJ9) { 185 | let jsonStringAPIResponse; 186 | 187 | let apiURL = `https://api.adoptium.net/v3/assets/feature_releases/${jdkVersion}/ga?release=latest&jvm_impl=hotspot&vendor=adoptium&image_type=${jdkOrJre}&os=linux`; 188 | try { 189 | let httpResponse = await goodGuy(apiURL); 190 | jsonStringAPIResponse = httpResponse.body; 191 | } catch (e) { 192 | throw new Error(`${e.message} from URL ${apiURL}`) 193 | } 194 | 195 | let jsonContentsFull = JSON.parse(jsonStringAPIResponse); 196 | 197 | // Massage the data. v3 assets/feature_releases is different from v2 assets, it groups by release. 198 | // So I gotta flatten, and keep only the latest per-architecture. 199 | // Understand: "aarch64" might only have a binary in a release that is NOT the latest. 200 | let binaryPerArch = {}; 201 | let releaseCounter = 0; 202 | for (let jsonRelease of jsonContentsFull) { 203 | releaseCounter++; 204 | for (let jsonBinary of jsonRelease.binaries) { 205 | let arch = jsonBinary.architecture; 206 | if (binaryPerArch[arch]) { 207 | //console.warn(`Already got release for arch ${arch} !`); 208 | continue; 209 | } else { 210 | if (releaseCounter > 1) { 211 | console.warn(`Got a release arch ${arch} of release counter ${releaseCounter} for release ${jdkVersion} jvm ${hotspotOrOpenJ9} type ${jdkOrJre}`); 212 | } 213 | binaryPerArch[arch] = {release: jsonRelease, binary: jsonBinary}; 214 | } 215 | 216 | } 217 | } 218 | 219 | let archData = new Map(); // builds per-architecture 220 | let slugs = new Map(); 221 | let allDebArches = []; 222 | let debChangeLogArches = []; 223 | let highestBuildTS = 0; 224 | 225 | let jdkJreVersionJvmType = `${jdkVersion}-${jdkOrJre}-${hotspotOrOpenJ9}`; 226 | 227 | let commonProps = { 228 | jdkVersion: jdkVersion, 229 | destDir: `adoptium-${jdkVersion}-${jdkOrJre}-${hotspotOrOpenJ9}`, 230 | jdkJre: jdkOrJre, 231 | JDKorJREupper: jdkOrJre.toUpperCase(), 232 | jvmType: hotspotOrOpenJ9, 233 | jvmTypeDesc: (hotspotOrOpenJ9 === "openj9" ? "OpenJ9" : "Hotspot"), 234 | jdkJreVersionJvmType: jdkJreVersionJvmType, 235 | }; 236 | 237 | commonProps.fullHumanTitle = `Adoptium Temurin ${commonProps.JDKorJREupper} ${commonProps.jdkVersion} with ${commonProps.jvmTypeDesc}`; 238 | commonProps.isDefaultForVirtualPackage = (jdkOrJre === "jdk" && hotspotOrOpenJ9 === "hotspot"); 239 | 240 | let relCounter = 0; 241 | for (let oneRelease of Object.values(binaryPerArch)) { 242 | let sha256sum = oneRelease.binary.package.checksum; 243 | 244 | if (!wantedArchs.has(oneRelease.binary.architecture)) { 245 | console.warn(`Unhandled architecture: ${oneRelease.binary.architecture} for ${jdkJreVersionJvmType} `); 246 | continue; 247 | } 248 | 249 | let debArch = archMapJdkToDebian[oneRelease.binary.architecture]; 250 | 251 | let buildTS = moment(oneRelease.release.timestamp, moment.ISO_8601); 252 | let updatedTS = moment(oneRelease.binary.updated_at, moment.ISO_8601); 253 | let highTS = (buildTS > updatedTS) ? buildTS : updatedTS; 254 | highestBuildTS = (highTS > highestBuildTS) ? highTS : highestBuildTS; 255 | 256 | let buildInfo = Object.assign( 257 | { 258 | arch: oneRelease.binary.architecture, 259 | jdkArch: oneRelease.binary.architecture, 260 | debArch: debArch, 261 | slug: oneRelease.release.release_name, 262 | filename: oneRelease.binary.package.name, 263 | downloadUrl: oneRelease.binary.package.link, 264 | sha256sum: sha256sum 265 | }, 266 | commonProps); 267 | 268 | archData.set(buildInfo.arch, buildInfo); 269 | 270 | // Hack, some builds have the openj9 version in them, some don't; normalize so none do 271 | let slugKey = oneRelease.release.release_name.split(/_openj9/)[0] 272 | .replace("-", "") 273 | .replace("jdk", "") 274 | .replace("jre", "") 275 | .replace("+", "b"); 276 | 277 | if (!slugs.has(slugKey)) slugs.set(slugKey, []); 278 | slugs.get(slugKey).push(buildInfo.jdkArch); 279 | 280 | allDebArches.push(debArch); 281 | debChangeLogArches.push(` * Exact version for architecture ${debArch}: ${oneRelease.release.release_name}`); 282 | relCounter++; 283 | } 284 | 285 | if (relCounter === 0) { 286 | throw new Error(`No valid releases found for ${jdkJreVersionJvmType}`); 287 | } 288 | 289 | // Hack: to allow the generator to produce packages with higher version number 290 | // than the highest timestamp, eg, to fix bugs on the installer itself 291 | highestBuildTS.add(generatorVersionIncrement, 'minutes'); 292 | 293 | let calcVersion = calculateJoinedVersionForAllArches(slugs, highestBuildTS); 294 | let finalVersion = calcVersion.finalVersion; 295 | let commonArches = calcVersion.commonArches; 296 | console.log(`Composed version for ${jdkJreVersionJvmType} is ${finalVersion} - common arches are ${commonArches}`); 297 | 298 | return Object.assign( 299 | { 300 | arches: archData, 301 | baseJoinedVersion: finalVersion, 302 | buildDateYear: highestBuildTS.format('YYYY'), 303 | buildDateChangelog: highestBuildTS.format('ddd, DD MMM YYYY HH:mm:ss ZZ'), 304 | buildDateTS: highestBuildTS, 305 | allDebArches: allDebArches.join(' '), 306 | debChangeLogArches: debChangeLogArches.join("\n") 307 | }, 308 | commonProps); 309 | } 310 | 311 | function calculateJoinedVersionForAllArches(slugs, highestBuildTS) { 312 | let slugArr = []; 313 | for (let oneSlugKey of slugs.keys()) { 314 | let arches = slugs.get(oneSlugKey); 315 | slugArr.push({slug: oneSlugKey, count: arches.length, archList: arches.sort().join("+")}); 316 | } 317 | slugArr.sort((a, b) => b.count - a.count); 318 | 319 | let versionsByArch = []; 320 | let commonArches = null; 321 | let counter = 0; 322 | for (let oneArchesPlusSlug of slugArr) { 323 | let archList = oneArchesPlusSlug.archList + "~"; 324 | if (counter === 0) { 325 | commonArches = oneArchesPlusSlug.archList; 326 | archList = ""; 327 | } // we wont list the most common combo 328 | versionsByArch.push(archList + oneArchesPlusSlug.slug); 329 | counter++; 330 | } 331 | 332 | return { 333 | finalVersion: `${highestBuildTS.format('YYYYMMDDHHmm')}~${versionsByArch.join("+")}`, 334 | commonArches: commonArches 335 | }; 336 | } 337 | 338 | async function walk(dir, filelist = [], dirbase = "") { 339 | const files = await fs.readdir(dir); 340 | for (let file of files) { 341 | const filepath = path.join(dir, file); 342 | /** @type {!fs.Stats} yeah... */ 343 | const stat = await fs.stat(filepath); 344 | let isExecutable = false; 345 | try { 346 | await fs.access(filepath, regular_fs.constants.X_OK); // text for x-bit in file mode 347 | isExecutable = true; 348 | } catch (e) { 349 | // ignored. 350 | } 351 | if (stat.isDirectory()) { 352 | filelist = await walk(filepath, filelist, (dirbase ? dirbase + "/" : "") + file); 353 | } else { 354 | filelist.push({file: file, dirs: dirbase, fullpath: filepath, executable: isExecutable}); 355 | } 356 | } 357 | return filelist; 358 | } 359 | 360 | async function writeTemplateFile(destPathBase, templateFile, destFileTemplated, modifiedContents) { 361 | let destFileParentDir = destPathBase + "/" + templateFile.dirs; 362 | let fullDestPath = destPathBase + "/" + (templateFile.dirs ? templateFile.dirs + "/" : "") + destFileTemplated; 363 | //console.log(`--> ${templateFile.fullpath} to ${fullDestPath} (in path ${destFileParentDir}) [exec: ${templateFile.executable}]`); 364 | 365 | await fs.mkdir(destFileParentDir, {recursive: true}); 366 | await fs.writeFile(fullDestPath, modifiedContents, { 367 | encoding: 'utf8', 368 | mode: templateFile.executable ? 0o777 : 0o666 369 | }); 370 | } 371 | 372 | async function recursiveChangeFileDate(destPath, newDate) { 373 | let matchedFiles = await getFiles(destPath); 374 | for (let file of matchedFiles) { 375 | regular_fs.utimesSync(file, newDate, newDate); 376 | } 377 | } 378 | 379 | function getFiles(matcherPath) { 380 | return new Promise((resolve, reject) => { 381 | glob([`${matcherPath}/**`], {realpath: true}, (err, files) => { 382 | if (err) reject(err); 383 | else { 384 | resolve(files) 385 | } 386 | }) 387 | }) 388 | } 389 | 390 | 391 | async function processTemplates(templateFiles, destPathBase, fnView, view, writeFiles) { 392 | let ret = {}; 393 | for (let templateFile of templateFiles) { 394 | 395 | let destFileTemplated = templateFile.file; 396 | for (let fnKey in fnView) { 397 | destFileTemplated = destFileTemplated.replace(fnKey, fnView[fnKey]); 398 | } 399 | 400 | let originalContents = await fs.readFile(templateFile.fullpath, 'utf8'); 401 | let modifiedContents = mustache.render(originalContents, view); 402 | 403 | if (writeFiles) { 404 | await writeTemplateFile(destPathBase, templateFile, destFileTemplated, modifiedContents); 405 | } 406 | ret[templateFile.file] = modifiedContents; 407 | } 408 | return ret; 409 | } 410 | 411 | main().then(value => { 412 | console.log("done."); 413 | process.exit(0); 414 | }).catch(reason => { 415 | console.error(reason); 416 | process.exit(1); 417 | }); 418 | -------------------------------------------------------------------------------- /generator/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adoptium-deb-generator", 3 | "version": "0.0.6", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "adoptium-deb-generator", 9 | "version": "0.0.6", 10 | "license": "Apache2.0", 11 | "dependencies": { 12 | "glob-all": "^3", 13 | "good-guy-disk-cache": "^2", 14 | "good-guy-http": "^1", 15 | "moment": "^2", 16 | "mustache": "^3" 17 | } 18 | }, 19 | "node_modules/@schibstedpl/circuit-breaker-js": { 20 | "version": "0.0.2", 21 | "resolved": "https://registry.npmjs.org/@schibstedpl/circuit-breaker-js/-/circuit-breaker-js-0.0.2.tgz", 22 | "integrity": "sha512-82fEbDRVsEAO/XlaFsGb5GKoAMvlfOd/hiNxyPWMvd1ZYJxxHs8hAu4i5Jrlcgpf1sUhhgV53oJSHNwyThsVFQ==" 23 | }, 24 | "node_modules/ajv": { 25 | "version": "5.5.2", 26 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 27 | "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", 28 | "dependencies": { 29 | "co": "^4.6.0", 30 | "fast-deep-equal": "^1.0.0", 31 | "fast-json-stable-stringify": "^2.0.0", 32 | "json-schema-traverse": "^0.3.0" 33 | } 34 | }, 35 | "node_modules/ansi-regex": { 36 | "version": "5.0.1", 37 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 38 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 39 | "engines": { 40 | "node": ">=8" 41 | } 42 | }, 43 | "node_modules/ansi-styles": { 44 | "version": "4.3.0", 45 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 46 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 47 | "dependencies": { 48 | "color-convert": "^2.0.1" 49 | }, 50 | "engines": { 51 | "node": ">=8" 52 | }, 53 | "funding": { 54 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 55 | } 56 | }, 57 | "node_modules/asn1": { 58 | "version": "0.2.4", 59 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 60 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 61 | "dependencies": { 62 | "safer-buffer": "~2.1.0" 63 | } 64 | }, 65 | "node_modules/assert-plus": { 66 | "version": "1.0.0", 67 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 68 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 69 | "engines": { 70 | "node": ">=0.8" 71 | } 72 | }, 73 | "node_modules/async-disk-cache": { 74 | "version": "1.3.5", 75 | "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.5.tgz", 76 | "integrity": "sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==", 77 | "dependencies": { 78 | "debug": "^2.1.3", 79 | "heimdalljs": "^0.2.3", 80 | "istextorbinary": "2.1.0", 81 | "mkdirp": "^0.5.0", 82 | "rimraf": "^2.5.3", 83 | "rsvp": "^3.0.18", 84 | "username-sync": "^1.0.2" 85 | } 86 | }, 87 | "node_modules/asynckit": { 88 | "version": "0.4.0", 89 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 90 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 91 | }, 92 | "node_modules/aws-sign2": { 93 | "version": "0.7.0", 94 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 95 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 96 | "engines": { 97 | "node": "*" 98 | } 99 | }, 100 | "node_modules/aws4": { 101 | "version": "1.11.0", 102 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 103 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 104 | }, 105 | "node_modules/balanced-match": { 106 | "version": "1.0.2", 107 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 108 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 109 | }, 110 | "node_modules/bcrypt-pbkdf": { 111 | "version": "1.0.2", 112 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 113 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 114 | "dependencies": { 115 | "tweetnacl": "^0.14.3" 116 | } 117 | }, 118 | "node_modules/binaryextensions": { 119 | "version": "2.3.0", 120 | "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", 121 | "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==", 122 | "engines": { 123 | "node": ">=0.8" 124 | }, 125 | "funding": { 126 | "url": "https://bevry.me/fund" 127 | } 128 | }, 129 | "node_modules/brace-expansion": { 130 | "version": "1.1.11", 131 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 132 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 133 | "dependencies": { 134 | "balanced-match": "^1.0.0", 135 | "concat-map": "0.0.1" 136 | } 137 | }, 138 | "node_modules/camelcase": { 139 | "version": "5.3.1", 140 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 141 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 142 | "engines": { 143 | "node": ">=6" 144 | } 145 | }, 146 | "node_modules/capitalize": { 147 | "version": "1.0.0", 148 | "resolved": "https://registry.npmjs.org/capitalize/-/capitalize-1.0.0.tgz", 149 | "integrity": "sha1-3IAsWAruEBkpAg0soUtMqKCuRL4=" 150 | }, 151 | "node_modules/caseless": { 152 | "version": "0.12.0", 153 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 154 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 155 | }, 156 | "node_modules/cliui": { 157 | "version": "6.0.0", 158 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 159 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 160 | "dependencies": { 161 | "string-width": "^4.2.0", 162 | "strip-ansi": "^6.0.0", 163 | "wrap-ansi": "^6.2.0" 164 | } 165 | }, 166 | "node_modules/clone": { 167 | "version": "2.1.1", 168 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 169 | "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", 170 | "engines": { 171 | "node": ">=0.8" 172 | } 173 | }, 174 | "node_modules/co": { 175 | "version": "4.6.0", 176 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 177 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 178 | "engines": { 179 | "iojs": ">= 1.0.0", 180 | "node": ">= 0.12.0" 181 | } 182 | }, 183 | "node_modules/color-convert": { 184 | "version": "2.0.1", 185 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 186 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 187 | "dependencies": { 188 | "color-name": "~1.1.4" 189 | }, 190 | "engines": { 191 | "node": ">=7.0.0" 192 | } 193 | }, 194 | "node_modules/color-name": { 195 | "version": "1.1.4", 196 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 197 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 198 | }, 199 | "node_modules/combined-stream": { 200 | "version": "1.0.8", 201 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 202 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 203 | "dependencies": { 204 | "delayed-stream": "~1.0.0" 205 | }, 206 | "engines": { 207 | "node": ">= 0.8" 208 | } 209 | }, 210 | "node_modules/concat-map": { 211 | "version": "0.0.1", 212 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 213 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 214 | }, 215 | "node_modules/core-util-is": { 216 | "version": "1.0.2", 217 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 218 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 219 | }, 220 | "node_modules/dashdash": { 221 | "version": "1.14.1", 222 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 223 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 224 | "dependencies": { 225 | "assert-plus": "^1.0.0" 226 | }, 227 | "engines": { 228 | "node": ">=0.10" 229 | } 230 | }, 231 | "node_modules/debug": { 232 | "version": "2.6.9", 233 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 234 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 235 | "dependencies": { 236 | "ms": "2.0.0" 237 | } 238 | }, 239 | "node_modules/decamelize": { 240 | "version": "1.2.0", 241 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 242 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 243 | "engines": { 244 | "node": ">=0.10.0" 245 | } 246 | }, 247 | "node_modules/delayed-stream": { 248 | "version": "1.0.0", 249 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 250 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 251 | "engines": { 252 | "node": ">=0.4.0" 253 | } 254 | }, 255 | "node_modules/ecc-jsbn": { 256 | "version": "0.1.2", 257 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 258 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 259 | "dependencies": { 260 | "jsbn": "~0.1.0", 261 | "safer-buffer": "^2.1.0" 262 | } 263 | }, 264 | "node_modules/editions": { 265 | "version": "1.3.4", 266 | "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", 267 | "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", 268 | "engines": { 269 | "node": ">=0.8" 270 | } 271 | }, 272 | "node_modules/emoji-regex": { 273 | "version": "8.0.0", 274 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 275 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 276 | }, 277 | "node_modules/extend": { 278 | "version": "3.0.2", 279 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 280 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 281 | }, 282 | "node_modules/extsprintf": { 283 | "version": "1.3.0", 284 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 285 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 286 | "engines": [ 287 | "node >=0.6.0" 288 | ] 289 | }, 290 | "node_modules/fast-deep-equal": { 291 | "version": "1.1.0", 292 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 293 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 294 | }, 295 | "node_modules/fast-json-stable-stringify": { 296 | "version": "2.1.0", 297 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 298 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 299 | }, 300 | "node_modules/find-up": { 301 | "version": "4.1.0", 302 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 303 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 304 | "dependencies": { 305 | "locate-path": "^5.0.0", 306 | "path-exists": "^4.0.0" 307 | }, 308 | "engines": { 309 | "node": ">=8" 310 | } 311 | }, 312 | "node_modules/forever-agent": { 313 | "version": "0.6.1", 314 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 315 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 316 | "engines": { 317 | "node": "*" 318 | } 319 | }, 320 | "node_modules/form-data": { 321 | "version": "2.3.3", 322 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 323 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 324 | "dependencies": { 325 | "asynckit": "^0.4.0", 326 | "combined-stream": "^1.0.6", 327 | "mime-types": "^2.1.12" 328 | }, 329 | "engines": { 330 | "node": ">= 0.12" 331 | } 332 | }, 333 | "node_modules/fs.realpath": { 334 | "version": "1.0.0", 335 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 336 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 337 | }, 338 | "node_modules/get-caller-file": { 339 | "version": "2.0.5", 340 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 341 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 342 | "engines": { 343 | "node": "6.* || 8.* || >= 10.*" 344 | } 345 | }, 346 | "node_modules/getpass": { 347 | "version": "0.1.7", 348 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 349 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 350 | "dependencies": { 351 | "assert-plus": "^1.0.0" 352 | } 353 | }, 354 | "node_modules/glob": { 355 | "version": "7.2.0", 356 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 357 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 358 | "dependencies": { 359 | "fs.realpath": "^1.0.0", 360 | "inflight": "^1.0.4", 361 | "inherits": "2", 362 | "minimatch": "^3.0.4", 363 | "once": "^1.3.0", 364 | "path-is-absolute": "^1.0.0" 365 | }, 366 | "engines": { 367 | "node": "*" 368 | }, 369 | "funding": { 370 | "url": "https://github.com/sponsors/isaacs" 371 | } 372 | }, 373 | "node_modules/glob-all": { 374 | "version": "3.2.1", 375 | "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz", 376 | "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==", 377 | "dependencies": { 378 | "glob": "^7.1.2", 379 | "yargs": "^15.3.1" 380 | }, 381 | "bin": { 382 | "glob-all": "bin/glob-all" 383 | } 384 | }, 385 | "node_modules/good-guy-disk-cache": { 386 | "version": "2.1.0", 387 | "resolved": "https://registry.npmjs.org/good-guy-disk-cache/-/good-guy-disk-cache-2.1.0.tgz", 388 | "integrity": "sha1-M4DC12eQkicjHtJ/xhIEM2p4F0M=", 389 | "dependencies": { 390 | "async-disk-cache": "^1.2.2" 391 | } 392 | }, 393 | "node_modules/good-guy-http": { 394 | "version": "1.14.0", 395 | "resolved": "https://registry.npmjs.org/good-guy-http/-/good-guy-http-1.14.0.tgz", 396 | "integrity": "sha512-QkxYpypxMBVU+YRgbSckOoIi17a3/1JO1PXERHff1NpFdLrFNoAzn6CQ3xuYJ6veQtVMcVoLzxT8Zp0M6p0Jhg==", 397 | "dependencies": { 398 | "@schibstedpl/circuit-breaker-js": "0.0.2", 399 | "capitalize": "^1.0.0", 400 | "clone": "2.1.1", 401 | "request": "2.87.0", 402 | "underscore": "1.12.1" 403 | }, 404 | "engines": { 405 | "node": ">=5" 406 | } 407 | }, 408 | "node_modules/har-schema": { 409 | "version": "2.0.0", 410 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 411 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 412 | "engines": { 413 | "node": ">=4" 414 | } 415 | }, 416 | "node_modules/har-validator": { 417 | "version": "5.0.3", 418 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 419 | "integrity": "sha512-r7LZkP7Z6WMxj5zARzB9dSpIKu/sp0NfHIgtj6kmQXhEArNctjB5FEv/L2XfLdWqIocPT2QVt0LFOlEUioTBtQ==", 420 | "deprecated": "this library is no longer supported", 421 | "dependencies": { 422 | "ajv": "^5.1.0", 423 | "har-schema": "^2.0.0" 424 | }, 425 | "engines": { 426 | "node": ">=4" 427 | } 428 | }, 429 | "node_modules/heimdalljs": { 430 | "version": "0.2.6", 431 | "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", 432 | "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", 433 | "dependencies": { 434 | "rsvp": "~3.2.1" 435 | } 436 | }, 437 | "node_modules/heimdalljs/node_modules/rsvp": { 438 | "version": "3.2.1", 439 | "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", 440 | "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=" 441 | }, 442 | "node_modules/http-signature": { 443 | "version": "1.2.0", 444 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 445 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 446 | "dependencies": { 447 | "assert-plus": "^1.0.0", 448 | "jsprim": "^1.2.2", 449 | "sshpk": "^1.7.0" 450 | }, 451 | "engines": { 452 | "node": ">=0.8", 453 | "npm": ">=1.3.7" 454 | } 455 | }, 456 | "node_modules/inflight": { 457 | "version": "1.0.6", 458 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 459 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 460 | "dependencies": { 461 | "once": "^1.3.0", 462 | "wrappy": "1" 463 | } 464 | }, 465 | "node_modules/inherits": { 466 | "version": "2.0.4", 467 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 468 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 469 | }, 470 | "node_modules/is-fullwidth-code-point": { 471 | "version": "3.0.0", 472 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 473 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 474 | "engines": { 475 | "node": ">=8" 476 | } 477 | }, 478 | "node_modules/is-typedarray": { 479 | "version": "1.0.0", 480 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 481 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 482 | }, 483 | "node_modules/isstream": { 484 | "version": "0.1.2", 485 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 486 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 487 | }, 488 | "node_modules/istextorbinary": { 489 | "version": "2.1.0", 490 | "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", 491 | "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", 492 | "dependencies": { 493 | "binaryextensions": "1 || 2", 494 | "editions": "^1.1.1", 495 | "textextensions": "1 || 2" 496 | }, 497 | "engines": { 498 | "node": ">=0.12" 499 | } 500 | }, 501 | "node_modules/jsbn": { 502 | "version": "0.1.1", 503 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 504 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 505 | }, 506 | "node_modules/json-schema": { 507 | "version": "0.4.0", 508 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 509 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 510 | }, 511 | "node_modules/json-schema-traverse": { 512 | "version": "0.3.1", 513 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 514 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 515 | }, 516 | "node_modules/json-stringify-safe": { 517 | "version": "5.0.1", 518 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 519 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 520 | }, 521 | "node_modules/jsprim": { 522 | "version": "1.4.2", 523 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 524 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 525 | "dependencies": { 526 | "assert-plus": "1.0.0", 527 | "extsprintf": "1.3.0", 528 | "json-schema": "0.4.0", 529 | "verror": "1.10.0" 530 | }, 531 | "engines": { 532 | "node": ">=0.6.0" 533 | } 534 | }, 535 | "node_modules/locate-path": { 536 | "version": "5.0.0", 537 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 538 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 539 | "dependencies": { 540 | "p-locate": "^4.1.0" 541 | }, 542 | "engines": { 543 | "node": ">=8" 544 | } 545 | }, 546 | "node_modules/mime-db": { 547 | "version": "1.49.0", 548 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 549 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", 550 | "engines": { 551 | "node": ">= 0.6" 552 | } 553 | }, 554 | "node_modules/mime-types": { 555 | "version": "2.1.32", 556 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 557 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 558 | "dependencies": { 559 | "mime-db": "1.49.0" 560 | }, 561 | "engines": { 562 | "node": ">= 0.6" 563 | } 564 | }, 565 | "node_modules/minimatch": { 566 | "version": "3.1.2", 567 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 568 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 569 | "dependencies": { 570 | "brace-expansion": "^1.1.7" 571 | }, 572 | "engines": { 573 | "node": "*" 574 | } 575 | }, 576 | "node_modules/minimist": { 577 | "version": "1.2.7", 578 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 579 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 580 | "funding": { 581 | "url": "https://github.com/sponsors/ljharb" 582 | } 583 | }, 584 | "node_modules/mkdirp": { 585 | "version": "0.5.5", 586 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 587 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 588 | "dependencies": { 589 | "minimist": "^1.2.5" 590 | }, 591 | "bin": { 592 | "mkdirp": "bin/cmd.js" 593 | } 594 | }, 595 | "node_modules/moment": { 596 | "version": "2.29.4", 597 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 598 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 599 | "engines": { 600 | "node": "*" 601 | } 602 | }, 603 | "node_modules/ms": { 604 | "version": "2.0.0", 605 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 606 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 607 | }, 608 | "node_modules/mustache": { 609 | "version": "3.2.1", 610 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", 611 | "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", 612 | "bin": { 613 | "mustache": "bin/mustache" 614 | }, 615 | "engines": { 616 | "npm": ">=1.4.0" 617 | } 618 | }, 619 | "node_modules/oauth-sign": { 620 | "version": "0.8.2", 621 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 622 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 623 | "engines": { 624 | "node": "*" 625 | } 626 | }, 627 | "node_modules/once": { 628 | "version": "1.4.0", 629 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 630 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 631 | "dependencies": { 632 | "wrappy": "1" 633 | } 634 | }, 635 | "node_modules/p-limit": { 636 | "version": "2.3.0", 637 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 638 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 639 | "dependencies": { 640 | "p-try": "^2.0.0" 641 | }, 642 | "engines": { 643 | "node": ">=6" 644 | }, 645 | "funding": { 646 | "url": "https://github.com/sponsors/sindresorhus" 647 | } 648 | }, 649 | "node_modules/p-locate": { 650 | "version": "4.1.0", 651 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 652 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 653 | "dependencies": { 654 | "p-limit": "^2.2.0" 655 | }, 656 | "engines": { 657 | "node": ">=8" 658 | } 659 | }, 660 | "node_modules/p-try": { 661 | "version": "2.2.0", 662 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 663 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 664 | "engines": { 665 | "node": ">=6" 666 | } 667 | }, 668 | "node_modules/path-exists": { 669 | "version": "4.0.0", 670 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 671 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 672 | "engines": { 673 | "node": ">=8" 674 | } 675 | }, 676 | "node_modules/path-is-absolute": { 677 | "version": "1.0.1", 678 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 679 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 680 | "engines": { 681 | "node": ">=0.10.0" 682 | } 683 | }, 684 | "node_modules/performance-now": { 685 | "version": "2.1.0", 686 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 687 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 688 | }, 689 | "node_modules/punycode": { 690 | "version": "1.4.1", 691 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 692 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 693 | }, 694 | "node_modules/qs": { 695 | "version": "6.5.3", 696 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 697 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", 698 | "engines": { 699 | "node": ">=0.6" 700 | } 701 | }, 702 | "node_modules/request": { 703 | "version": "2.87.0", 704 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 705 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 706 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 707 | "dependencies": { 708 | "aws-sign2": "~0.7.0", 709 | "aws4": "^1.6.0", 710 | "caseless": "~0.12.0", 711 | "combined-stream": "~1.0.5", 712 | "extend": "~3.0.1", 713 | "forever-agent": "~0.6.1", 714 | "form-data": "~2.3.1", 715 | "har-validator": "~5.0.3", 716 | "http-signature": "~1.2.0", 717 | "is-typedarray": "~1.0.0", 718 | "isstream": "~0.1.2", 719 | "json-stringify-safe": "~5.0.1", 720 | "mime-types": "~2.1.17", 721 | "oauth-sign": "~0.8.2", 722 | "performance-now": "^2.1.0", 723 | "qs": "~6.5.1", 724 | "safe-buffer": "^5.1.1", 725 | "tough-cookie": "~2.3.3", 726 | "tunnel-agent": "^0.6.0", 727 | "uuid": "^3.1.0" 728 | }, 729 | "engines": { 730 | "node": ">= 4" 731 | } 732 | }, 733 | "node_modules/require-directory": { 734 | "version": "2.1.1", 735 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 736 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 737 | "engines": { 738 | "node": ">=0.10.0" 739 | } 740 | }, 741 | "node_modules/require-main-filename": { 742 | "version": "2.0.0", 743 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 744 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 745 | }, 746 | "node_modules/rimraf": { 747 | "version": "2.7.1", 748 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 749 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 750 | "dependencies": { 751 | "glob": "^7.1.3" 752 | }, 753 | "bin": { 754 | "rimraf": "bin.js" 755 | } 756 | }, 757 | "node_modules/rsvp": { 758 | "version": "3.6.2", 759 | "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", 760 | "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", 761 | "engines": { 762 | "node": "0.12.* || 4.* || 6.* || >= 7.*" 763 | } 764 | }, 765 | "node_modules/safe-buffer": { 766 | "version": "5.2.1", 767 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 768 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 769 | "funding": [ 770 | { 771 | "type": "github", 772 | "url": "https://github.com/sponsors/feross" 773 | }, 774 | { 775 | "type": "patreon", 776 | "url": "https://www.patreon.com/feross" 777 | }, 778 | { 779 | "type": "consulting", 780 | "url": "https://feross.org/support" 781 | } 782 | ] 783 | }, 784 | "node_modules/safer-buffer": { 785 | "version": "2.1.2", 786 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 787 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 788 | }, 789 | "node_modules/set-blocking": { 790 | "version": "2.0.0", 791 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 792 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 793 | }, 794 | "node_modules/sshpk": { 795 | "version": "1.16.1", 796 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 797 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 798 | "dependencies": { 799 | "asn1": "~0.2.3", 800 | "assert-plus": "^1.0.0", 801 | "bcrypt-pbkdf": "^1.0.0", 802 | "dashdash": "^1.12.0", 803 | "ecc-jsbn": "~0.1.1", 804 | "getpass": "^0.1.1", 805 | "jsbn": "~0.1.0", 806 | "safer-buffer": "^2.0.2", 807 | "tweetnacl": "~0.14.0" 808 | }, 809 | "engines": { 810 | "node": ">=0.10.0" 811 | } 812 | }, 813 | "node_modules/string-width": { 814 | "version": "4.2.3", 815 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 816 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 817 | "dependencies": { 818 | "emoji-regex": "^8.0.0", 819 | "is-fullwidth-code-point": "^3.0.0", 820 | "strip-ansi": "^6.0.1" 821 | }, 822 | "engines": { 823 | "node": ">=8" 824 | } 825 | }, 826 | "node_modules/strip-ansi": { 827 | "version": "6.0.1", 828 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 829 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 830 | "dependencies": { 831 | "ansi-regex": "^5.0.1" 832 | }, 833 | "engines": { 834 | "node": ">=8" 835 | } 836 | }, 837 | "node_modules/textextensions": { 838 | "version": "2.6.0", 839 | "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", 840 | "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", 841 | "engines": { 842 | "node": ">=0.8" 843 | }, 844 | "funding": { 845 | "url": "https://bevry.me/fund" 846 | } 847 | }, 848 | "node_modules/tough-cookie": { 849 | "version": "2.3.4", 850 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 851 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 852 | "dependencies": { 853 | "punycode": "^1.4.1" 854 | }, 855 | "engines": { 856 | "node": ">=0.8" 857 | } 858 | }, 859 | "node_modules/tunnel-agent": { 860 | "version": "0.6.0", 861 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 862 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 863 | "dependencies": { 864 | "safe-buffer": "^5.0.1" 865 | }, 866 | "engines": { 867 | "node": "*" 868 | } 869 | }, 870 | "node_modules/tweetnacl": { 871 | "version": "0.14.5", 872 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 873 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 874 | }, 875 | "node_modules/underscore": { 876 | "version": "1.12.1", 877 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", 878 | "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" 879 | }, 880 | "node_modules/username-sync": { 881 | "version": "1.0.3", 882 | "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", 883 | "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==" 884 | }, 885 | "node_modules/uuid": { 886 | "version": "3.4.0", 887 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 888 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 889 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 890 | "bin": { 891 | "uuid": "bin/uuid" 892 | } 893 | }, 894 | "node_modules/verror": { 895 | "version": "1.10.0", 896 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 897 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 898 | "engines": [ 899 | "node >=0.6.0" 900 | ], 901 | "dependencies": { 902 | "assert-plus": "^1.0.0", 903 | "core-util-is": "1.0.2", 904 | "extsprintf": "^1.2.0" 905 | } 906 | }, 907 | "node_modules/which-module": { 908 | "version": "2.0.0", 909 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 910 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 911 | }, 912 | "node_modules/wrap-ansi": { 913 | "version": "6.2.0", 914 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 915 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 916 | "dependencies": { 917 | "ansi-styles": "^4.0.0", 918 | "string-width": "^4.1.0", 919 | "strip-ansi": "^6.0.0" 920 | }, 921 | "engines": { 922 | "node": ">=8" 923 | } 924 | }, 925 | "node_modules/wrappy": { 926 | "version": "1.0.2", 927 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 928 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 929 | }, 930 | "node_modules/y18n": { 931 | "version": "4.0.3", 932 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 933 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 934 | }, 935 | "node_modules/yargs": { 936 | "version": "15.4.1", 937 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 938 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 939 | "dependencies": { 940 | "cliui": "^6.0.0", 941 | "decamelize": "^1.2.0", 942 | "find-up": "^4.1.0", 943 | "get-caller-file": "^2.0.1", 944 | "require-directory": "^2.1.1", 945 | "require-main-filename": "^2.0.0", 946 | "set-blocking": "^2.0.0", 947 | "string-width": "^4.2.0", 948 | "which-module": "^2.0.0", 949 | "y18n": "^4.0.0", 950 | "yargs-parser": "^18.1.2" 951 | }, 952 | "engines": { 953 | "node": ">=8" 954 | } 955 | }, 956 | "node_modules/yargs-parser": { 957 | "version": "18.1.3", 958 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 959 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 960 | "dependencies": { 961 | "camelcase": "^5.0.0", 962 | "decamelize": "^1.2.0" 963 | }, 964 | "engines": { 965 | "node": ">=6" 966 | } 967 | } 968 | }, 969 | "dependencies": { 970 | "@schibstedpl/circuit-breaker-js": { 971 | "version": "0.0.2", 972 | "resolved": "https://registry.npmjs.org/@schibstedpl/circuit-breaker-js/-/circuit-breaker-js-0.0.2.tgz", 973 | "integrity": "sha512-82fEbDRVsEAO/XlaFsGb5GKoAMvlfOd/hiNxyPWMvd1ZYJxxHs8hAu4i5Jrlcgpf1sUhhgV53oJSHNwyThsVFQ==" 974 | }, 975 | "ajv": { 976 | "version": "5.5.2", 977 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 978 | "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", 979 | "requires": { 980 | "co": "^4.6.0", 981 | "fast-deep-equal": "^1.0.0", 982 | "fast-json-stable-stringify": "^2.0.0", 983 | "json-schema-traverse": "^0.3.0" 984 | } 985 | }, 986 | "ansi-regex": { 987 | "version": "5.0.1", 988 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 989 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 990 | }, 991 | "ansi-styles": { 992 | "version": "4.3.0", 993 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 994 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 995 | "requires": { 996 | "color-convert": "^2.0.1" 997 | } 998 | }, 999 | "asn1": { 1000 | "version": "0.2.4", 1001 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 1002 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 1003 | "requires": { 1004 | "safer-buffer": "~2.1.0" 1005 | } 1006 | }, 1007 | "assert-plus": { 1008 | "version": "1.0.0", 1009 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1010 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1011 | }, 1012 | "async-disk-cache": { 1013 | "version": "1.3.5", 1014 | "resolved": "https://registry.npmjs.org/async-disk-cache/-/async-disk-cache-1.3.5.tgz", 1015 | "integrity": "sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ==", 1016 | "requires": { 1017 | "debug": "^2.1.3", 1018 | "heimdalljs": "^0.2.3", 1019 | "istextorbinary": "2.1.0", 1020 | "mkdirp": "^0.5.0", 1021 | "rimraf": "^2.5.3", 1022 | "rsvp": "^3.0.18", 1023 | "username-sync": "^1.0.2" 1024 | } 1025 | }, 1026 | "asynckit": { 1027 | "version": "0.4.0", 1028 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1029 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 1030 | }, 1031 | "aws-sign2": { 1032 | "version": "0.7.0", 1033 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 1034 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 1035 | }, 1036 | "aws4": { 1037 | "version": "1.11.0", 1038 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", 1039 | "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" 1040 | }, 1041 | "balanced-match": { 1042 | "version": "1.0.2", 1043 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1044 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1045 | }, 1046 | "bcrypt-pbkdf": { 1047 | "version": "1.0.2", 1048 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 1049 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 1050 | "requires": { 1051 | "tweetnacl": "^0.14.3" 1052 | } 1053 | }, 1054 | "binaryextensions": { 1055 | "version": "2.3.0", 1056 | "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.3.0.tgz", 1057 | "integrity": "sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==" 1058 | }, 1059 | "brace-expansion": { 1060 | "version": "1.1.11", 1061 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1062 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1063 | "requires": { 1064 | "balanced-match": "^1.0.0", 1065 | "concat-map": "0.0.1" 1066 | } 1067 | }, 1068 | "camelcase": { 1069 | "version": "5.3.1", 1070 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 1071 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 1072 | }, 1073 | "capitalize": { 1074 | "version": "1.0.0", 1075 | "resolved": "https://registry.npmjs.org/capitalize/-/capitalize-1.0.0.tgz", 1076 | "integrity": "sha1-3IAsWAruEBkpAg0soUtMqKCuRL4=" 1077 | }, 1078 | "caseless": { 1079 | "version": "0.12.0", 1080 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1081 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1082 | }, 1083 | "cliui": { 1084 | "version": "6.0.0", 1085 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 1086 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 1087 | "requires": { 1088 | "string-width": "^4.2.0", 1089 | "strip-ansi": "^6.0.0", 1090 | "wrap-ansi": "^6.2.0" 1091 | } 1092 | }, 1093 | "clone": { 1094 | "version": "2.1.1", 1095 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", 1096 | "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" 1097 | }, 1098 | "co": { 1099 | "version": "4.6.0", 1100 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 1101 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 1102 | }, 1103 | "color-convert": { 1104 | "version": "2.0.1", 1105 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1106 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1107 | "requires": { 1108 | "color-name": "~1.1.4" 1109 | } 1110 | }, 1111 | "color-name": { 1112 | "version": "1.1.4", 1113 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1114 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1115 | }, 1116 | "combined-stream": { 1117 | "version": "1.0.8", 1118 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1119 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1120 | "requires": { 1121 | "delayed-stream": "~1.0.0" 1122 | } 1123 | }, 1124 | "concat-map": { 1125 | "version": "0.0.1", 1126 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1127 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 1128 | }, 1129 | "core-util-is": { 1130 | "version": "1.0.2", 1131 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1132 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 1133 | }, 1134 | "dashdash": { 1135 | "version": "1.14.1", 1136 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 1137 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 1138 | "requires": { 1139 | "assert-plus": "^1.0.0" 1140 | } 1141 | }, 1142 | "debug": { 1143 | "version": "2.6.9", 1144 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1145 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1146 | "requires": { 1147 | "ms": "2.0.0" 1148 | } 1149 | }, 1150 | "decamelize": { 1151 | "version": "1.2.0", 1152 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 1153 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 1154 | }, 1155 | "delayed-stream": { 1156 | "version": "1.0.0", 1157 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1158 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 1159 | }, 1160 | "ecc-jsbn": { 1161 | "version": "0.1.2", 1162 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 1163 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 1164 | "requires": { 1165 | "jsbn": "~0.1.0", 1166 | "safer-buffer": "^2.1.0" 1167 | } 1168 | }, 1169 | "editions": { 1170 | "version": "1.3.4", 1171 | "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", 1172 | "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" 1173 | }, 1174 | "emoji-regex": { 1175 | "version": "8.0.0", 1176 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1177 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1178 | }, 1179 | "extend": { 1180 | "version": "3.0.2", 1181 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 1182 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 1183 | }, 1184 | "extsprintf": { 1185 | "version": "1.3.0", 1186 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1187 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 1188 | }, 1189 | "fast-deep-equal": { 1190 | "version": "1.1.0", 1191 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 1192 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" 1193 | }, 1194 | "fast-json-stable-stringify": { 1195 | "version": "2.1.0", 1196 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1197 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 1198 | }, 1199 | "find-up": { 1200 | "version": "4.1.0", 1201 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 1202 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1203 | "requires": { 1204 | "locate-path": "^5.0.0", 1205 | "path-exists": "^4.0.0" 1206 | } 1207 | }, 1208 | "forever-agent": { 1209 | "version": "0.6.1", 1210 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1211 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 1212 | }, 1213 | "form-data": { 1214 | "version": "2.3.3", 1215 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1216 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1217 | "requires": { 1218 | "asynckit": "^0.4.0", 1219 | "combined-stream": "^1.0.6", 1220 | "mime-types": "^2.1.12" 1221 | } 1222 | }, 1223 | "fs.realpath": { 1224 | "version": "1.0.0", 1225 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1226 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1227 | }, 1228 | "get-caller-file": { 1229 | "version": "2.0.5", 1230 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1231 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1232 | }, 1233 | "getpass": { 1234 | "version": "0.1.7", 1235 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1236 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1237 | "requires": { 1238 | "assert-plus": "^1.0.0" 1239 | } 1240 | }, 1241 | "glob": { 1242 | "version": "7.2.0", 1243 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 1244 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 1245 | "requires": { 1246 | "fs.realpath": "^1.0.0", 1247 | "inflight": "^1.0.4", 1248 | "inherits": "2", 1249 | "minimatch": "^3.0.4", 1250 | "once": "^1.3.0", 1251 | "path-is-absolute": "^1.0.0" 1252 | } 1253 | }, 1254 | "glob-all": { 1255 | "version": "3.2.1", 1256 | "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.2.1.tgz", 1257 | "integrity": "sha512-x877rVkzB3ipid577QOp+eQCR6M5ZyiwrtaYgrX/z3EThaSPFtLDwBXFHc3sH1cG0R0vFYI5SRYeWMMSEyXkUw==", 1258 | "requires": { 1259 | "glob": "^7.1.2", 1260 | "yargs": "^15.3.1" 1261 | } 1262 | }, 1263 | "good-guy-disk-cache": { 1264 | "version": "2.1.0", 1265 | "resolved": "https://registry.npmjs.org/good-guy-disk-cache/-/good-guy-disk-cache-2.1.0.tgz", 1266 | "integrity": "sha1-M4DC12eQkicjHtJ/xhIEM2p4F0M=", 1267 | "requires": { 1268 | "async-disk-cache": "^1.2.2" 1269 | } 1270 | }, 1271 | "good-guy-http": { 1272 | "version": "1.14.0", 1273 | "resolved": "https://registry.npmjs.org/good-guy-http/-/good-guy-http-1.14.0.tgz", 1274 | "integrity": "sha512-QkxYpypxMBVU+YRgbSckOoIi17a3/1JO1PXERHff1NpFdLrFNoAzn6CQ3xuYJ6veQtVMcVoLzxT8Zp0M6p0Jhg==", 1275 | "requires": { 1276 | "@schibstedpl/circuit-breaker-js": "0.0.2", 1277 | "capitalize": "^1.0.0", 1278 | "clone": "2.1.1", 1279 | "request": "2.87.0", 1280 | "underscore": "1.12.1" 1281 | } 1282 | }, 1283 | "har-schema": { 1284 | "version": "2.0.0", 1285 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1286 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 1287 | }, 1288 | "har-validator": { 1289 | "version": "5.0.3", 1290 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 1291 | "integrity": "sha512-r7LZkP7Z6WMxj5zARzB9dSpIKu/sp0NfHIgtj6kmQXhEArNctjB5FEv/L2XfLdWqIocPT2QVt0LFOlEUioTBtQ==", 1292 | "requires": { 1293 | "ajv": "^5.1.0", 1294 | "har-schema": "^2.0.0" 1295 | } 1296 | }, 1297 | "heimdalljs": { 1298 | "version": "0.2.6", 1299 | "resolved": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.6.tgz", 1300 | "integrity": "sha512-o9bd30+5vLBvBtzCPwwGqpry2+n0Hi6H1+qwt6y+0kwRHGGF8TFIhJPmnuM0xO97zaKrDZMwO/V56fAnn8m/tA==", 1301 | "requires": { 1302 | "rsvp": "~3.2.1" 1303 | }, 1304 | "dependencies": { 1305 | "rsvp": { 1306 | "version": "3.2.1", 1307 | "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", 1308 | "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=" 1309 | } 1310 | } 1311 | }, 1312 | "http-signature": { 1313 | "version": "1.2.0", 1314 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1315 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1316 | "requires": { 1317 | "assert-plus": "^1.0.0", 1318 | "jsprim": "^1.2.2", 1319 | "sshpk": "^1.7.0" 1320 | } 1321 | }, 1322 | "inflight": { 1323 | "version": "1.0.6", 1324 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1325 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1326 | "requires": { 1327 | "once": "^1.3.0", 1328 | "wrappy": "1" 1329 | } 1330 | }, 1331 | "inherits": { 1332 | "version": "2.0.4", 1333 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1334 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1335 | }, 1336 | "is-fullwidth-code-point": { 1337 | "version": "3.0.0", 1338 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1339 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1340 | }, 1341 | "is-typedarray": { 1342 | "version": "1.0.0", 1343 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1344 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1345 | }, 1346 | "isstream": { 1347 | "version": "0.1.2", 1348 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1349 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1350 | }, 1351 | "istextorbinary": { 1352 | "version": "2.1.0", 1353 | "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.1.0.tgz", 1354 | "integrity": "sha1-2+0qb1G+L3R1to+JRlgRFBt1iHQ=", 1355 | "requires": { 1356 | "binaryextensions": "1 || 2", 1357 | "editions": "^1.1.1", 1358 | "textextensions": "1 || 2" 1359 | } 1360 | }, 1361 | "jsbn": { 1362 | "version": "0.1.1", 1363 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1364 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 1365 | }, 1366 | "json-schema": { 1367 | "version": "0.4.0", 1368 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 1369 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" 1370 | }, 1371 | "json-schema-traverse": { 1372 | "version": "0.3.1", 1373 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1374 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 1375 | }, 1376 | "json-stringify-safe": { 1377 | "version": "5.0.1", 1378 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1379 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1380 | }, 1381 | "jsprim": { 1382 | "version": "1.4.2", 1383 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 1384 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 1385 | "requires": { 1386 | "assert-plus": "1.0.0", 1387 | "extsprintf": "1.3.0", 1388 | "json-schema": "0.4.0", 1389 | "verror": "1.10.0" 1390 | } 1391 | }, 1392 | "locate-path": { 1393 | "version": "5.0.0", 1394 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 1395 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1396 | "requires": { 1397 | "p-locate": "^4.1.0" 1398 | } 1399 | }, 1400 | "mime-db": { 1401 | "version": "1.49.0", 1402 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 1403 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 1404 | }, 1405 | "mime-types": { 1406 | "version": "2.1.32", 1407 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 1408 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 1409 | "requires": { 1410 | "mime-db": "1.49.0" 1411 | } 1412 | }, 1413 | "minimatch": { 1414 | "version": "3.1.2", 1415 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1416 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1417 | "requires": { 1418 | "brace-expansion": "^1.1.7" 1419 | } 1420 | }, 1421 | "minimist": { 1422 | "version": "1.2.7", 1423 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1424 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" 1425 | }, 1426 | "mkdirp": { 1427 | "version": "0.5.5", 1428 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1429 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1430 | "requires": { 1431 | "minimist": "^1.2.5" 1432 | } 1433 | }, 1434 | "moment": { 1435 | "version": "2.29.4", 1436 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 1437 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" 1438 | }, 1439 | "ms": { 1440 | "version": "2.0.0", 1441 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1442 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1443 | }, 1444 | "mustache": { 1445 | "version": "3.2.1", 1446 | "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", 1447 | "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==" 1448 | }, 1449 | "oauth-sign": { 1450 | "version": "0.8.2", 1451 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1452 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 1453 | }, 1454 | "once": { 1455 | "version": "1.4.0", 1456 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1457 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1458 | "requires": { 1459 | "wrappy": "1" 1460 | } 1461 | }, 1462 | "p-limit": { 1463 | "version": "2.3.0", 1464 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1465 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1466 | "requires": { 1467 | "p-try": "^2.0.0" 1468 | } 1469 | }, 1470 | "p-locate": { 1471 | "version": "4.1.0", 1472 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 1473 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1474 | "requires": { 1475 | "p-limit": "^2.2.0" 1476 | } 1477 | }, 1478 | "p-try": { 1479 | "version": "2.2.0", 1480 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1481 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1482 | }, 1483 | "path-exists": { 1484 | "version": "4.0.0", 1485 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1486 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1487 | }, 1488 | "path-is-absolute": { 1489 | "version": "1.0.1", 1490 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1491 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1492 | }, 1493 | "performance-now": { 1494 | "version": "2.1.0", 1495 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1496 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1497 | }, 1498 | "punycode": { 1499 | "version": "1.4.1", 1500 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1501 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1502 | }, 1503 | "qs": { 1504 | "version": "6.5.3", 1505 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 1506 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" 1507 | }, 1508 | "request": { 1509 | "version": "2.87.0", 1510 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 1511 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 1512 | "requires": { 1513 | "aws-sign2": "~0.7.0", 1514 | "aws4": "^1.6.0", 1515 | "caseless": "~0.12.0", 1516 | "combined-stream": "~1.0.5", 1517 | "extend": "~3.0.1", 1518 | "forever-agent": "~0.6.1", 1519 | "form-data": "~2.3.1", 1520 | "har-validator": "~5.0.3", 1521 | "http-signature": "~1.2.0", 1522 | "is-typedarray": "~1.0.0", 1523 | "isstream": "~0.1.2", 1524 | "json-stringify-safe": "~5.0.1", 1525 | "mime-types": "~2.1.17", 1526 | "oauth-sign": "~0.8.2", 1527 | "performance-now": "^2.1.0", 1528 | "qs": "~6.5.1", 1529 | "safe-buffer": "^5.1.1", 1530 | "tough-cookie": "~2.3.3", 1531 | "tunnel-agent": "^0.6.0", 1532 | "uuid": "^3.1.0" 1533 | } 1534 | }, 1535 | "require-directory": { 1536 | "version": "2.1.1", 1537 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1538 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1539 | }, 1540 | "require-main-filename": { 1541 | "version": "2.0.0", 1542 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1543 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1544 | }, 1545 | "rimraf": { 1546 | "version": "2.7.1", 1547 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 1548 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 1549 | "requires": { 1550 | "glob": "^7.1.3" 1551 | } 1552 | }, 1553 | "rsvp": { 1554 | "version": "3.6.2", 1555 | "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", 1556 | "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" 1557 | }, 1558 | "safe-buffer": { 1559 | "version": "5.2.1", 1560 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1561 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1562 | }, 1563 | "safer-buffer": { 1564 | "version": "2.1.2", 1565 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1566 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1567 | }, 1568 | "set-blocking": { 1569 | "version": "2.0.0", 1570 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1571 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1572 | }, 1573 | "sshpk": { 1574 | "version": "1.16.1", 1575 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1576 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1577 | "requires": { 1578 | "asn1": "~0.2.3", 1579 | "assert-plus": "^1.0.0", 1580 | "bcrypt-pbkdf": "^1.0.0", 1581 | "dashdash": "^1.12.0", 1582 | "ecc-jsbn": "~0.1.1", 1583 | "getpass": "^0.1.1", 1584 | "jsbn": "~0.1.0", 1585 | "safer-buffer": "^2.0.2", 1586 | "tweetnacl": "~0.14.0" 1587 | } 1588 | }, 1589 | "string-width": { 1590 | "version": "4.2.3", 1591 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1592 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1593 | "requires": { 1594 | "emoji-regex": "^8.0.0", 1595 | "is-fullwidth-code-point": "^3.0.0", 1596 | "strip-ansi": "^6.0.1" 1597 | } 1598 | }, 1599 | "strip-ansi": { 1600 | "version": "6.0.1", 1601 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1602 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1603 | "requires": { 1604 | "ansi-regex": "^5.0.1" 1605 | } 1606 | }, 1607 | "textextensions": { 1608 | "version": "2.6.0", 1609 | "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", 1610 | "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==" 1611 | }, 1612 | "tough-cookie": { 1613 | "version": "2.3.4", 1614 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1615 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1616 | "requires": { 1617 | "punycode": "^1.4.1" 1618 | } 1619 | }, 1620 | "tunnel-agent": { 1621 | "version": "0.6.0", 1622 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1623 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1624 | "requires": { 1625 | "safe-buffer": "^5.0.1" 1626 | } 1627 | }, 1628 | "tweetnacl": { 1629 | "version": "0.14.5", 1630 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1631 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 1632 | }, 1633 | "underscore": { 1634 | "version": "1.12.1", 1635 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", 1636 | "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" 1637 | }, 1638 | "username-sync": { 1639 | "version": "1.0.3", 1640 | "resolved": "https://registry.npmjs.org/username-sync/-/username-sync-1.0.3.tgz", 1641 | "integrity": "sha512-m/7/FSqjJNAzF2La448c/aEom0gJy7HY7Y509h6l0ePvEkFictAGptwWaj1msWJ38JbfEDOUoE8kqFee9EHKdA==" 1642 | }, 1643 | "uuid": { 1644 | "version": "3.4.0", 1645 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1646 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 1647 | }, 1648 | "verror": { 1649 | "version": "1.10.0", 1650 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1651 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1652 | "requires": { 1653 | "assert-plus": "^1.0.0", 1654 | "core-util-is": "1.0.2", 1655 | "extsprintf": "^1.2.0" 1656 | } 1657 | }, 1658 | "which-module": { 1659 | "version": "2.0.0", 1660 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1661 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 1662 | }, 1663 | "wrap-ansi": { 1664 | "version": "6.2.0", 1665 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 1666 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 1667 | "requires": { 1668 | "ansi-styles": "^4.0.0", 1669 | "string-width": "^4.1.0", 1670 | "strip-ansi": "^6.0.0" 1671 | } 1672 | }, 1673 | "wrappy": { 1674 | "version": "1.0.2", 1675 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1676 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1677 | }, 1678 | "y18n": { 1679 | "version": "4.0.3", 1680 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 1681 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 1682 | }, 1683 | "yargs": { 1684 | "version": "15.4.1", 1685 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 1686 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 1687 | "requires": { 1688 | "cliui": "^6.0.0", 1689 | "decamelize": "^1.2.0", 1690 | "find-up": "^4.1.0", 1691 | "get-caller-file": "^2.0.1", 1692 | "require-directory": "^2.1.1", 1693 | "require-main-filename": "^2.0.0", 1694 | "set-blocking": "^2.0.0", 1695 | "string-width": "^4.2.0", 1696 | "which-module": "^2.0.0", 1697 | "y18n": "^4.0.0", 1698 | "yargs-parser": "^18.1.2" 1699 | } 1700 | }, 1701 | "yargs-parser": { 1702 | "version": "18.1.3", 1703 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 1704 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 1705 | "requires": { 1706 | "camelcase": "^5.0.0", 1707 | "decamelize": "^1.2.0" 1708 | } 1709 | } 1710 | } 1711 | } 1712 | --------------------------------------------------------------------------------