├── 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 |
--------------------------------------------------------------------------------